Штефан Виталий » 26 мар 2010, 10:47
UART не подходит ну только разве что для очень комфортных условий. Обратите внимание на описание процесса синхронизации UART в разделе “Asynchronous Clock Recovery” стр 186 документа ATmega48/88/168 (в DS на 128ю тоже самое). Восстановление несущей происходит по спаду стартового бита, потом делается проверка в 3 отчетах 8,9,10 или 4, 5, 6. При этом дрожание фазы несущей из-за шумов эфира соединяется с ошибкой в 1/16 или 1/8 тактовой частоты. Проверка в 3х отсчетах – весьма слабый механизм отбраковки ошибок, CRC сильней. А зачем нужен слабый алгоритм если есть сильный? Нужно использовать статистические методы восстановления несущей. Например, для NRZ кода, программируем таймер, так чтобы период счета от 0 до max равнялся периоду 1го бита принимаемого сигнала. Сигнал от приемника подаем на компаратор, и всякий раз, когда есть перепад с 1 на 0 или 0 на 1 проверяем накопленное таймером значение, после 256 перепадов входного сигнала вычисляем среднее арифметическое значение того, что накапливал таймер. Потом двигаем таймер на величину усредненной ошибки. После первых 256 перепадов ставим флажок, что фаза несущей захвачена, можно принимать и обрабатывать данные. Подсчет ошибки и коррекция фазы таймера происходит и после первых 256 бит данных, те всегда.
В интервале 1/2T таймера ЕДИНОЖДЫ проверяем состояние бита, а наличие ошибки проверяем уже на более высоком уровне.
Главное – радиосигналы (в смысле сигналы на выходе качественного приемника) – спектрально ограниченны, а это значит что вероятность того, что число переключений компаратора в интервале периода 1го бита будет более 2х почти 0, даже если на входе приемника ничего кроме собственных шумов. Те наиболее вероятное искажение в радиоэфире – это уход реальных фронтов принятого сигнала (после компаратора) , от границ каждого бита. Алгоритм должен быть устойчив при уходе фронтов вплоть до +-1/2T.
Все о чем я писал выше называю битовой синхронизацией. Вопросы кадровой синхронизации и контроля ошибок я пока еще не обдумывал.
У меня есть вопрос, а как программно восстанавливается несущая (проводиться битовая синхронизация) на манчестере? Этот метод проще или сложней, эффективней предложенного мной метода?