Найти тему
13 подписчиков

Мое устройство: реле 250В 2А x2

Недавно я показывал свежеспаянные устройства:

5277 relay 250v 2a x2
5277 relay 250v 2a x2

Теперь я хочу рассказать о программной части этой железки.

Весь функционал реализован в виде прошивки для Atmel ATmega168(хотя это мог быть и ATmega8/16/88/328 - вопрос только в достаточном размере Flash).

Весь код реализован на ассемблере, в качестве основы использовалась открытая операционная система реального времени core5277 и закрытая прослойка для моей линейки устройств.

Операционную систему вы можете посмотреть и скачать здесь core5277.

Закрытая часть включает в себя:

- бутлоадер с возможностью расшифровки и записи во FLash зашифрованной прошивки передаваемой по UART

- собственный протокол в основе которого лежит modbus, но с существенными доработками

- функционал ведения истории событий

- базовые, общие функции, для всех устройств типа перезагрузки, сброса настроек, полного сброса настроек, предоставление общей информации, чтение и запись настроек(в том числе и с участием EEPROM) и многое, многое другое

- управление несколькими реле, с выдержкой пауз, с учетом состояний и параметров системы.

- функционал настроек прописываемых в EEPROM- дефолтные значения, загрузка, запись и прочее

- механизм триггеров - независимое управление устройством на базе локальных показаний

Обычно, когда я начинаю проект прошивки нового устройства, я просто копирую два-три десятка строк ассемблер кода шаблонного файла main.asm. И это уже 90% всего кода прошивки. Далее добавляю нужные драйвера и описываю необходимые задачи.

Что-же умеет мое простейшее двухканальное реле:

- меняет состояние реле по событиям RS485(UART), по нажатию кнопок непосредственно на устройстве, по данным датчиков(напр. дополнительная кнопка или датчик температуры и/или влажности) или времени.

- умеет ограничивать варианты управления, например в режиме ручного управления сменить состояние реле можно только нажав на кнопку непосредственно на устройстве либо по триггеру(например, если температура превысила порог)

- умеет незамедлительно сообщать о своем состоянии мастеру, или сообщает историю событий при первой же возможности, если мастер был не доступен.

- умеет слушать как кнопки без фиксации, так и кнопки с фиксацией(типа обычного выключателя), а еще умеет режим сенсора - это когда достаточно просто поднести палец или руку не касаясь элементов управления. А еще умеет объединять кнопку со светодиодом, где на двух проводах у вас параллельно подключена и кнопа и светодиод.

- имеет расширенный порт, на который можно подключить несколько различных датчиков

- имеет возможность обновления, настройки, перезагрузки, управления, сбора показаний, сообщений и прочего по шине RS485

- имеет уникальный идентификатор

- поддерживает все команды на базе адреса шины и основные команды на базе уникального идентификатора

- поддерживает сканирование шины(автоматический поиск устройств на шине)

В общем умеет все, что только может потребоваться, хотя что-то будет вынесено в разные прошивки(это касается расширенного порта, где может быть большая поддержка различных датчиков) или объединены в одну, но на базе ATmega328.