101-ZiChip. Формирование логики работы устройства.

Автор: | 27.09.2013

В последней статье по ZiChip я обещал описать протокол общения между устройствами, но немного подумав, решил отложить этот вопрос на потом. Гораздо важнее, для начала, разобраться, как все-таки работает устройство ZiChip. Что происходит внутри? До этой статьи были лишь общие фразы, которые мало чего проясняли. Попробую более подробно рассказать, как все работает (тем более первое устройство ZiChip уже работает! и можно смело заявлять, что задуманная система работает как надо).

Начнем по порядку, рассмотрим «луковицу ZiChip» более подробно.

Основная идея функционирования устройства состоит в том, чтобы на заданные входные воздействия формировать заданные выходные реакции. Для описания механизма работы я оставил в луковице лишь одну цепочку «событие-действие». Таких цепочек может быть в устройстве несколько и Вы сами их будете формировать.

В качестве входного воздействия у нас TSOP – приемник команд от ИК-пульта.  В качества выходного — красненький 🙂 светодиод (Red LED).  TSOP подключен к ножке микроконтроллера и, соответственно, к порту ввода-вывода (в данном случае ввода) B6. Светодиод подключен к другой ножке МК и порту B4 (номера портов взяты «от фонаря» для примера).

Как Вы понимаете, кроме TSOP и светодиода, может быть любая другая периферия – кнопки, потенциометры, датчики, индикаторы, реле – все что угодно. Конечно, обработчик для каждого устройства будет свой.

Дальше происходит следующее:

— «Обработчик сигналов от TSOP» через входной порт B6 принимает посылки от ИК-пульта и по факту приема посылки изменяет содержимое точки доступа 4. Обработчик работает по прерываниям, вне зависимости от работы остальной части программы устройства.

— Дальше, элемент сценария «событие», по заданному условию (номер нажатой кнопки на пульте), активирует элемент «действие», который в свою очередь, изменяет по выбранному закону (например, увеличение) значение точки 2

— По значению точки 2 работающий в прерываниях «формирователь ШИМ-сигнала» через порт В4 управляет яркостью свечения светодиода.

Повторюсь с определениями:

Точки доступа

Точка доступа, как бы это громко не звучало, всего лишь переменная (в ZiChip размером 4 байта), но она играет ключевую роль в устройстве. Идея использования ячеек памяти для настройки периферии не нова — это те же регистры ввода-вывода в микроконтроллере или конфигурационные ячейки памяти в других протоколах, но в ZiChip главная цель точки доступа – осуществлять универсальный, стандартный механизм управления функциями устройства и выдавать результаты действия устройства способом понятным для других устройств. Для устройства нет различия, используется ли точка для ввода или вывода данных – устройство имеет один набор (массив) этих точек. Причем, часть точек привязана к периферии устройства, а часть остается свободной и может служить для формирования особых алгоритмов работы.

Обработчики, формирователи

Тут и писать особенно нечего. Обработчик, по сути, прерывание, которое вызывается по факту изменения входного значения от периферии, формирует значение для своей точки и прекращает работу. Для примера, значение для точки доступа клавиатуры будет просто номер клавиши, от датчика температуры – значение температуры в градусах и т.д.

Формирователь сигнала работает «в обратную сторону». Исходными данными для него служит точка доступа (вернее значение в ней) а выходной сигнал формируется на ножке МК (или нескольких ножках, если требуется управление более сложной периферией). Например, для ШИМ выхода значение точки доступа будет содержать значение скважности.

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

Хотя, если Вам, пользователям, захочется что-то изменить или добавить – буду прислушиваться к Вашим пожеланиям. Все изначально делалось так, чтобы впоследствии было легко менять или дополнять по надобности.

Сценарий поведения – это набор микропрограмм устройства.

Микропрограммы — это своего рода правила реакции (алгоритмы поведения) устройства на различные воздействия. Одна микропрограмма отвечает за одно воздействие и реакцию на него. Если в устройстве нужно обрабатывать несколько воздействия, то для каждого создается своя микропрограмма.  Микропрограмма условно разделяется на 2 части. Первая часть отвечает за формирование команды к выполнению второй части, которая и выполняет заданные действия. Первую часть я назвал «Событие», вторую – «Действие».

 

По сути, Сценарий поведения является листингом программы высокого уровня, записанным в EEPROM устройства, микропрограммы – операторами в нем, а зона формирования логики (фиолетовая зона в луковице) – интерпретатором  программы высокого уровня.

Сценарий, исходя из этой логики, условно может выглядеть следующим образом:

Микропрограмма1: IF (нажата кнопка пульта «1») THEN (увеличить яркость «Red LED»)

Микропрограмма2: IF (нажата кнопка пульта «2») THEN (уменьшить яркость «Red LED»)

Конец сценария.

Конструкция «IF (нажата кнопка пульта «1»)» будет являться Событием, а конструкция  «THEN (увеличить яркость «Red LED»)» — Действием.

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

Выше описанный сценарий в ZiChip Tuner выглядит следующим образом:

Пиктограммки с голубенькой стрелочкой являются Событиями, а с оранжевой – Действиями.

 

