MementoMori 4 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Добрый день. Хочу связать 2 микроконтроллера по радиоканалу, который так же будет использоваться для передачи голоса. Наиболее подходящий для меня вариант - использование рации. К тому же метод проверенный, реализован в baycom модеме. Отличие от него только в том, что модемом будет управлять контроллер, он же будет через FT232 связан с компьютером. Из всего что есть, нарыл 3 микросхемы: FX604 TCM3105 74HC942 Есть отзывы людей, которым доводилось пользоваться этими микросхемами? Что понадежнее будет? Скорость устроит и 300 бод, главное, чтобы демодулятор справлялся со своей задачей. Следующий вопрос - как они работают - они тупо выдают разные частоты в зависимости от нуля или единички? Ну и при демодуляции - тупо выдают ноль или единичку при соответствующих частотах? В даташите какой-то намек на скорости передачи данных. Эти микросхемы как-то рулят синхронизацией битов? Даташиты уж больно скудные... Следующий вопрос - состоится ли связь, если просто подключить TxD и RxD от USART микроконтроллера? Или же надо ручками писать протокол? Спасибо. 74HC942_1_.pdf TCM3105.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба C 300 бодами справятся очень многие микроконтроллеры без дополнительной внешней ИС. Код - Манчестер 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Из всего что есть, нарыл 3 микросхемы: FX604 TCM3105 74HC942 Следующий вопрос - как они работают - они тупо выдают разные частоты в зависимости от нуля или единички? Ну и при демодуляции - тупо выдают ноль или единичку при соответствующих частотах? В даташите какой-то намек на скорости передачи данных. Эти микросхемы как-то рулят синхронизацией битов? Даташиты уж больно скудные... Следующий вопрос - состоится ли связь, если просто подключить TxD и RxD от USART микроконтроллера? Или же надо ручками писать протокол? А вы сумеете их купить ? Микросхемы очень старые, и, как я понял, столь же редкие. У моего поставщика не оказалось ни первой, ни второй, ни третьей. Не лучше ли будет купить просто пару телефонных модемов, тех же Zyxel или IDC, настроить их на выделенку и работать через них ? Это FSK - модемы. У TI есть апп.ноуты, почитайте: slaa037 и slaa204. Ну и последнее. Возможно, вас устроит обычный DTMF ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 1 октября, 2012 Опубликовано 1 октября, 2012 (изменено) · Жалоба на ебае есть все 3 микры,. всего будет сделано максимум 10 устройств. Может есть что поновее? DTMF не устроит, медленновато. Софтовый - у нас один коллега делал софтовый, так и не получилось качественно синхронизировать биты. ТОчнее не биты, а переход от преамбулы к стартовому биту. Впрочем, если кто подскажет алгоритм анализа преамбулы, буду рад. Гугление привело только к информации общего плана. Это FSK - модемы. У TI есть апп.ноуты, почитайте: slaa037 и slaa204. У ti - примитивщина, которая будет работать только "в ваккууме". По этим аппноутам упомянутый коллега и делал, все было хорошо - по десятку импульсов на бит, программа считает чего больше нулей или единиц, либо артефактов, и выставляет соответствующий бит. Но вот стартовый бит - программа определяет его отсчитыванием десятка импульсов соответствующих единице. И не дай бог какой-то импульс окажется аретфактным - пакет бьется. Изменено 1 октября, 2012 пользователем Memento Mori Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Может есть что поновее? Например, у Silabs: http://www.silabs.com/products/modems/pages/default.aspx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба посмотрел silabs - поизучаю. Там еще и аппаратная корекция ошибок. kovigor, а вы не работали с Silabs ? Посмотрел я на структурные схемы - они для телефонной сети, предполагают использование "Line Side" микросхемы. Нужно ли это будет для рации? или хватит конденсаторов и делителей, как в baycom модеме http://www.g-cb.narod.ru/sr/baycom1.gif ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Софтовый - у нас один коллега делал софтовый, так и не получилось качественно синхронизировать биты. ТОчнее не биты, а переход от преамбулы к стартовому биту. Потому что после преамбулы (битовой синхронизации) должно следовать синхрослово (байтовая синхронизация). Это эфир, а не провода... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 1 октября, 2012 Опубликовано 1 октября, 2012 (изменено) · Жалоба Потому что после преамбулы (битовой синхронизации) должно следовать синхрослово (байтовая синхронизация). Это эфир, а не провода... Я этот коллега. Было и синхрослово. В процессе поиска ошибок сделали так, что каждый схваченный байт, независимо от того совпадает ли CRC, поймано ли синхрослово, все равно слала байты на комп. ПРи этом в протоколе ни одного битого байта в посылке так и не поймалось, кроме периодически проскакивающих битых ПЕРВЫХ байт синхрослова. Битыми оказывались только первые байты. Вывод - где-то косяк в точке перехода преамбулы с синхрослово. Преамбула - это чердование единиц и нулей, вот программа поймала это чередование, дальше что? Кок объяснить программе какой из импульсов (а их в одном бите 6-7) является первым? ЖАлею, что не наткнулся сразу на железный вариант Изменено 1 октября, 2012 пользователем zheka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Я этот коллега. Было и синхрослово. В процессе поиска ошибок сделали так, что каждый схваченный байт, независимо от того совпадает ли CRC, поймано ли синхрослово, все равно слала байты на комп. ПРи этом в протоколе ни одного битого байта в посылке так и не поймалось, кроме периодически проскакивающих битых ПЕРВЫХ байт синхрослова. Битыми оказывались только первые байты. Вывод - где-то косяк в точке перехода преамбулы с синхрослово. Преамбула - это чердование единиц и нулей, вот программа поймала это чередование, дальше что? Кок объяснить программе какой из импульсов (а их в одном бите 6-7) является первым? ЖАлею, что не наткнулся сразу на железный вариант Посмотрите как сделано в других системах с радиоканалами, например, Nanonet, ZigBee. Насколько, я помню, после синхронизации с приамбулой ищется синхронизация с синхрословом. По сути корреляционный прием для синхрослова. Синхрослово последовательность бит на базе кода с хорошими корреляционными свойствами (например, для Nanotron 64 бита). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 1 октября, 2012 Опубликовано 1 октября, 2012 · Жалоба Преамбула - это чердование единиц и нулей, вот программа поймала это чередование, дальше что? Кок объяснить программе какой из импульсов (а их в одном бите 6-7) является первым? Легко. Длина преамбулы должна быть побольше, чем тот отрезок, на котором вы ее ловите (у меня длина программируется в EEPROM). После ловли преамбулы заталкиваете все приходящее в регистр сдвига и на каждом сдвиге сравниваете содержимое регистра с эталоном. При совпадении байтовая синхронизация достигнута. Посылка при этом должна быть непрерывной по несущей и неразрывной по битовому потоку, без всяких доп. старт-битов. Сразу за синхрословом - весь битовый информационный блок фиксированной (желательно) длины. Код у меня был Манчестер-2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zheka 1 2 октября, 2012 Опубликовано 2 октября, 2012 · Жалоба После ловли преамбулы Объясните это не как человеку, а как машине. Что значит, после ловли преамбулы? Что нужно поймать - один из импульсов? все 10 импульсов преамбулы? заталкиваете все приходящее в регистр сдвига и на каждом сдвиге сравниваете содержимое регистра с эталоном. При совпадении байтовая синхронизация достигнута. Именно так и делаю. Чесслово, сам дошел. Как уже было написано - в байтах ошибки возникают крайне редко. ПОТому как в одном бите по 6-7 импульсов, кроме того анализ идет и по фронту и по спаду. А чтобы была ошибка нужно чтобы половина импульсов были корявыми. Но для того, чтобы начать прием, место перехода преамбулы в синхрослово нужно поймать с точностью до импульса. Как это сделать? Если посылать преамбулу фиксированной длины, скажем 64 импульса, а на приемнике считать их - ведь пропадет один импульс, или лишний выскочит - будет ошибка. И чем длинее преамбула, тем вероятнее ошибка. Делал все как вы писали, но этот момент так и остался камнем преткновения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 2 октября, 2012 Опубликовано 2 октября, 2012 · Жалоба Объясните это не как человеку, а как машине. Я не знаю вашего кодирования и ваших алгоритмов побитного приема. У меня, повторяю, Манчестер 2, и программный модуль приема периодически (по прерыванию) выдает один из результатов: "принят 0" или "принята 1". Далее то, что принято, вдвигается в 16-разрядный сдвиговый регистр. На время битовой синхронизации его содержимое сравнивается с 0x5555 при приходе каждого бита. После того, как результат достигнут (есть начало посылки), образец для сравнения заменяется на синхрослово, а также заводится таймаут на прием синхрослова (все в эфире может оборваться). Любой таймаут сбрасывает режим приема в ожидание битовой синхронизации. После того, как содержимое регистра станет равным синхрослову (достигнута байтовая синхронизация, сравнение идет также при приеме каждого бита), переходим к приему информационной части: тупо, без всякого анализа, в информационный регистр (у меня 64-разрядный) засовываем следующие 64 бита данных. Ну, а после приема блока данных (КС входит в эти 64 бита) снова переходим в ожидание битовой синхронизации, а пока ждем, исправляем ошибки и разбираем посылку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MementoMori 4 2 октября, 2012 Опубликовано 2 октября, 2012 · Жалоба V_G, то есть у вас подпрограмма, которая анализирует синхрослово, все время находится в режиме ожидания синхрослова, никаких преамбул, стартовых битов она не признает, правильно? Тогда следующий вопрос - сколько импульсов у вас приходит на один бит? Или у вас один импульс - один бит? Если импульсов несколько, то как определяется начало и конец бита? Для примера - передаем по 5 импульсов на бит, формируем байт 0xAA: 11111 00000 11111 00000 11111 00000 11111 00000 Программа, ожидает первый бит синхрослова - единичку . Но тут в один из импульсов закралась ошибка - нолик, и получили следуующее: 01111 00000 11111 00000 11111 00000 11111 00000 Тогда программа будет разбивать на байты следующим образом: 0 ...11110 00001 11110 00001 11110 00001 11110 0000 Понятно, что в итоге биты будут распознаны правильно, но в них уже может содержаться мусор, и этот сдвиг будет последней каплей. Или я слишком идеализированно подхожу и на самом деле битовая синхронизация так и работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sanya221 3 2 октября, 2012 Опубликовано 2 октября, 2012 · Жалоба Когда-то делал "на коленке" устройство, задача которого была передать координаты с GPS и еще несколько байт данных. Посылки в районе 10 байт раз в минуту. Использовал DTMF, готовые микросхемы-декодеры. 1 тон- начало сообщения 2 тон- начало байта 3 тон- единица 4 тон- ноль Дешево и сердито. Скорость конечно... Но для той задачи решение было вполне нормальным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 2 октября, 2012 Опубликовано 2 октября, 2012 · Жалоба Тогда следующий вопрос - сколько импульсов у вас приходит на один бит? Или у вас один импульс - один бит? Я уж думал, надоел с одним и тем же, а это одно и то же не читают, оказывается! У меня нет никаких импульсов на бит, у меня код Манчестер-2! Почитайте в википедии где-нибудь, что это за кодировка. Если вы имеете в виду многократное повторение одного бита, то для Манчестера в этом нет смысла, это код, привязывающийся к перепадам. Таким образом, у меня передается один бит на один тактовый интервал (состоящий из двух полуинтервалов), дальше гуглите! ЗЫ. Насколько я понял Ваш принцип кодирования, он абсолютно непригоден для работы в эфире, межбитовые границы предельно размыты, система не защищена от пропадания импульсов, спектр модулирующего сигнала (скорее всего) имеет большую постоянную составляющую, что неприемлемо для ЧМ эфирной посылки, принципиально отрубающей постоянную составляющую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться