Итак, что из себя представляла установка:
Блок А:
- Передатчик: HM-T433
- Приемник: HM-R433
- Антенна передатчика: Кусок провода МГТФ длинной 17см (1/4 от длины волны 433Мгц сигнала) загнутый абы как.
- Антенна приемника: та же херня.
- Расположение модулей: параллельно друг другу, на расстоянии 2см, усики антенн разбросаны в разные стороны, на манер тараканьих.
- Расположение блока: 5 этаж, на столе. У северной стены.
- Питание: 5 вольт.
- Скорость передачи: 4800 бод.
- Длина пакета данных: 10 байт.
Блок Б:
- Передатчик: HM-T433
- Приемник: HM-R433
- Антенна передатчика: Кусок провода МГТФ длинной 17см (1/4 от длины волны 433Мгц сигнала) загнутый абы как.
- Антенна приемника: та же херня.
- Расположение модулей: параллельно друг другу, на расстоянии 2см, усики антенн разбросаны в разные стороны, на манер тараканьих.
- Расположение блока: У меня в руках, на земле. С южной стороны дома (смотри схему)
- Питание: 5 вольт.
- Скорость передачи: 4800 бод.
- Длина пакета данных: 10 байт.
Условие передачи:
Блок Б дает десятибайтный пакет блоку А, тот, убедившись, что пакет принят без искажений, шлет подтверждение обратно на блок Б, те же десять байт. Блок Б, получив подтверждение зажигает зеленый диод. Передача идет с обрывом несущей. Т.е. после отправки пакета передатчик вырубается полностью.
Щелкая кнопкой передачи и фтыкая в зеленую лампочку, я начал спускаться по лестнице. К моей радости, даже когда я спустился на первый этаж зеленая лампочка бодро сигнализировала о том, что передача идет без помех, несмотря на то, что меня от другого блока отделяло как минимум 5 бетонных плит перекрытий, не считая кирпичных стен. После я вышел из подъезда и подорвался к противоположному углу дома. Примерно на 50 метрах от подъезда связь прервалась и ответа не было. Тогда я начал возвращаться обратно. Связь восстановилась лишь когда я подошел почти вплотную к своему подъезду. Поначалу мне казалось, что наверху тупо зависла софтина, оказалось все ок. В чем была причина не знаю. Возможно, стоящее в тот момент возле подъезда, такси имело у себя на борту 433МГц передатчик и насрало мне в эфир. Так как следующий отход на другой конец здания подтвердил дальность и качество приема. Это при том, что на прямой видимости, между мной и другим концом был практически весь кирпичный дом, продольно.
Алгоритм работы с двумя приемниками и двумя передатчиками:
Итак, что мы имеем:
- У нас два приемника и два передатчика.
- Приемник можно заглушить выходом Enable, так что он не будет принимать.
- А вот передатчик передает всегда когда на входе есть активность. Засыпает он спустя 70ms бездействия.
- А еще мы знаем, что два передатчика одновременно фурычить не могут несущие у них разные, а значит приемники посылают в пешее эротическое путешествие обоих. Ну или того чей сигнал слабее.
Чтобы организовать в таких мерзких условиях дуплекс приходится извращаться.
Для передачи нужно во-первых инициализировать несущую. Проблема в том, что когда несущей нет, то приемник ловит всякую муть, а входящая линия UART принимающего контроллера захлебывается от дерьма. Так что тут, в целях экономии ресурсов проца, имеет смысл выставить минимальную скорость приема 600бод, чтобы его реже дергало прерыванием от UART RX. Сразу слать байт нельзя так как у нас на входе мусор, а протокол RS232 отличается тем, что конец байта практически не отличим от середины, то если тупо взять и послать, то с вероятностью в 90% у нас произойдет смешение части байта из окружающего мусора и нахлынувшими данными из вдруг образовавшегося канала. Получится рассинхронизация и на выходе будет полная ахинея.
Так что вначале надо поднять несущую и синхронизировать протокол. Несущая у нас встает как только меняется состояние линии DATA, а вот с протоколом хитрее. Вспомним пост про UART видите, спокойное состояние UARTa высокий уровень. Так что после подъема несущей нужно выставить DATA в High, дольше чем на один байт по текущей скорости протокола, но не дольше чем на 70ms иначе у нас передатчик опять заснет. При этом на выходе DATA приемника тоже выставится High и UART, спокойно прожевав очередную порцию дерьма из эфира, успокоится и приготовится к приему нормального корма. Дальше можно слать данные.
Чтобы не заморачиваться с дрыганьем ножкой и вычислением задержек ,можно просто послать раза три число 255 это фактически сплошной высокий уровень, с небольшим провалом в виде старт бита. Но на одном из байтов таки произойдет синхронизация и дальше можно слать данные. И повышать скорость передачи (помните я чуть выше говорил про понижение до минимума), после взаимной договоренности сторон.
На прием тоже есть пара хитростей. Сразу же после передачи нам нужно дождаться А) Когда байт таки отправится до конца Б) когда наш собственный передатчик заснет от бездействия. Т.е. это 70ms + время на передачу байта. Чтобы не словить сигнал от своего же передатчика. Как только наш передатчик отвалится можно врубать приемник и начинать ждать несущей от вражеской станции. Отличить полезный сигнал от дерьма очень просто достаточно за начало передачи взять 10 одинаковых байт. Как только пришло 10 одинаковых байт опа, есть коннект. Вероятность появления 10 одинаковых байт в мусоре эфира микроскопическая. Особенно если это байты численно близкие к нулю. (в среднем, шум, по значениям, колеблется от 50 до 255, крайне редко проваливаясь ниже 20)
Организация сети:
А если нам нужно не два, а больше приемо передатчиков? Как быть? А тут рулит эстафета aka Token Ring когда передатчик по очереди передает служебный байт-эстафетную палочку. Получив этот пакет передатчик имеет право вещать. Если же ему вещать нечего, то он отсылает это право другому и так по кругу. Разумеется делается это все программно.
Приколы с контроллером:
При отладке этого девайса у меня сдохли три (!!!) ATTiny2313. В первой убился порт PB4 там висела кнопка и она стала самопроизвольно срабатывать. Замеряю напряжение подтяжки (внутренней) 0.5 вольта вместо положенных 4.5. Вот засада :/ Заменил (точнее перепаял, т.к. была в SOIC фен рулит! 🙂 ). Это к вопросу о внешней подтяжке резисторами. Внешняя подтяжка рулит, что бы там не бубнили любители минимализма на плате! Зажал я пару резисторов и, в итоге, просрал три контроллера, а так, может быть, даже и не заметил бы пробоя ноги.
Потом опять сдохла ножка PB4, попутно унеся в могилу еще и ногу RXD. Да что за засада??? Неужели статика? Сколько десятков ATTiny2313 пустил в оборот ни одна от статики не сдохла, а тут уже вторая. Что то тут нечисто. Ладно, хрен с ней, у меня еще в палке этих ATTiny2313 штук 70 лежит. Перепаял. Фен воистину рулит!!!
Когда на третьей микросхеме сдохла нога PB4 я стал искать где же собака порылась Статика не статика это как авиабомба дважды в одну и ту же воронку не падает. Схемотехника? Да не, откуда там пробои пассивка одна вокруг И тут я вспомнил когда пробивало ногу когда я антенну передатчика сворачивал в этакое колечко вокруг платы и закрывал в коробочку, а после жал на передачу Гляжу точка запайки антенны передатчика в аккурат над ногой процессора, а потом антенна идет с другой стороны платы вдоль дорожки от этой злосчастной ноги. Дорожка длинная, сантиметра три-четыре. Вот сижу и чешу репу неужели наводка с антенны модуля столь мощная была, что пробивала нафиг транзистор в МК? На всякий случай между антенной и платой проложил кусок фольгированного текстолита и заземлил его на массу. Выглядит как броня, зато теперь ножки не дохнут. От так!
З.Ы.
На этом тему модулей HopeRF HM-R433/HM-T433 считаю закрытой.
Разве что библиотечку кода под обработку этого барахла потом предоставлю, когда отлажу и вычищу все баги. Вопросы в комменты.
Оцените статью!