Перейти к содержанию
    

Manchester decoder

Я пишу на AHDL ,

что значит декодировщик Манчестера?

Это нечто вроде приемника,

кто имеет пример , простейший, пусть на 8 бит на AHDL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пишу на AHDL ,

что значит  декодировщик Манчестера?

Это нечто вроде приемника,

кто имеет пример , простейший, пусть на 8 бит на AHDL?

 

Манчестерский код - кодирование битов перепадами сигналов: 1 кодируется как переход сигнала с низкого уровня на высокий, 0 - с высокого на низкий. Соответственно декодер Манчестера будет преобразовывать такое представление в код NRZ (или по простому - в биты). Достоинство кода - хорошие самосинхронизирующие свойства.

 

Кода готового у меня нет, но задача не самая сложная, можно и самому посидеть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пишу на AHDL ,

что значит  декодировщик Манчестера?

Это нечто вроде приемника,

кто имеет пример , простейший, пусть на 8 бит на AHDL?

 

Состоит из двух тригеров и счётчика. Много где описан.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот что мне в своё время удалось нарыть в инете. конечно относиться к микроконтроллерам, но адаптировать не сложно.

 

"- было подробно в разделе 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 для контроля правильности принятого пакета.

А то всякое может быть."

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Несомненно для уверенного приема посылки нужен маркер. Вызывает сомнение, что битовая посылка определенных данных спасает. отсюда все эти микроконтроллеровские ухищрения. непонятные для начинающего пользователя. наверно имеет смысл обратиться к стандарту Интерфейс магистральный последовательный системы электронных модулей ГОСТ 26765.52 -87. принципиальное отличие - при посылке 20бит, синхросигнал (1-3 разряды) должен иметь длительность, состовляющую три промежутка времени передачи одного двоичного разряда. Тогда прием становиться простым. Ловите синхросигнал и на удвоенной частоте принимаете данные в сдвигающий регистр. Считываете четные или нечетные отсчеты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея то проста как мир. По любому перепаду формировать импульс обнуления счетчика.

А цифровая чистка это от лукавого. Чистят линию. защищаются приемопредатчиками.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...