singlskv 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Да согласен я. Но любой радиообмен этим чреват. Одно дело терять 1% пакетов и совсем другое 50% или еще хуже. Вы смотрели что творится на приемнике когда нет передачи ? Посмотрите, очень позновательно... Если все же решите делать прием через UART, то можете попробовать следующее: первый байт отправлять типа 0b00001111 а за ним отправлять уже значимую часть на приеме изначально UART выключен на прием и нога RX сконфигурированна как вход с подтяжкой первый байт(0b00001111) принимаете ручками(прерываниями) как просто импульс 0 длинной 5бит(4+1старт) отсчитывая время таймером если импульс такой(чуть меньшей) длинны был принят, за время пока идут 1111 включаете прием UART на RX и всю значащую последовательность принимаете UARTом. Только нужно иметь в виду что 0 на UART должен быть активным уровнем для передатчика/приемника, те возможно понадобятся инверторы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Спасибо, когда начну экспериментировать - проверю все. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба ...если импульс такой (чуть меньшей) длины был принят, за время пока идут 1111, включаете прием UART на RX и всю значащую последовательность принимаете UARTом Тоже плохо. Кто мешает помехе налететь, пока идут эти 1111 или даже когда идёт стоп-бит? Уарт зацепится за ложный старт-бит и весь байт, а с ним и весь пакет- псу под хвост. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Тоже плохо. Кто мешает помехе налететь, пока идут эти 1111 или даже когда идёт стоп-бит? Уарт зацепится за ложный старт-бит и весь байт, а с ним и весь пакет- псу под хвост.Мешает АРУ, который за время 00000 настроится на наш сигнал и уже не будет ловить маломощные помехи со всей округи на полном усилении. Конечно это не панацея и при наличии других передатчиков в зоне видимости пакеты все равно будут пропадать, но такой настроечный байт позволит уменьшить вероятность пропадания пакетов в разы. А по хорошему конечно нужно ловить каждый битик отдельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Если есть он, этот АРУ.... Я вот тут в другом сообщении уже давал ссылку http://electronix.ru/forum/index.php?showtopic=42502 на отличный проект по теме, там применены корреляционные методы выделения сигналов, даже есть модели тракта приема-передачи для матлаба, где можно промоделировать помеховую обстановку, сам все хочу попробовать этот проект, да все руки не доходят и задачи нет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Мешает АРУ, который за время 00000 настроится на наш сигнал и уже не будет ловить маломощные помехи со всей округи на полном усилении Похоже вы хотите бороться только с шумами, которые вытягивает ару, когда нет сигнала. Но в жизни всё не совсем так происходит. Ещё есть помехи, сопоставимые по уровню с вашим сигналом, они легко пролезут на выход приёмника, и никакое ару ничего с ними поделать не сможет. Выглядеть это будет так: идёт уровень логической 1, потом вдруг, раз, и врезка, и вы получаете ложный стартовый бит и так много раз. Подавитель импульсных помех, о котором я писал, легко подавляет такие врезки и вырезки, потерь пакетов будет 0,1% или меньше...Подавитель тоже не панацея, но гораздо лучше, чем передавать 0х07 в начале пакета и, тем более, манчестер под рс-232. Конечно, лучше всего сделать согласованный или корреляционный фильтр с решающим устройством, но на атмеловском мк это сложная задача, хотя и подъёмная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Похоже вы хотите бороться только с шумами, которые вытягивает ару, когда нет сигнала. Но в жизни всё не совсем так происходит. Ещё есть помехи, сопоставимые по уровню с вашим сигналом, они легко пролезут на выход приёмника, и никакое ару ничего с ними поделать не сможет. Выглядеть это будет так: идёт уровень логической 1, потом вдруг, раз, и врезка, и вы получаете ложный стартовый бит и так много раз. Не только бороться с шумами, но и еще точно определять момент включения UART на прием. Если его включение будет в районе 5%длительности бита от начала предполагаемой посылки то вероятность поймать шум становится очень маленькой. Подавитель импульсных помех, о котором я писал, легко подавляет такие врезки и вырезки, потерь пакетов будет 0,1% или меньше... Такой фильтр у меня стоит в каждой проге, например как подавитель дребезга кнопок, дискретных входов, итд Подавитель тоже не панацея, но гораздо лучше, чем передавать 0х07 в начале пакета и, тем более, манчестер под рс-232. Конечно, лучше всего сделать согласованный или корреляционный фильтр с решающим устройством, но на атмеловском мк это сложная задача, хотя и подъёмная.Посылка 0x07 это только как вариант прикручивания всего к UART, и использовать его нужно совместно с манчестером. Кстати, не забывайте что у UART тоже голосующая схема работы, так что на небольших скоростях все должно быть Ok. Ну а сам я реализовывал все чуть по другому... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Кстати, не забывайте что у UART тоже голосующая схема работы, так что на небольших скоростях все должно быть Ok. Ну а сам я реализовывал все чуть по другому... Голосующая схема останется ни при чём, если уарт захватился за ложный старт-бит. Честная реализация должна быть такой: преамбула-подходящая модуляция (бпск, кпск,...), снятие допплера-модем, фазовый пуск, свёрточное декодирование, перемежение, блочное декодирование, данные-контрсумма. Ну это, конечно, для серьёзных задач, типа 256 каналов, два скачка до исз,...и не по зубам авр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 29 января, 2008 Опубликовано 29 января, 2008 · Жалоба Голосующая схема останется ни при чём, если уарт захватился за ложный старт-бит.Возможно Вы не до конца меня поняли, ложных стартовых битов почти не будет, все время после 00000 пока идет 11111 мы вобще ничего не принимаем, приемник UART включается по таймеру только непосредственно перед началом стартового бита реальных данных. Таким образом мы уменьшаем вероятность ловли ложного стартового бита примерно в 100 раз. Мешать нам будут только 2 вида помех, помеха присосавшаяся к импульсу 00000 и изменившая ее длинну и помеха успевшая проскочить между включением приемника UART и реальным началом передачи. Нет никаких оснований не сделать эти периоды <1/100 от длительности приема одного байта например... Так что голосующая схема уарта вполне в деле... Нужно только как можно точнее определять момент возможного начала передачи. Ну и научиться реагировать на каждый переход 1->0 для того что бы не пропустить начало нашего 0x07. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 29 января, 2008 Опубликовано 29 января, 2008 (изменено) · Жалоба Вставлю и свои 5 коп. 1. Преамбула(продувка канала) обязательна, и это навевает мысли о том, что софтовый уарт сюда очень кстати. 2. Каждый, кто начинал заниматься помехоустойчивым кодированием, наверняка сталкивался с простейшим примером построения избыточного кода, корректирующего одиночные и некоторые двойные ошибки без значительных программных напрягов. Пусть нам надо передавать 9 бит данных b0..b8. Из них делается блок из 16 бит b0 b1 b2 P1 b3 b4 b5 P2 b6 b7 b8 P3 P4 P5 P6 P7 P1,P2,P3 - это xor между битами в соотвествующей строке, P4,P5,P6 - в столбце, P7 - xor по всем P1..P6. Понятное дело, сие неприемлемо для хардового уарта. Предлагаю данную схему еще более упростить. Получим b0 b1 P1 b2 b3 P2 P3 P4 P5 т.е. информационных бит аж четыре, зато кол-во корректируемых двойных ошибок посвыше, и скорость передачи аж в 12 раз выше, чем FSK :) !!! Сам не делал. Когда надо было передавать, пользовался fsk, потому что держали границы канала связи, и данных было немного. Нужно было таймер 0, 1, OCR1, ICP1. Писалось под 90s2313. Исходников уже нет. Изменено 29 января, 2008 пользователем _Pasha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться