Квашин Александр
г. Москва
Обновление программного обеспечения для набора NM8036 «4-х канальный микропроцессорный таймер, термостат, часы» и для блока BM8036 «8-ми канальный микропроцессорный таймер, термостат, часы» (версия 1.3a и более ранние версии).
Приводится описание обновлённой версии программного обеспечивающего существенное расширение функциональных возможностей устройства.
Бесплатно скачав эту версию, пользователь сможет улучшить технические характеристики устройства и более успешно применить его в системе «Умный дом» начального. Предлагаемое для сборки из набора NM8036 (или в виде блока BM8036) устройство может быть использовано в качестве центральной части системы управления отоплением, охлаждением, вентиляцией, для автоматического полива огорода, для включения-выключения различных электробытовых приборов по программе пользователя.
Устройство также найдёт применение в зоологических кружках, у аквариумистов.
Количество шагов программирования 32.
Обновлена прошивка контроллера и ПО для ПК.
Версия 1.3a
Изменения функций АЦП
В данной версии ПО АЦП максимально облагорожен. Теперь АЦП можно «откалибровать» на любые значения отображаемых величин в пределах от -3.34Е+38 до 3.34Е+38 и малых до степеней E-38! Это значит, что достаточно ввести пределы соответствия цифрового значения 0 (минимальное значение АЦП) к определенному физически смысловому числу и 1023 (максимальное значение АЦП) так же к определенному числу, то при измерении можно будет наблюдать соответствующую величину, рассчитываемую по линейному закону. Обычно, в документации на датчик можно найти параметры линейной зависимости напряжения на выходе датчика от измеряемого параметра (давление, влажность, температура и т. д.). Из этого соотношения следует выявить зависимость физической величины от выходного напряжения датчика и, подставив в получившуюся формулу 0В и 5В, получим требуемые калибровочные значения. Также можно задать точность вывода информации от 0 до 5 знаков после запятой. Если число имеет значащие разряды далее чем 5 знаков после запятой, то отображение будет производиться в экспоненциальной форме. Так же, если число будет более 7 целочисленных знаков, то оно так же будет отображаться в экспоненциальном виде. Кроме того, есть возможность задать так называемый суффикс. Это символ, который будет всегда отображаться в конце числа при выводе пересчитанной величины. Например, для давления это будет 'P' , для влажности '%' и т. д. Допускается установить только 1 символ суффикса.
Пример применения АЦП ¹1:
Подключим популярный датчик влажности серии HIH-3610 или HIH4000
Рис. 1а. Внешний вид.
Рис. 1б. Внешний вид.
Рис.2. Выдержка из документации на датчик HIH3610.
Электрически подключить данный датчик практически не является проблемой: достаточно подать на «+» 5В, на «-» общий и с «OUT» снять полезный сигнал и подать его на АЦП. А вот как откалибровать его таким образом, чтобы показания соответствовали значению влажности, а не вольтам или чему-нибудь еще – сложнее. Для этого потребуется приложить немного усилий и вспомнить азы математики. Посмотрим часть документации на датчик, в которой описаны калибровочные параметры.
В данной таблице уже присутствует необходимая нам формула, однако нам надо понять откуда она появилась. Для этого выведем ее самостоятельно. Первоначально для данного датчика необходимо написать формулу зависимости напряжения на выходе от влажности. Ориентируясь по таблице, определяем рабочую формулу еще раз и сверяем свои рассуждения с графиком:
Линейный закон диктует то что зависимость выходного напряжения от влажности будет выглядеть как:
Формула 1
Эту формулу можно переписать в коротком выражении
Формула 2
где slope– угол наклона прямой, равный:
Формула 3
а – это аддитивная составляющая, на графике хорошо видно, откуда она берется.
Выведем из формулы (2) RH
Формула 4
- формула 4, ошибки нет.
И для того, чтобы получить две виртуальные точки значений RH на 0В и на 5В, достаточно подставить эти напряжения в формулу (4)
Формула 5
Формула 6
Эти значения и следует ввести в качестве соответствий минимальному и максимальному значению в установках АЦП. В качестве суффикса методом перебора назначить «%». Точность выставить по желанию, но выше 1 знака после запятой смысла, наверное, нет.
Пример применения АЦП ¹2:
Возьмем датчик давления MPX4115A (рис.3).
Рис.3. Датчик давления MPX4115A.
Рис. 4.
Возьмем формулу поведения выходного напряжения от давления из документации на данный датчик.
Формула 7
Где - напряжение питания (в нашем случае 5В взятое из схемы термостата)
Выведем из этой формулы P.
Формула 8
Теперь подставим граничные напряжения 0 В и 5 В.
Формула 9
Формула 10
Эти два значения надо ввести в минимум и максимум соответственно. В результате мы будем иметь на дисплее значения давления в кПа. Если требуется перевести эти значения в миллиметры ртутного столба, то следует разделить оба калибровочных значения на 101325/760, тогда получим 79.2 и 913, соответственно. И, если, ввести эти значения в качестве калибровочных коэффициентов, то получим показания в мм рт. ст.
Данный датчик работает в диапазоне давлений от 0 до чуть более 1 атм, поэтому измерение атмосферного давления измерения будет производиться у края диапазона датчика. Точность измерения (как следствие разрешающей силы АЦП) будет колебаться в пределах 1 мм рт. ст. Если требуется увеличить точность, то электрическим образом следует сместить и растянуть полезный диапазон в область 0В-5В и соответствующим образом рекалибровать АЦП. Кроме того, любой датчик имеет определенную систематическую погрешность, поэтому при калибровке желательно иметь собственные калибровочные таблицы и по ним рассчитывать свои калибровочные коэффициенты.
Изменения в управлении нагрузками
Количество управляемых нагрузок увеличено до 12. Список новых нагрузок:
- 9 нагрузка – PC2
- 10 нагрузка – PC3
- 11 нагрузка – PD3
- 12 нагрузка – PD6
Сигналы с данных выходов можно нагружать током до 20мА. Активный уровень = 5В.
Введена возможность включения импульсного режима управления нагрузками. Этот режим позволяет не постоянно включать нагрузку на время заданное в таймере, а включать её на определенное время, потом отключать и снова включать... Диапазон времени, при котором нагрузка находится в режиме активности от 3 до 250 секунд, диапазон времени при котором нагрузка находится в отключенном состоянии от 0 до 250 секунд. Этот режим нужен для управления нагрузками, которые требуют кратковременное включение для достижения результата их работы. Чтобы дезактивировать импульсный режим достаточно ввести в параметр времени не активности 0с, а во время активности любое чисто больше 0.
Примечание: минимальное устанавливаемое время активности 3 секунды, время не активности следует устанавливать не менее 2 секунд.
Режим отображения
Режим отображения переработан значительно и теперь позволяет задавать время отображения того или иного параметра, включая время и дату. Есть 7 экранов, которые по желанию можно по очереди наблюдать в основном рабочем режиме:
- Отображение нагрузок и термодатчиков с 1 по 4.
- Отображение нагрузок и термодатчиков с 5 по 8.
- Отображение нагрузок и термодатчиков с 9 по 12.
- Отображение времени/даты.
- Отображение значения 2 каналов АЦП в числовом виде.
- Отображение значения 2 каналов АЦП в виде напряжения.
- Отображение значения 2 каналов АЦП в виде физической величины с заданной точностью и суффиксом.
Время отображения может варьироваться в пределах от 0 (не отображается) до 30 секунд.
Изменения в меню
Новая топология меню представлена на нижеследующем рисунке.
Установки АЦП: в первых 1-м, 2-м и 3-м пунктах данного меню можно наблюдать значения АЦП в числовом виде, в виде напряжения и в виде физической величины соответственно (в экспоненциальной форме). В следующем пункте для 1-го канала АЦП задается физическое значении которое соответствует НУЛЮ АЦП. В следующем пункте для 1-го канала АЦП задается физическое значение, которое соответствует МАКСИМУМУ АЦП (1023). Эти значения используются для пересчета текущего цифрового значения в определенное физическое значение. Следующие 2 пункта выполняют туже задачу, только для 2 канала. Далее идут пункты, задающее точность и суффикс для обоих каналов.
В главном меню пункт «Режим выходов» разворачивает дополнительное подменю, в котором задается режим работы каждого из 12 выходов. Времена активности и не активности определяют времена (в секундах), на которые будут активированы/дезактивированы выходы при условии что все остальные условия, которые должны включать выход выполнены. Крупные изменения коснулись пункта главного меню «Режим экрана», теперь он разворачивает дополнительное подменю, в котором можно задать время соответствующего отображения на экране (в секундах).
Рис.5.
Изменения в установке программы управления
Теперь можно выбирать нагрузки с 1 по 12. При вводе управления с аналогово-цифрового преобразователя можно задавать физические величины значений, по которым происходит регулировка на выходе. Задание величины осуществляется по градациям АЦП (В примененном микроконтроллере разрешение АПЦ составляет 10бит 1024 градации) и соответственно ШАГ установки будет тем больше (грубее), чем шире диапазон между минимумом и максимумом установленными при калибровке АЦП.
Исправленные ошибки
- Исправлена ошибка регулировки на охлаждение на нагрузках 5-8.
- Исправлена ошибка отображения датчиков температуры с 5 по 8.
- Исправлена работа с COM-портами с номерами более 9.
Программа управления для ПК
- В программу управления добавлены кнопки «сохранить» и «открыть», которые позволяют сохранять в файл и открывать из файла программу управления.
- Добавлена кнопка записи приветствия, теперь можно записать свои собственные слова приветствия, которое будет вас радовать при каждом включении устройства.
- Введена опция настройки всех параметров, касающихся АЦП, а так же режима отображения «опция отображения».
- Введено диалоговое окно, позволяющее редактировать параметры импульсного режима выходов: включать, отключать или изменять параметры.
Версия 1.1a
Введены следующие изменения в микропрограмме контроллера:
- Активированы дополнительные 4 канала управления (5-8) на свободные выходы микроконтроллера PA4-PA7.
- Количество подключаемых датчиков увеличено до 8.
- Добавлено расширенное управление термостатом от персонального компьютера.
- Введена функция проверки защиты информации при считывании температуры с датчиков (CRC8), что повышает надежность показаний температуры и исключает ложные срабатывания.
- Активирован режим подключения датчиков по 2-х проводной линии: 1 и 3 выводы датчика, а также вывод «общий» замыкаются вместе. Вывод данных с термодатчика сохраняется, как и прежде.
Изменения программного обеспечения для ПК
Программа для ПК сильно видоизменена и представлена в виде основного рабочего окна на следующем рис.6.
Рис.6.
Справа осталось поле с температурами и состояниями нагрузок. Слева внизу появилась кнопка синхронизации часов компьютера и часов термостата. Кнопкой «Загрузить список» мы активируем загрузку 32-шаговой программы контроллера в компьютер.
Введена возможность редактирования каждой записи таймера. Запускается редактирование двойным щелчком мыши на соответствующей записи. После чего появляется окно редактирования, представленное на рис.7.
Рис.7.
В данном окне можно активировать/дезактивировать выбранный канал. Можно выбирать номер канала управления. Есть календари для выставления дат и времени включения и отключения. Есть поле для выставления периодичности и управление периодичностью (возможность выбора конкретных чисел, дней недели и месяцев). Кроме того, есть выбор типа термостатирования, а также задание температур термостатирования.
При нажатии на кнопку «OK» появляется окно, предлагающее произвести запись измененной информации в термостат.
По сравнению с версией ver. 1.0а в данной версии улучшена стабильность работы термостата, найдены и исправлены мелкие ошибки, что в целом повысило надежность и стабильность функционирования устройства.
Версия 1.1b
В основном меню добавлен пункт «Режим экрана». Этот пункт отвечает за выбор между режимами автоматической смены между температурой и временем либо статический вывод или температуры, или времени по выбору пользователя. В статическом режиме выбор показаний выбирается в основном режиме кнопкой «enter».
Если отсутствуют все 4 датчика с 5 по 8, то вывод на экран информации о состоянии нагрузок с 5 по 8 не производится. Однако если нагрузки управляются от таймера и хотя бы одна из нагрузок с 5 по 8 активна, то окно с нагрузками с 5 по 8 отображаться будет.
Версия 1.2a
В данном обновлении серьезно изменен интерфейс установок, а также принципы организации связи датчиков и нагрузок, управляемых от этих датчиков.
Начиная с данного обновления количество датчиков, которые подключаются к устройству увеличено до 32. Каждый датчик получает свой логический номер в «Поиске датчиков». Каждый уже логически пронумерованный датчик может быть назначен на любой из нагрузок, это задается в каждой записи 32-х канальной программы управления. Это позволит, как вариант, управлять одной нагрузкой двумя и более датчиками. Введены в работу два аналоговых входа микроконтроллера – 38 и 37: выводы микроконтроллера (соответствуют 1 и 2 логическому входу АЦП).
Выбор от какого входа управлять – аналогового или цифрового осуществляется также в каждой из записей программы управления. Разрядность АЦП 10 бит. Управление, как и раньше подразделяется на нагревание или на охлаждение (а также просто таймер и будильник как и в предыдущих версиях). Задание порога для АЦП осуществляется в виде двух напряжений гистерезиса. Размах – от 0 до 5В, дискретность шага <0.01В.
На рис.8 показано, как соотносятся датчики, их логические номера и привязка к нагрузкам.
Описание изменений в меню и в других частях интерфейса
В меню добавился пункт «Монитор АЦП», в данном пункте отображается значение первого и второго каналов АЦП в вольтах.
Алгоритм программирования таймера-термостата.
В данной версии переименован пункт меню «Программа» на «Программа упр.». При входе в данный пункт меню клавишами навигации, как и в предыдущих версиях можно выбирать один из 32 каналов управления и клавишей «ввод» входить в редактирование выбранной записи. Стадии «Старт» и «Стоп» не поменялись, в следующем окне после установки времени останова вводится теперь номер канала нагрузки, алгоритм управления нагрев/охлаждение (теперь нагрев обозначается вместо кружка стрелкой охлаждение – стрелкой звездочки), выставляется номер датчика (по регистрации) и тип датчика – аналоговый (номера 1 или 2) стрелками выбирается буква «A» или цифровой «D» (номера от 1 до 32).
Для улучшения стабильности работы при использовании 2-х проводного подсоединения датчиков датчики переводятся в режим меньшей разрядности преобразования (до 10 бит, что укорачивает время преобразования и уменьшает потребляемый ток). Те же датчики, которые подключены по 3 проводной линии (питание-данные-общий) инициализируются в стандартный 12 битный режим. При количестве датчиков более 15 использовать 2-х проводное соединение не рекомендуется, так как паразитного питания уже не достаточно для питания всего массива.
Особенности отображения информации на экране
В данной версии отображение происходит по такому же принципу что и в предыдущей версии, однако, следует внимательно относиться к тому, что температуры отображаются по порядку их регистрации, а не по их привязке к конкретным нагрузкам. Температура датчиков с 9 по 32 не отображается.
Старт программы внешне изменен незначительно: строка «Startup» появляется и отображает инициализацию всех потенциальных 32 термодатчиков, если каких то датчиков нет – то инициализация пропускается, что убыстряет процесс старта.
Во время работы «мониторятся» только зарегистрированные датчики. Это значит, что при циклическом опросе датчиков те датчики которые не зарегистрированы просто пропускаются, что приводит к меньшей инерции измерений. Если все датчики присутствуют на линии (32), то примерно время опроса всех сразу – полминуты. Если, например, подключено 10 датчиков, но зарегистрировано только 2, то происходит опрос только этих двух датчиков (информация по ним будет обновляться примерно раз в 2 секунды).
Изменения в программе для компьютера
В программе добавлен выбор датчика и его типа. Кроме того в основном окне добавлена кнопка «посмотреть серийные номера датчиков». Эта функция не на что не влияет, просто дает возможность пользователю посмотреть так называемую «laser ROM»-память датчиков.
После обновления
После обновления следует произвести полную ре-инициализацию, так как структура запоминаемых данных претерпела изменения которые не будут совместимы со старым содержимым EEPROM термостата (клавишей «Меню» при старте).
Приложение 1
Обновления программы микроконтроллера программой flasher.exe
Для совершения обновления подключите термостат нуль-модемным кабелем к компьютеру, разархивируйте и запустите программу flesher.exe, затем нажмите кнопку «Тест» для проверки соединения. Если последует сообщение о том, что связь есть, то нажмите кнопку «Запись», и в появившемся окне выбора файла найдите новую прошивку для термостата с названием 8036.cod.
Рис.9.
Рис.10.
После того как начнется процесс программирования, следует нажать и удерживать кнопку «меню» до завершения программирования и не отпускать её до момента перезапуска с новой программой. Это требуется для того, чтобы произвелась инициализация значений переменных в EEPROM в соответствие с новой программой.
Внимание!
Необходимо ввести «правильный» файл при произведении обновления, так как если программе дать не тот файл, то она его запрограммирует в память микроконтроллера без проверки, и устройство перестанет работать. Если все же это произошло, то необходимо предпринять ряд мер чтобы устройство «вернуть к жизни»:
- Выключить питание.
- Подсоединить компьютерный кабель.
- Нажать кнопку «POWER» и удерживая её подать питание на устройство. После этого следует отпустить кнопку.
- Запустить программу flasher.exe .
- Открыть корректный файл и подождать пока произойдет программирование.
Приложение 2
Описание управления термостатом через последовательный интерфейс
Общие сведения
Скорость связи 9600 бит/с, 1 стоп бит.
Описание команд
Чтение значений температуры
Команда: 1 байт – ASCII-символ ' t’ ;
Ответ: символ ' t'
1 байт – количество термодатчиков (для версии 1.2а и далее =32), далее передаются значения температуры всех 32 датчиков. Формат числа float(32 битное стандартное представление с плавающей точкой).
Чтение портов нагрузок.
Команда: ASCII-символ ' l' ;
Ответ: PC4-PC7, младшая часть – PA4-PA7.
1 байт младшая часть данного байта = PC2, PC3, PD3, PD6
Чтение уровня заряда батареи часов реального времени
Команда: ASCII-символ ' b' ;
Ответ: символ ' b'
2 байтное слово соответствующее представлению числа от 0 до 1024 что соответствует напряжению соответственно от 0 до 5В.
Чтение версии ПО микроконтроллера
Команда: ASCII-символ ' V' ;
Ответ: символ ' V'
1 байт – число, представляющее длину строки текста, который следует после (в конце строки нет флага окончания строки 0h)
Запись вермени.
Команда: ASCII-символ ' T' ;
Далее передаются данные календаря по указанной структуре. Суммарно 8 байт.
struct struct_clock{
// байт ¹1
unsigned char seconds:4;// секунды (4 бита)
unsigned char ten_seconds:3;// десятки секунд (3 бита)
unsigned char ch:1;// всегда = (1 бит)
// байт ¹1
unsigned char minutes:4;// минуты
unsigned char ten_minutes:3;// десятки минут
unsigned char reserved_0:1;
// байт ¹1
unsigned char hours:4;// часы
unsigned char ten_hours:2;// десятки часа
unsigned char AMPM_24_mode:1;// всегда =0
unsigned char reserved_1:1;//
unsigned char day:3;// День недели (1-7)
unsigned char reserved_2:5;
unsigned char date:4;// число (1-31)
unsigned char ten_date:2;// число (десятки)
unsigned char reserved_3:2;
unsigned char month:4;// месяц (1-12)
unsigned char ten_month:1;// месяц(десятки)
unsigned char reserved_4:3;
unsigned char year:4;//год от 0 до 99
unsigned char ten_year:4;// десятки года
unsigned char RS:2;// всегда =0
unsigned char reserved_5:2;
unsigned char SQWE:1;// всегда =1
unsigned char reserved_6:2;
unsigned char OUT:1;// всегда =1
};
Ответ: после подачи команды приходит в ответ символ ' T' , только после этого начинается передача нового времени. После окончания передачи, данные автоматически записываются в часы реального времени термостата.
Передача программы управления в компьютер
Команда: ASCII-символ ' L' ;
Далее передаются 32 записи, каждая из которых соответствует нижеописанной структуре. Структура занимает 26 байт, поэтому, суммарно 26 * 32 = 832 байта
Описание структуры:
struct DataToPC{
unsigned char time_on_h;// время старта час 0-23
unsigned char time_on_m;// время старта минута 0-59
unsigned char time_on_s;// время старта секунда 0-59
unsigned char time_off_h;// время остановки час
unsigned char time_off_m;// время остановки минута
unsigned char time_off_s;// время остановки секунда
unsigned char time_on_day;// число старта 1-31
unsigned char time_off_day;// число остановки
unsigned char time_on_month;// месяц старта от 1 до 12
unsigned char time_off_month;// месяц остановки
unsigned char time_on_year;// ГОД СТАРТА от 0 до 99 (соответствует от 2000 до 2099)
unsigned char time_off_year;// ГОД ОСТАНОВКИ
unsigned char time_load;// номер нагрузки от 0 до 7
unsigned char time_loadsensor;
unsigned short time_min;// минимум для температуры это от -5500 до +12500 (-55 до 125град)
unsigned short time_mode ; / режим 0=нагрев, 1= охлаждение, 2= будильник, 3=по таймеру
unsigned char time_eze;// отрабатывать по дням=1, по дням недели=2, по месяцам=3, без периода=0
unsigned long time_ezedata;// 32 бита соответствующие выбранной периодичности
unsigned char time_bud;// служебный (считать и записать в то же состояние)
unsigned char enable;//разрешение работы данного канала
unsigned char sensortype;//тип датчика 0 – DS18B20, 1 – аналоговый вход
}
Ответ: перед началом передачи приходит символ ' L' , только потом следует выше обозначенный массив структур.
Запись программы управления в 8036
Команда: ASCII-символ ' W' ;
Ответ: W’ . После отправляется номер редактируемой записи (0-31), далее структура описанная в п.6
Считывание серийных номеров зарегистрированных датчиков Dallas
Команда: ASCII-символ ' D' ;
Ответ: D' .
Отправляется 32 поля серийных номеров DS18B20 по 8 байт (суммарно 256 байт)
Если датчик не зарегистрирован на центральном блоке – то получить его серийный номер не получится.
Обновление внутреннего ПО
Команда: ASCII-символ ' E' ;