IF (нажата кнопка пульта «1») соответствует строчке —

 

THEN (увеличить яркость «Red LED») соответствует —

 

Каждый элемент сценария (как и операторы/подпрограммы в языках высокого уровня) имеет свои операнды (данные с которыми оперирует элемент). Для того чтобы эти операнды перевести из вида LED_Act (12, 46, 235, 1) — как-бы это выглядело в языках высокого уровня, в более «очеловеченный» вид, было введено поле «Настройка элемента сценария». На скриншотах ниже можно убедиться, что настройка События и Действия осуществляется более чем понятно.

Каждый элемент Сценария (и микропрограммы, соответственно) оперирует тремя видами данных (опять-таки, по аналогии с языками высокого уровня):

— константы, формирующие варианты исполнения элемента – хранятся в EEPROM;

— локальные переменные, необходимые для работы элемента – хранятся в SRAM;

— глобальные переменные, необходимые для формирования общей логики работы устройства, передачи данных от и для периферии – эту функцию выполняют точки доступа.

Вот, для примера, описание распределения памяти для элемента «Управление светодиодом»

Кроме типов элементов «Событие» и «Действие» еще будет добавлен тип «Точка». Этот тип будет реализовывать различные операции с точками, позволяя формировать более сложные логический цепочки в микропрограммах.

Для данной статьи – это все.

Для того, чтобы это система развивалась и дальше мне нужна Ваша помощь в виде обкатки устройства и отзывов, пожеланий, предложений по развитию/коррекции ZiChip. На форуме создан специальный раздел, посвященный ZiChip, где можно взять тестовые прошивки, Тюнер, написать свои отзывы. Приглашаю всех к участию в проекте!

Напоследок видео о том, как выглядит процесс настройки устройства:

Дополнительная информация есть на форуме

Скачать программы и прошивки можно на http://zichip.net/

(Visited 431 times, 1 visits today)

101-ZiChip. Формирование логики работы устройства.: 16 комментариев

  1. ssql

    Прикольно! Ждем дальнейших разработок))

  2. dalneboy

    ну вот все проэкты на сайте на тини2313 .а тут мега48 хотел попробовать да нету такого кристалла надо на рынок ехать.

  3. maintumanov

    Здравствуйте! прочитал ваши совместные статьи про ziChip, очень интересно.
    Четыре года назад начал подобный проект SignalNet, протокол которого очень похож на ваш, так же uart, кольцевая топология, слабые контроллеры, нет главных устройств.
    Но есть и отличия, я сразу отказался от ПК (в виду его ненадежности и высокого энергопотребления, экономичные стоят дорого), реализовал передачу данных в виде сигналов, как бы общая виртуальная шина данных, правда получилось два адресных пространства (сигнальное и устройства), пространство для устройств для того что бы конфигурировать сеть и настраивать устройства (как у вас галочками и связями), реализовал автоматическую настройку адресации. Физически выбрал связь между устройствами через RS422 драйверы, а соединяю витой парой (utp-8), что позволило создать кольцо внутри провода, с снаружи выглядит как шина.
    К стати долго подумав, увеличил адресные пространства до 16 бит, то есть в моем случае ни о каком ограничении устройств не идет (в пределах 16 бит естественно), конечно я понимаю что могут быть проблемы, но меньше 20 устройств это очень скромно.
    я реализовал на таких устройствах автоматику освещения (кухня (силовой блок, счетчик), коридор (датчик движения + силовой блок), туалет (силовой блок + датчик движения + вентиляторы) и сенсорный пульт из пяти кнопок) блоки связаны в одну сеть, обмениваются сообщениями, включают свет в коридоре с упреждением (отдельная тема).
    все это работает на скорости 115200 бод.

    В общем если что то интересно, пишите.
    К сожалению я свой сайт только начал, и такого описания как у вас нет.

  4. GetChiper Автор записи

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

  5. troyep

    Уважаемый Евгений! Огромное человеческое СПАСИБО Вам!!!
    благодаря Getchip.net месяц назад я запрограммировал свой первый МК : 12-ти канальный генератор эффектов и пошло поехало…это все так увлекло что вот прошел месяц и я моргнул светодиодом )))самостоятельно написав программку для attiny13 )))Спасибо Вам еще раз!!

  6. pino24

    Ссылкана скачивания тюнера битая, закинь на яндек диск будет проще всем

  7. GetChiper Автор записи

    Извините — мой косяк!
    Исправил — теперь все нормально качается!

  8. pino24

    Теперь все Ок)), а можно ли на Atmega 8 подобный девайс?? и как адоптировать прошиву??

  9. GetChiper Автор записи

    В общем-то можно и на ATmega8, но нужно довольно много переделывать. Пока не возьмусь — делаю следующее устройство.

  10. pino24

    Печалька(( придется в город ехать((

  11. pino24

    да еще , а где сама электросхема??

  12. pino24

    @GetChiper
    А ты в какой среде разработки писал?? у меня CodeVisionAVR Evaluation, а у тябя?? Не получается нормально исходник открыть по человечески.

Добавить комментарий