Katrin 0 26 мая, 2005 Опубликовано 26 мая, 2005 · Жалоба Я пишу на AHDL , что значит декодировщик Манчестера? Это нечто вроде приемника, кто имеет пример , простейший, пусть на 8 бит на AHDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Я пишу на AHDL , что значит декодировщик Манчестера? Это нечто вроде приемника, кто имеет пример , простейший, пусть на 8 бит на AHDL? <{POST_SNAPBACK}> Манчестерский код - кодирование битов перепадами сигналов: 1 кодируется как переход сигнала с низкого уровня на высокий, 0 - с высокого на низкий. Соответственно декодер Манчестера будет преобразовывать такое представление в код NRZ (или по простому - в биты). Достоинство кода - хорошие самосинхронизирующие свойства. Кода готового у меня нет, но задача не самая сложная, можно и самому посидеть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tocha 0 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Я пишу на AHDL , что значит декодировщик Манчестера? Это нечто вроде приемника, кто имеет пример , простейший, пусть на 8 бит на AHDL? <{POST_SNAPBACK}> Состоит из двух тригеров и счётчика. Много где описан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Elresearch 1 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Вот что мне в своё время удалось нарыть в инете. конечно относиться к микроконтроллерам, но адаптировать не сложно. "- было подробно в разделе AN про применение манчестер2 в радиопротоколе на http://www.nvlsi.no/index.cfm?obj=product&act=display&pro=56 щас че-то не могу найти, обновили сайт. А было там написано, что самое главное - не выделить ложный перепад. Я делал так (затачивал под радиопередачу): - по перепаду - вход в прерывание; - считываем значение; - запускаем счетчик, который будет отсчитывать время чуть меньшее чем половина тактового интервала (т.е. счетчик переполнится чуть раньше, чем должен прийти истинный перепад); - ну там делаем свои дела, обнуляем флаг прерываний, возвращаемся в осн.прогу; Допустим счетчик не досчитал, а прерывание по перепаду было - это лажа, считанныое значение будет неверно. Счетчик досчитал, перепад щас будет, я запускаю второй счетчик, анализирую, был ли перепад за время его счета. Дальше все ясно: был - хорошо, запускаем первый счетчик, регистрируем первый бит и т.д.; если не был - хуже, принятое значение неверно. http://kazus.ru/modules.php?name=Forums&fi...1004&highlight= Есть простой способ избавляться от помех - задествовать простейший цифровой фильтр. Делается так: таймером организуем интервалы интегрирования(100мкс например, можно и грубее). Обслуживание - по прерыванию. Внутри интервала программно опрашивая вход складываем единицы и нули в два регистра. В обработке прерывания сравниваем два счетчика и принимаем решение - что это было ( чего оказалось больше 0 или 1). Метод используется в систем приемников ДУ и прочих устройствах.Тип кодирования сигнала не важен. Для фильтрации 500Гц достаточно иметь тактовую частоту 4МГц для контроллера. При приеме манчестера чаще всего нужно решить две задачи: 1) засинхронизироваться с передатчиком (и поддерживать синхронизм при приеме посылки) 2) производить прием при наличии статистических помех. Первая задача в общем виде решается так: ищется или первый фронт/срез и затем делается попытка засинхронизироваться на определенной скорости передачи либо (я предпочитаю второй вариант) в начале каждой посылки передается специальная последовательность (маркер) по которой можно однозначно узнать начало посылки и засинхронизироваться. Код для маркера можно выбирать любой, лучше конечно что-нибудь помехоустойчивое. Неплохим выбором бывает использование последовательноcти из N подряд идущих 0 и 1, что дает меандр с частотой вдвое меньшей частоты передачи. Легко синхронизироваться или даже делать автоопределение скорости передачи. При приеме длинных пакетов просто необходимо производить подстройку синхронизации в детекторе манчестера. Для этого набирается статистика за некоторое время приема - это может быть измерение отклонения (опережение или запаздывание) фронта сигнала в середине каждого передаваемого бита информации. По знаку и величине отклонения корректируют задающий таймер в приемнике. Прием сигнала при наличии помех - собственно говоря эта задача решается за счет режекции помех по длительности. Т.е. грубо говоря если длительность состояния декодируемого сигнала (лог.0 или лог.1) меньше 1/4 длительности передачи бита, это считается помехой и отбрасывается (вместо этого уровня сигнала предполагается наличие противоположного). Довольно действенный метод. И наконец - практическое решение, как выполнять декодирование манчестера с помощью таблицы: Частота выборок принимаемого сигнала берется по крайней мере в 4 (лучше в 8 или более раз) выше, чем частота передачи. На каждый принимаемый бит будет приходиться 4 (или выборок. Уровень сигнала считывается со входа и вдвигается в приемный буфер. Когда мы получили все 4( выборок, то получим во входном буфере некое 4-х (8-ми) битное число, которое будет являться индексом в таблице декодирования. Таблицу декодирования вы должны составить сами, так как вы хотите, чтобы реагировал приемник на помехи и дрожание фронта в середине бита. Из таблицы извлекается значение - какой это был принят бит 0 или 1 (или вы можете заложить значение ошибка - когда из-за помех невозможно однозначно догадаться о значении бита, например когда все выборки равны лог.0 или лог.1). Также удобно использовать этот же индекс для выборки из (другой) таблицы значения рассинхронизации. Собирая статистику на основе определенного числа битов о рассинхронизации, вы четко получите информацию о величине и знаке временной рассинхронизации между передатчиком и приемником и сможете периодически корректировать частоту выборок. Принимаемые декодированные биты вы будет складывать в байты как обычно. Только настоятельно рекомендую использовать CRC для контроля правильности принятого пакета. А то всякое может быть." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Несомненно для уверенного приема посылки нужен маркер. Вызывает сомнение, что битовая посылка определенных данных спасает. отсюда все эти микроконтроллеровские ухищрения. непонятные для начинающего пользователя. наверно имеет смысл обратиться к стандарту Интерфейс магистральный последовательный системы электронных модулей ГОСТ 26765.52 -87. принципиальное отличие - при посылке 20бит, синхросигнал (1-3 разряды) должен иметь длительность, состовляющую три промежутка времени передачи одного двоичного разряда. Тогда прием становиться простым. Ловите синхросигнал и на удвоенной частоте принимаете данные в сдвигающий регистр. Считываете четные или нечетные отсчеты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 27 мая, 2005 Опубликовано 27 мая, 2005 · Жалоба Идея то проста как мир. По любому перепаду формировать импульс обнуления счетчика. А цифровая чистка это от лукавого. Чистят линию. защищаются приемопредатчиками. module decoder (in_data, clk, clk_shift_rg, data_shift_rg); input in_data; // 1 mHz input clk; // 12 mHz output clk_shift_rg; output data_shift_rg; reg clk_shift_rg; reg [1:0] shift_data; reg [2:0] ct; wire clr; always @(posedge clk) begin shift_data <= {shift_data[0], in_data}; end assign data_shift_rg = shift_data[1]; assign clr = shift_data[0] ^ shift_data[1]; always @(posedge clk) // делитель на 6 begin if (clr == 1'b1) ct <= 3'h0; else if (ct == 3'h5) ct <= 3'h0; else ct <= ct + 1'b1; end always @(posedge clk) begin clk_shift_rg <= (ct == 3'h2); // 2 mHz end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Крюк 0 26 июля, 2005 Опубликовано 26 июля, 2005 · Жалоба у меня есть схемное решение выполненое в ALDEC, могу выслать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Крюк 0 28 июля, 2005 Опубликовано 28 июля, 2005 · Жалоба тем кто обратился с просьбой. вышлю завтра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться