Недавно я показывал свежеспаянные устройства:
Теперь я хочу рассказать о программной части этой железки.
Весь функционал реализован в виде прошивки для Atmel ATmega168(хотя это мог быть и ATmega8/16/88/328 - вопрос только в достаточном размере Flash).
Весь код реализован на ассемблере, в качестве основы использовалась открытая операционная система реального времени core5277 и закрытая прослойка для моей линейки устройств.
Операционную систему вы можете посмотреть и скачать здесь core5277.
Закрытая часть включает в себя:
- бутлоадер с возможностью расшифровки и записи во FLash зашифрованной прошивки передаваемой по UART
- собственный протокол в основе которого лежит modbus, но с существенными доработками
- функционал ведения истории событий
- базовые, общие функции, для всех устройств типа перезагрузки, сброса настроек, полного сброса настроек, предоставление общей информации, чтение и запись настроек(в том числе и с участием EEPROM) и многое, многое другое
- управление несколькими реле, с выдержкой пауз, с учетом состояний и параметров системы.
- функционал настроек прописываемых в EEPROM- дефолтные значения, загрузка, запись и прочее
- механизм триггеров - независимое управление устройством на базе локальных показаний
Обычно, когда я начинаю проект прошивки нового устройства, я просто копирую два-три десятка строк ассемблер кода шаблонного файла main.asm. И это уже 90% всего кода прошивки. Далее добавляю нужные драйвера и описываю необходимые задачи.
Что-же умеет мое простейшее двухканальное реле:
- меняет состояние реле по событиям RS485(UART), по нажатию кнопок непосредственно на устройстве, по данным датчиков(напр. дополнительная кнопка или датчик температуры и/или влажности) или времени.
- умеет ограничивать варианты управления, например в режиме ручного управления сменить состояние реле можно только нажав на кнопку непосредственно на устройстве либо по триггеру(например, если температура превысила порог)
- умеет незамедлительно сообщать о своем состоянии мастеру, или сообщает историю событий при первой же возможности, если мастер был не доступен.
- умеет слушать как кнопки без фиксации, так и кнопки с фиксацией(типа обычного выключателя), а еще умеет режим сенсора - это когда достаточно просто поднести палец или руку не касаясь элементов управления. А еще умеет объединять кнопку со светодиодом, где на двух проводах у вас параллельно подключена и кнопа и светодиод.
- имеет расширенный порт, на который можно подключить несколько различных датчиков
- имеет возможность обновления, настройки, перезагрузки, управления, сбора показаний, сообщений и прочего по шине RS485
- имеет уникальный идентификатор
- поддерживает все команды на базе адреса шины и основные команды на базе уникального идентификатора
- поддерживает сканирование шины(автоматический поиск устройств на шине)
В общем умеет все, что только может потребоваться, хотя что-то будет вынесено в разные прошивки(это касается расширенного порта, где может быть большая поддержка различных датчиков) или объединены в одну, но на базе ATmega328.