Altinkaya: турецкие корпуса для РЭА

Разработка Android-контроллера для управления RGB светодиодной лентой. Часть 2

Журнал РАДИОЛОЦМАН, январь 2014

Вадим Колесник, Тирасполь

Прошивка микроконтроллера и настройка Bluetooth-модуля

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Программа микроконтроллера (МК) очень простая и выполняет задачу приема команды по интерфейсу USART (универсальный синхронный/асинхронный приемопередатчик), расшифровку полученных данных и управления встроенным в микроконтроллер ШИМ.

Команда представляет собой 11-байтное сообщение вида @RxGxBxSxMx, где @ - заголовок (признак команды), x – однобайтное значение параметра, R/G/B – идентификаторы каналов ШИМ, S/M – идентификаторы режима работы (в демо-версии не используются).

Таким образом, процедура обработки команды сводится к получению и установке параметров ШИМ.

Для работы с модулем USART используется библиотека функций uart.h (библиотека Peter Fleury), которая работает по аппаратным прерываниям с использованием кольцевого буфера, что позволяет эффективно использовать ресурсы микроконтроллера. Настройка скорости работы USART 9600 бит/с в исходном коде программы реализуется автоматически с помощью встроенных в библиотеку функций.

Выполнение программы начинается с конфигурирования портов ввода/вывода и встроенной периферии микроконтроллера. Порты, используемые ШИМ и интерфейсом USART, настраиваются автоматически при настройке соответствующих аппаратных модулей. Далее отключаем аналоговый  компаратор, с целью снижения энергопотребления МК, и, перед переходом в основной цикл, устанавливаем флаг глобального прерывания и использование энергосберегающего режима работы при бездействии (Idle).

МК ATmega8 имеет два 8-разрядных таймера/счетчика (Timer/Counter0 и Timer/Counter2) и один 16-разрядный (Timer/Counter1). Чтобы получить три канала ШИМ для управления RGB светодиодами нам потребуется 16-разрядный таймер/счетчик и 8-разрядный таймер/счетчик Timer/Counter2. На первом можно реализовать два независимых канала быстрого 8-разрядного ШИМ (FastPWM), на втором - один канал быстрого 8-разрядного ШИМ. Соответствующее конфигурирование таймеров/счетчиков выполняется в функции PWM_init (). Канал ШИМ 8-разрядного таймера/счетчика используется для управления красным цветом, канал A и канал B ШИМ (на 16-разрядном счетчике) – для управления синим и зеленым цветом соответственно.

Далее МК переходит к выполнению бесконечного цикла, в котором сразу же переводится в режим пониженного энергопотребления (если буфер принятых данных пуст), при котором необходимые нам блоки (таймеры/ШИМ, USART и система прерываний) остаются активными. При приеме первого байта команды модулем USART вырабатывается прерывание, по которому микроконтроллер «просыпается», считывает первый байт из кольцевого буфера и проверяет признак команды. Далее, если принята команда, производится последовательный перенос данных (оставшиеся 10 байт) из кольцевого буфера в массив bt_command [] и вызывается функция Com_decode (), в которой из массива выделяются необходимые параметры ШИМ.

Параметры ШИМ представляют собой однобайтные значения, которые записываются в соответствующие регистры сравнения таймеров/счетчиков (OCR2, OCR1A, OCR1B). Запись в регистры осуществляется в отдельной функции PWM_control (). После этого микроконтроллер обратно уходит в режим пониженного энергопотребления до следующего приема команды.

Отмечу один важный момент, который связан с использованием режима работы микроконтроллера с пониженным энергопотреблением (Idle). В текущей версии программы МК выходит из спящего режима по сигналу прерывания USART Receive Complete (прием байта данных завершен), поэтому при каких-либо изменениях в формате команды и алгоритме ее обработки необходимо учитывать время «пробуждения» МК, размер приемного буфера и скорость передачи данных.

Не исключена возможность испльзования других энергосберегающих режимов работы (Power-save, Power-Down, Standby), но в этом случае для пробуждения МК потребуется использовать сигнал одного из внешних прерываний (INT1/INT0), который будет аппаратно генерироваться Bluetooth-модулем при инициализации соединения с ведущим устройством.

