Серия микроконтроллеров Texas Instruments CC430 — это MSP430 со встроенным радио модулем. В отечественных интернет-магазинах можно купить модули TE-CC430F51-433, содержащие на крошечной плате такой микроконтроллер с кварцем и кучкой других полезных деталей, по вполне демократичной цене. В этой статье я расскажу о построении на базе таких модулей фотофиниша — устройства весьма полезного для любителей спортивных состязаний. На нем естественно потенциальная сфера применения не ограничивается. Наличие 12 битного АЦП, аппаратного умножителя и другой периферии открывает широкий простор для применений, требующих передачи данных на расстояние до нескольких сотен метров.
Фотофинишу нужен радиоканал потому, что он состоит из двух пространственно разнесенных частей — старта и финиша. Старт знает время, когда участник стартовал, а финиш определяет момент, когда он финишировал. Для этого на финише организуется фото-барьер — луч инфракрасного света, который прерывается финиширующим участником. Рассмотрим эти два устройства по порядку.
Стартовый модуль
Нам понадобятся батарея, выключатель питания PW, стартовая кнопка START, кнопка выбора режима / тестирования канала MODE / PING, пищалка для подачи сигнала о финишировании и семисегментный индикатор на 4 цифры для индикации времени. Все это подключается прямо к модулю. В качестве антенны можно использовать кусок провода длиной 20-25 см, а можно взять готовую. Антенна также подключается прямо к модулю — все необходимые согласующие цепи на нем уже распаяны.
Модуль финиша
Для светового барьера мы воспользуемся готовым ИК приемником аналогичным тем, что применяются в телевизорах. Для защиты от дневного света его полезно установить в достаточно длинной зачерненной трубке. В качестве источника возьмем один или несколько ИК светодиодов. Один можно смело подключать прямо к выводам модуля, а для нескольких придется сделать дополнительный транзисторный ключ (на схеме не показан). Чтобы не разносить источник света с приемником, их монтируют рядом в одном направлении, а по другую сторону от трассы, где финишируют участники, ставят отражатель (катафот). Кроме светового барьера на финише присутствуют те же элементы, что и на старте — батарея, выключатель питания PW, кнопка тестирования канала PING, пищалка и семисегментный индикатор. Для настройки светового барьера служат выключатель режима калибровки CALIB и светодиод CALIB LED, сигнализирующий о его включении.
Радиоканал
Радиомодуль (или трансивер) представлен набором регистров, куда необходимо прописать изрядное количество настроек. Чтобы пользователь не мучился чтением документации на предмет их изобретения, производитель бесплатно предоставляет специальную программу SmartRF Studio. Еще одна сложность заключается в том, что регистры трансивера не находятся в адресном пространстве микроконтроллера. Доступ к ним осуществляется через еще один набор регистров, которые называются радио-интерфейсом RF1A. Корень этой странной архитектуры в том, что трансивер существует и в виде совершенно отдельной от процессора микросхемы CC1101, поэтому то его регистры и никак не связаны с процессором.
Поскольку нам не требуется передавать большие объемы данных, нас устроит минимальная скорость передачи битов, что даст нам лучшую чувствительность и помехозащищенность. Чтение документации позволило установить скорость передачи около 200 бод, что даже меньше, чем минимальная скорость, которую позволяет установить SmartRF Studio. В результате модули уверенно связываются между собой на расстоянии 300-400 метров при использовании куска провода в качестве антенны. Трансивер позволяет использовать любой из 256 каналов. Первый канал имеет частоту 400MHz, соседние каналы отстоят друг от друга на 200kHz.
Как это работает
Финиш включается первым. И старт и финиш сразу после включения показывают напряжение питания батареи. Сначала настраивают световой барьер. Для этого замыкают переключатель CALIB. В таком положении отсутствие сигнала в ИК приемнике сигнализируется писком. По завершении настройки CALIB выключают. После этого микроконтроллер все равно проверяет наличие сигнала в приемнике, но делает это реже, экономя батарею. Обнаружив пропадание сигнала, он посылает сообщение старту, тот показывает на дисплее noIr.
Если после включения питания на старте нажать кнопку MODE / PING, он начинает перебирать каналы, показывая на дисплее их номера, пока пользователь не выберет канал для связи с финишем. При этом финишу посылается сообщение с номером канала и идентификатором сессии — случайным числом, которое будет пересылаться во всех последующих сообщениях. Для передачи этого первого сообщения используется выделенный служебный канал с номером 0x40. Получив ответ от финиша, старт запоминает время, затраченное на передачу сообщения.
Если нажать на кнопку старт, финишу посылается сообщение, содержащее время, с которого нужно начинать отсчет — это время передачи сообщения, которое старт запомнил на предыдущем этапе. Получив его, финиш запускает счет времени и включает ИК излучатель. На ИК светодиод подаются последовательности из 16 импульсов с несущей частотой 38kHz. Пересечение светового барьера фиксируется если выходной сигнал приемника отсутствует в момент окончания последнего импульса последовательности. В этот момент старту посылается сообщение, содержащее текущее время, которое в дальнейшем старт и финиш показывают на своих дисплеях.
Если старт и финиш не заняты измерением времени участника, нажатие кнопки PING на любом из них приводит к посылке тестового сообщения. По получении ответа на дисплее показывается уровень принимаемого сигнала (RSSI) — число в логарифмической шкале. Экспериментально выяснено, что значения ниже 0x30 приводят к быстрой потере связи.
Если после установления связи стартовый модуль был выключен, его можно включить с восстановлением связи в том же канале. Для этого нужно удерживать кнопку MODE / PING при включении до тех пор, пока не появится сообщение reSu. При этом старт посылает финишу сообщение в канале, который он запомнил, в результате финиш рестартует, а старт заново устанавливает соединение, используя старый номер канала. Если при включении удерживать кнопку MODE / PING дольше — до появления сообщения teSt, старт и финиш начинают процедуру самотестирования, в ходе которой они устанавливают соединение во всех каналах по очереди.
Исходный код
git clone git://git.code.sf.net/p/wtb430/code wtb430
Для компиляции использовался IAR. В качестве загрузчика я использовал плату MSP-EXP430G2 LaunchPad, соединяя ее проводами с выводами TEST, RST модуля.
Автор: oleg_v