Взял себе на диплом тему связанную с этим трансивером. В этой теме буду вылаживать все свои наработки по нему. Вот первая партия. Перевод даташита в котором описываются регистры. В переводе могут быть(и на верняка иметься) ошибки и неточности. Кто найдет отписывайтесь я исправлю.
Давненько меня тут не было))) Это время не прошло даром. Даташит был переведен с массой ошибок. Скоро выложу исправленную версию. Трансивер этот просто замечателен. Но он фактически не документирован + по сети ходят кривые исходные коды( код китайца самый кривой). Все это сильно затрудняет его изучение. Полностью освоить трансивер мне не удалось(( В документации слишком много пробелов. 1) Порядок инициализации регистров имеет значение. Верный порядок описан в даташите. 2) На борту трансивера имеется датчик температуры, 4-х битный. 1бит= 4 градуса цельсия. Некоторые настройки трансивера зависят от температуры. Зависимость установить не удалось. 3) Читать/записывать регистры слишком быстро нельзя. Этим грешат почти все исходники. 4) Перед инициализацией ВСЕГДА нужно сбрасывать трансивер. Долго объянять почему. Как нить напишу по нему доку. 5) Во время чтения/записи в регистры всегда отключайте прерывания. 6) Флаг FIFO самый подлый, никогда не используйте его в бесконечном цикле. В режиме RX- выставляется в 1 только если буфер заполнен полностью (64 байта) !!! Т.е. при передачи коротких пакетов никогда не выставится. Перед установкой флага PKT сбрасывается. Поэтому его легко прозевать. В режиме TX- выставляется в 1 когда буфер пуст. Перед установкой флага PKT сбрасывается. Имеет смысл использовать это если следом не передается еще один пакет. НО это бессмысленно. 7) Буфер ничем очистить нельзя, его можно только перезаписать. Многие пытаются его "очистить" с помощью регистра 82. Это большая глупость. Так. как буфер не очищается а сбрасывается только смещение на голову буфера. От этого трансиввер начинает работать криво. Почти все сбрасывают точку смещение не правильно. Ее можно сбросить только находясь в режимах TX/RX . У каждого режима свое смещение. Т.к. буфер не сбрасывается многие его считываю повторно. Последствия очевидны. Размер буфера 64 байта!! 8) Режим TX. Для того чтобы передать пакет нужно СНАЧАЛА перейти в режим TX, после заполнить буфер. Максимальный размер пакета 255-1 байта. Фактически все сначала запихивают в 64 байтный буфер 254 байта данных и начинают процесс передачи. Некоторые утверждаю, что это работает Передача пакетов размер которых превышает 64 байта весьма тяжелая задача.Т.к. на принимающей стороне нужно сразу после выставления флага FIFO нужно тут же начать считывать данные из буфера. Если данные считывать слишком быстро, то часть будет потеряна. Если слишком медленно, то часть данных будет тоже потеряна. Скорость считывания данных в основном зависит от типа кодирования данных и FEC. Намного проще передавать пакеты длиной 64 байта и не трахать себе мозг. 9) Режимы переключаются автоматически. TX->Idle после окончания передачи , RX-> Idle после успешного приема пакета. Признак успешного приема пакета: - смена режима на idle и выставление флага PKT. 10) Флаг PKT в режиме TX выставляется только после передачи пакета полностью. В режиме RX только после приема пакета. В бесконечный цикл проверку пихать не стоит. 11) Можно получить значение RSSI по которому возможно определить примерное расстояние до передатчика. Зависимость значения от расстояния еще не изучал. 12) Трансивер автоматически умеет составлять и проверять CRC. CRC=1 если произошла ошибка. Если используется FEC то CRC=1 сообщает о том, что возможно ошибка не была исправлена. Азиаты умеют наворотить.) Т.е. программною проверку CRC никто не отменял. 13) Имеется аппаратный скрамблер. Но он 7ми битный. 14) Самое интересное это аппаратная поддержка FEC. По дефолту он выключен. Поэтому не удивительно, что многие не могут передать сигнал на большое расстояние 15) Еще очень полезная функция - это определение типа кодирования сигнала. Кодировка "8/10 line code" во время испытаний показала наилучшие результаты. 16) С каналами все туманно в теории их 81, в реальности намного больше. На некоторых "не документированных каналах" данные передаются намного лучше. Пока что все. Провел бесчисленное количество опытов. Описал лишь вершину айсберга. К зиме планирую написать нормальную доку. Та же разрабатываю протокол для обмена данными между двумя трансивверами. Судя по доке скорость по SPI не должна превышать 3 МГц. Но у меня все замечательно работает на 4 МГц. Испытания на дальность еще не проводил. Также вылаживаю немного сыроватые исходники. PS: На сайте производителя пишут, что примерная частота работы 2400-2482. По умолчанию выбрана 2402+76. Еще один важный момент. После отправки пакета буфер трансивера не очищается. В нем находится только что отправленный пакет. Если после этого перейти в режим RX и ошибочно определить факт получения пакета, то это будет выглядеть как будто трансивер принял пакет который только что оотправил. Также важно не забывать очистить буфер пакета в микроконтроллере. Это особенно важно когда передаются пакеты разной длинны. TR24A EM198810
Сегодня поменял блок питания на более дорогой. И был сильно удивлен. На вероятность ошибки очень сильно влияет качество питания трансивера. На качественном питании даже с отключенным FEC сигнал передается значительно лучше. ЗЫ: Открытие номер два. Подключенный программатор, переведенный в Z-состояние уменьшает вероятность ошибочно переданных данных оп SPI. В то время как пустующий разьем сильно шумит. Проверял так. Из записал в буффер трансивера данные и начал их постоянно считывать. В итоге выяснил, что в некоторых ошибочно переданных/принятых пакетах виновен не трансиввер а шум в SPI.
Код для работы с трансиввером TR24A разработан и отлажен. Если найдете ошибки то сообщайте. Испытание на скорость. Условия: - односторонний пинг; - расстояние 5 м; - максимальный разгон трансиввера; - размер пакета 64 байта; - учитывались только полезные данные; - при условии, что за 1 сек не произошло ни одной ошибки; Скорость составила примерно 837 Кбит/сек. Условия: - односторонний пинг; - расстояние 5 м; - достоверность доставки максимальная; - размер пакета 64 байта; - учитывались только полезные данные; - при условии, что за 1 сек не произошло ни одной ошибки; Скорость составила примерно 290...784 Кбит/сек. Скорость скачет сильно зато не смог зафиксировать ни одной ошибки на протяжении часа. Впереди еще испытания на дальность PS: Размер пакета, канал, и т.п. настройки можно менять динамически. ЗЗЫ: Значительно усложнил алгоритм определения скорости. На максимальном разгоне: мин: 190 Кбит/с сред: 412 Кбит/с макс: 508 Кбит/с С максимальной достоверностью: мин: 182 Кбит/с сред: 186 Кбит/с макс: 187 Кбит/с Скорей всего во время первого испытания на скорость ошибся. * Разработка протокола приостановленна. После двух лет работы с интернет магазином * www.kosmodrom.com.ua (г.Харьков) был обманут и неполучил от них часть элементов. * Эти элементы необходимы для разработки устройства ради которого пишется протокол. * Всем кто сможет помочь буду презнателен. 19.08.2010 E-mail:a9d@mail.ru
Класс для определения скорости в Кбайт/с. ЗЫ: НАКОНЕЦ то дошло зачем сбрасывать смещение голову чтения. Перед считывание пакета из буфера трансивера можно проверить аппаратное CRC. Если пакета битый, то он нафиг не нужен. Но есть ограничения: - это можно сделать только после выставления флага PKT. Размер пакета не должен превышать 64 байта. - если используется FEC, то все же имеет смысл считать его из буфера. После принятия синхронизирующего слова голова сбрасывается автоматически. Зачем ручной сброс... загадка.
Новая версия кода. Функция чтения пакета теперь проверяет аппаратное CRC до считывания пакета из буфера, дало прирост скорости в 2 Кбайта/сек.
Провел новые опыты с напряжением. Трансиввер очень чувствителен к уровню напряжения. В этом вопросе нужно четко соблюдать даташит. Если подать питание 4 В, то трансивер работать будет и не сгорит. Но работать будет не верно. На напряжении 3.4 В - трансивер инициализируеться не верно. При передаче наблюдается большое количество битых пакетов. Хотя некоторые(из 10-ти штук 1) трансиверы инициализируются верно. На напряжении 3.3 В - из 10-ти трансиверов 2-ва инициализзировалось не верно. На напряжении 3.26В-3.2В -все трансиверы инициализировались и работали верно.
А по какой цене вы эти трансиверы покупали? Меня самого интересуют они т.к. использовал в своих предыдущих проектах готовые модули RFM12B, но отдавать 7-8$ за штуку как-то жаба давит. Вот подувымаю на эти перейти. Кстати на космодроме видел TR24А 20 грн, а TR24Р уже 52. Я так понимаю вы с префиксом "А" используете?
Между ними на программном уровне нет разници. Просто в TR24Р нужно ставить внешнюю антену. Я использую TR24A. Закупал по цене меньше 25 грн. за штуку. На космодроме цены указаны примерные. Практически всегда занижены. Реальная цена на 10-20% выше чем указана. Да и после последней закупки они меня кинули на 175 грн.
А как кинули? Я у них несколько раз заказывал компоненты. Инцидент один все-таки произошел. Заказал, проплатил в тот же день. Срочно мне надо были микросхемы. А они - 0. Звоню через неделю: о, где-то, ваш счет потерялся... но через три дня все-таки получил посылку.
Теперь о трансиверах)) То вы производили замеры дальности устойчивой работы двух устройств? И как вы насчет брезгливости по питанию tr24 выяснили? Вы несколько микросхем брали для проверки? Может бракованная попалась.
Кидок. Тут я с самого начала протупил и не заметил всех симптомов. Все таки с ними два года работал. 1)Раньше я деньги платил на расчетный счет. Получал квитанцию из банка где было указано за, что плачу и моя фамилия. Но теперь оплата выглядела как пополнение счета на кредитке. В квитанции не было написано от кого и за что. Доказать что-либо в таком случае нельзя. Ведь происходит пополнение счета а не плата за товар. Также если им не сообщить об оплате они даже не узнают от кого пришли деньги. Поэтому звонить нужно обязательно. Раньше такого не было. 2)Когда заметил недостачу. Тут же им позвонил. Они обещали разобраться и перезвонить. Но названивать пришлось мне. Они от меня тупо отмораживались. Трансиверы. О том как производились замеры писал выше. По подробней написано в доке "TR24A ISM Band Transceiver". С помощью подстроечного резистора менял напряжение и смотрел как работает. Результаты удивили. Величина 3.30 прям магическая. Немного превышаешь планку и начинаются проблемы. У меня их десять штук. Закупка производилась в разное время, хотя возможно они из одной партии. Если соблюдать даташит все работают.
А какой минимальный обьем проги (в килословах) у вас получался после компилирования? Мне что-то с трудом верится что она влезет в мк с 1кслов памяти, а это уже плохо
* Эти элементы необходимы для разработки устройства ради которого пишется протокол. какие вам нужны элементы? может я чем-нибудь смогу помочь))
В 1 Кб вместить можно минимум и будет работать. Но функционал будет мизерный. Скомпилированная версия tr24a.h занимает около 2 Кб. Если вкратце я ваяю робота. Для управления им не хватает модуля компаса HDPM01(на него меня киданули). Без него печатку разводить стремно. Еще не знаю как с ним работать. ЗЫ: Функция GetTemp работает не совсем верно. Я так и не понял когда происходит обновление температуры.