Исходный код снабжен подробными комментариями, которые упростят его понимание. И, как видно, он может быть дополнительно оптимизирован, за счет усовершенствования и объединения нескольких функций.

Конфигурация Fuse-битов МК в «калькуляторе Fuse-битов».
Рисунок 10. Конфигурация Fuse-битов МК в «калькуляторе Fuse-битов».

 Для прошивки микроконтроллера можно использовать любой внутрисхемный программатор для МК AVR. При программировании необходимо установить следующую конфигурацию Fuse-битов: младший байт E4, старший байт D9. На Рисунке 10 изображена конфигурация микроконтроллера при использовании онлайн калькулятора Fuse-битов. Для установки Fuse-битов в программаторе PonyProg руководствуйтесь Рисунком 11.

 Конфигурация Fuse-битов в программаторе PonyProg.
Рисунок 11. Конфигурация Fuse-битов в программаторе PonyProg.

Дальнейшие действия заключаются в проверке параметров Bluetooth-модуля HC-05 и, при необходимости, в его настройке. Как правило, эти модули, независимо от конструктивного исполнения, поставляются со следующими заводскими настройками: скорость обмена 9600 бит/с, 8 бит данных, 1 стоп-бит, без проверки четности. Если эти условия соблюдаются, то Bluetooth-модуль в настройке не нуждается, и его можно подключать к микроконтроллеру. Встречаются варианты модулей HC-05 с прошивкой, в которой по умолчанию установлена скорость обмена 38400 бит/с.

В сети Интернет можно найти достаточно информации по подключению и настройке Bluetooth-модулей HC-05, поэтому остановлюсь только на некоторых важных моментах.

Чтобы изменить или узнать текущую конфигурацию Bluetooth-модуля, необходимо обратиться к технической документации и подключить модуль к COM-порту персонального компьютера с соответствующим преобразователем уровней или через адаптер USB-UART.

Для перевода модуля в режим AT команд на схеме следует установить перемычку J1 (подача лог. 1 на линию PIO11 модуля). Далее, обратившись к технической документации на модуль, необходимо установить соединение с Bluetooth-модулем (открыть COM порт), и с помощью AT команд в любой терминальной программе, или используя простую утилиту [2], настроить необходимые параметры связи: скорость обмена 9600 бит/с, 8 бит данных, 1 стоп-бит, без проверки четности. В этом же режиме вы сможете задать имя Bluetooth-модуля, узнать пароль для установления связи и МАС адрес, которые понадобятся для установки беспроводной связи Android-устройства с Bluetooth-контроллером. По окончании процедуры настройки необходимо отключить перемычку J1.

Беспроводное подключение Android-устройства к Bluetooth-модулю обычно выполняется без каких-либо трудностей. Убедившись, что на Bluetooth-модуль подается питание, и перемычка J1 разомкнута, стандартными средствами ОС выполняем поиск доступных Bluetooth-устройств. Из этого списка выбираем имя нашего модуля, вводим пароль доступа и соединяемся. Если пароль введен верно, то устройству в ОС будет присвоен статус «Paired but not connected». Теперь Bluetooth-контроллер готов к совместной работе с программным приложением, а приложение будет способно подключаться к зарегистрированному в ОС Bluetooth-контроллеру.

Загрузки

  1. Исходный код (Си, AVR Studio) и прошивка микроконтроллера (.hex) - скачать
  2. Документация и утилита для настройки Bluetooth-модуля HC-05 - скачать

Содержание цикла «Разработка Android-контроллера для управления RGB светодиодной лентой»

  1. Часть 1
  2. Часть 2
  3. Часть 3
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Очень интересная статья. Несколько лет назад, реализовать такое было очень сложно. Да и модуль Bluetooth HC-05 очень даже доступен по цене. Ждем 3 часть статьи !
  • А как на счет программы для ANDROID?
  • Программа для Android в третьей, заключительной части статьи. Скоро выйдет на сайте. А если нужно быстро, то в февральском номере журнала Радиолоцман. [url]http://www.rlocman.ru/book/book.html?di=151360[/url]