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

Универсальное цифровое устройство, схема которого изображена на рис. 1, имеет следующие технические характеристики:

  • одновременный или раздельный запуск до девяти программных таймеров;
  • функция часов и будильника;
  • подача звуковых и световых сигналов при срабатывании любого из таймеров или будильника;
  • возможность выдачи до четырех сигналов, управляющих внешними устройствами;
  • функция термометра (измеряемая температура - от -43 до +470 °С, средняя погрешность - не более ±2 °С);
  • функция терморегулятора (поддерживаемая температура - от -43 до +470 °С) с возможностью выбора режима работы (нагрев или охлаждение).

Многопрограммный таймер-часы-термометр

(нажмите для увеличения)

Управляют прибором с помощью 16-кнопочной клавиатуры. Предусмотрено включение и выключение подзвучивания нажатия кнопок, настройка подачи звуковых, световых и управляющих сигналов, возможность индивидуальной настройки прибора под конкретное применение путем изменения управляющей программы МК. Имеется резервное питание от встроенной аккумуляторной батареи. Все установленные при работе с прибором параметры сохраняются даже при отключении резервного питания в течение более 40 лет.

Как видно из схемы, основа устройства - PIC-контроллер DD1. Регистр сдвига DD2 и дешифратор DD3 предназначены для организации динамической индикации, принцип которой заключается в следующем. Вначале на дешифратор DD3 подается код 1111, в результате чего на всех его выходах устанавливаются уровни лог. 1 и ни один из разрядов индикатора HG1 не светится. Далее в регистр DD2 заносится код необходимого символа, после чего на DD3 подается код, соответствующий нужному разряду индикатора.

Одновременно с обновлением данных для индикатора осуществляется сканирование клавиатуры, 16 кнопок которой разделены на две группы - по восемь в каждой. Общие выводы кнопок этих групп подключены к двум входам МК (RB0 и RB1). При нажатии какой-либо кнопки на один из этих входов подается сигнал лог. 0 с соответствующего выхода дешифратора DD3, тем самым определяя ее код.

С помощью клавиатуры можно запускать/останавливать любой из программных таймеров или все одновременно, устанавливать режим работы терморегулятора, текущее время, время будильника и т. д. Большинство кнопок имеют двойное назначение, зависящее от того, какую информацию пользователь вводит с клавиатуры: числовую или управляющую.

Рассмотрим назначение кнопок клавиатуры более подробно.

"О", "Clock" - цифра 0 при вводе числовой информации или переключение в режим часов, в котором можно изменить текущее время, установить время включения будильника, включить режим сигнализации наступления нового часа, отредактировать коэффициент коррекции времени (см. далее).

"1" - "9" - цифры 1 - 9 при вводе числовой информации или выбор соответствующего программного таймера.

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

"Del" - знак "минус" при вводе значения регулируемой температуры, включение/выключение терморегулятора, термометра, будильника или часов (при выключении вместо соответствующих показаний отображаются знаки ---), обнуление при вводе числовых данных.

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

"Options" - переход в режим изменения настроек. Здесь можно включить/выключить подзвучивание кнопок, режим приветствия, выбрать источники выдачи управляющих сигналов и т. п.

"Select" - запуск/остановка текущего программного таймера, если его значение выдержки времени отлично от 0.

"АН" - запуск/остановка всех программных таймеров, значение выдержки времени которых отлично от 0.

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

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

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

По окончании выдержки времени любого из запущенных таймеров индикатор HG1 начинает мигать, а пьезоизлучатель НА1 со встроенным прерывателем подает звуковые сигналы. Это продолжается до тех пор, пока пользователь не нажмет любую кнопку на клавиатуре или не пройдет определенное время, значение которого хранится в памяти МК и может изменяться при его программировании. Звуковой сигнал, выдаваемый при срабатывании таймера, определяется двумя параметрами: продолжительностью звучания и числом звуковых пачек.

При срабатывании будильника также подаются звуковые сигналы, но мигать начинают только два крайних левых символа индикатора - А и L (от англ. ALARM - будильник). Звуковой сигнал будильника также описывается двумя параметрами, хранящимися в памяти МК.

В зависимости от примененного кварцевого резонатора точность хода часов получается различной, поэтому в данном устройстве реализована программная коррекция времени. Коэффициент коррекции задается пользователем с клавиатуры и также хранится в памяти МК. Фактически он представляет собой число микросекунд, которое добавляется к периодам колебаний, генерируемых внутренним таймером МК - в нашем случае 1,92 мс. С помощью коэффициента коррекции добиваются, чтобы это время стало равным 2 мс (период времени 1 с регистрируется после каждых 500 таких периодов).

Температура измеряется путем измерения падения напряжения на терморезисторе RK1. Его сопротивление в зависимости от температуры определяется следующей формулой:

Многопрограммный таймер-часы-термометр

где R0 - константа, имеющая размерность сопротивления; В - константа, имеющая размерность температуры; Т - абсолютная температура. Таким образом, эту зависимость нужно привести к линейной. Известен способ линеаризации с помощью терморезисторного моста, но такой подход неудобен тем, что при замене терморезистора приходится изменять параметры и самого моста, что не так просто.

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

Многопрограммный таймер-часы-термометр

где Rд - сопротивление дополнительного резистора; N - 10-разрядный двоичный код, полученный после аналого-цифрового преобразования; Un - напряжение питания.

В описываемом приборе это выражение вычисляется управляющей программой МК, и результат выводится на индикатор. Следует отметить, что указанный выше интервал измеряемых и регулируемых температур (-43... +470 °С) можно как угодно растянуть, сжать или сдвинуть. Указанный интервал был выбран потому, что в нем погрешность измерения температуры не превышает ±2 °С. При этом сопротивление добавочного резистора R17 равно 300 Ом. Для уменьшения погрешности его можно увеличить, однако в результате изменятся границы интервала температур. Для удобства расчетов можно использовать документ term (10 bit).mcd для системы MathCAD 2001, который по заданным параметрам терморезистора RK1, резистора R17 и требуемой погрешности вычисляет интервал измеряемых температур.

Для того чтобы при выключении основного питания ход часов реального времени не сбивался, в приборе предусмотрен узел резервного питания МК. Он состоит из аккумуляторной батареи GB1 напряжением 3,6 В, резистора R16 и диодов VD2, VD3. При включении основного питания диод VD3 закрывается, а аккумулятор GB1 заряжается через резистор R16. При отключении основного питания напряжение аккумулятора поступает через диод VD3 только на МК (подаче напряжения на остальные элементы устройства препятствует диод VD2). МК определяет факт отключения питания, так как он постоянно следит за уровнем напряжения на выводе RB2. И когда он становится равным лог. 0, МК перестает осуществлять регенерацию индикатора и опрос клавиатуры, останавливает все запущенные программные таймеры, прекращает измерять и регулировать температуру и переходит в режим часов. Кроме того, если во время работы с прибором были изменены настройки, то после отключения питания кратковременно мигнет красный светодиод, если же настройки не изменились - зеленый. Если устройством предполагается не пользоваться продолжительное время (неделя и больше), то для исключения полной разрядки аккумулятора можно отключить резервное питание с помощью перемычки S1.

МК постоянно следит за состоянием контактов кнопок на клавиатуре, и если в течение заданного времени не было ни одного нажатия, а также не был запущен ни один программный таймер, он автоматически переходит в режим часов.

Управляющая программа МК написана на языке Си, поэтому она с легкостью может использовать любые типы данных, в том числе и вещественные. Программа разрабатывалась в системе программирования HT-PIC С (ее можно "скачать" с сайта <www.htsoft.com>). Для отладки использовался простейший внутрисхемный эмулятор, который представляет собой набор контактов, соединяющих линии параллельного порта компьютера с розеткой под МК на основной плате. Соответствие выводов параллельного порта компьютера гнездам розетки МК на плате таймера приведено в табл. 1. Для управления эмулятором управляющая программа МК компилировалась с небольшими изменениями в среде программирования Borland С++ 3.1.

Многопрограммный таймер-часы-термометр

К сожалению, работа подобного эмулятора происходит в масштабе времени, отличном от реального, но тем не менее без подобного устройства было бы практически невозможно отладить такую сложную программу. Без применения эмулятора было реализовано только аналого-цифровое преобразование, описание которого применительно к данному МК можно найти на сайте <www.microchip.ru> (документ DS30292C - "Модуль 10-разрядного АЦП в микроконтроллерах PIC16F87x").

Кратко рассмотрим основные моменты работы управляющей программы МК. Она написана с использованием методологии структурного программирования, вследствие чего имеет большое число подпрограмм. После включения питания МК настраивает порты ввода/вывода, АЦП и внутренний таймер. Затем начинает выполняться основной цикл, который является бесконечным. В нем, как уже говорилось, постоянно проверяется наличие основного напряжения питания, и в случае его отключения МК перестает выполнять все функции, кроме отсчета времени. При включении основного питания он выводит заставку и снова переходит в рабочий режим.

Информация, которая должна отображаться на индикаторе в текущий момент, хранится в массиве d. В процессе регенерации индикатора МК переписывает его содержимое в промежуточный массив, а уже из него последовательно читает коды выводимых символов и отображает их на индикаторе. Дополнительный массив введен для того, чтобы исключить мерцание индикатора, возникающее в результате записи в массив d новой информации до того, как старая еще не полностью отображена. Для примера допустим, что вначале массив d содержал строку "ABCDEFHLP", а при отображении четвертого символа ("D") в массив занесена строка "FDA 2002". Тогда пользователь прибора из-за инерционности человеческого зрения в некоторый момент времени увидит строку "ABC 2002". Кроме того, если подобные процессы будут повторяться постоянно (а это так и будет при реальной работе), у человека сложится впечатление, что информация на индикаторе мерцает.

Как отмечалось, одновременно с обновлением индикатора производится сканирование клавиатуры. При нажатии любой кнопки вызывается подпрограмма подавления "дребезга" контактов, которая осуществляет задержку в несколько миллисекунд (значение этого времени хранится в памяти МК), в течение которой прибор на дальнейшие нажатия кнопок не реагирует.

Следует также отметить, что время выдержки программных таймеров, часов и будильника задается в секундах (счетчик часов обнуляется при достижении значения 24 х 60 х 60 = 86400), а перед выводом на индикатор преобразуется в формат Ч : ММ : СС для таймеров или в формат ЧЧ : ММ для часов и будильника. Выполняется это с помощью следующих формул:

Многопрограммный таймер-часы-термометр

С = время mod 60.

Здесь операция ][ означает отбрасывание дробной части, т. е. деление является целочисленным.

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

Многопрограммный таймер-часы-термометр

младший разряд = значение mod 10.

Рассмотрим пример. Пусть необходимо вывести на индикатор значение 8673 с в формате Ч : ММ : СС. Получаем

Многопрограммный таймер-часы-термометр

С = 8673 mod 60 = 33.

Таким образом, на индикатор будет выведено 2 : 24 : 33

Из приведенных примеров видно, как много операций нужно выполнить только для организации вывода на индикатор. Реализовать подобную математику на языке ассемблера было бы практически невозможно. На языке же Си это реализуется всего несколькими строчками, при этом, благодаря высокому уровню оптимизации, программный код получается довольно компактным и быстрым. Но самое главное - программист при этом может сосредоточить основное свое внимание на алгоритме программы, абстрагируясь от специфических особенностей архитектуры применяемого МК. Все это способствует легкому переносу программы с одного МК на другой.

Исходный текст программы МК и коды "прошивки" в формате Intel HEX находятся по указанному выше адресу в Интернете.

Для программирования МК автор использовал программатор, собранный по схеме, изображенной на рис. 2, и программное обеспечение PonyProg2000, последнюю версию которого можно "скачать" с сайта <www.lancos.com>. Основное отличие программатора от описанного в [1] заключается в добавлении еще одного транзистора (VT3) в цепь формирования сигнала синхронизации, что повышает надежность программирования за счет полного устранения отрицательного напряжения на выводах МК.

Многопрограммный таймер-часы-термометр

Описываемое устройство допускает программирование МК на плате, т. е. поддерживает технологию ICSP (In-Circuit Serial Programming - внутрисхемное последовательное программирование). Для этого его соединяют пятью проводами с программатором через разъем Х1 следующим образом: 7 - общий; 5,6 - 5 В; 2 - SDA; 3 - SCL; 1 - Uprog.

Возможно использование и других программаторов, в том числе поддерживающих низковольтное программирование. В последнем случае нужно дополнительно соединить соответствующий контакт программатора с контактом 4 разъема Х1.

Чертеж печатной платы прибора изображен на рис. 3, клавиатуры - на рис. 4.

Многопрограммный таймер-часы-термометр

(нажмите для увеличения)

На плате таймера имеются семь отверстий, в которые до монтажа деталей вставляют отрезки луженого провода и припаивают их к печатным проводникам обеих сторон платы. Функцию перемычек выполняют и выводы некоторых деталей. Отверстия, через которые осуществляются подобные соединения печатных проводников, выделены на рис. 3 четырьмя крестообразно расположенными точками.

Многопрограммный таймер-часы-термометр

Исходные файлы проекта и библиотека используемых компонентов для САПР Accel EDA 15.0 находятся на указанном выше сайте.

В устройстве применены постоянные резисторы и конденсаторы для поверхностного монтажа. Исключение - оксидные конденсаторы С6, С7 (К50-35). МК PIC16F876 может иметь любые максимальную рабочую частоту и температурный диапазон, главное, чтобы он был в корпусе DIP (имел суффикс SP). Пьезоизлучатель НРМ14АХ можно заменить узлом, выполненным на трех элементах микросхемы КР1533ЛАЗ и пьезоизлучателе ЗП-18 [2]. Терморезистор RK1 - ММТ- 4 с номинальным сопротивлением 15 кОм (R0 = 0,294 Ом, В = 3176 К).

В качестве разъемов Х1 - ХЗ применены разрезные колодки с прямыми штырями, которые применяются в компьютерной технике: для Х1 используется колодка с двухрядным расположением штырей, а для Х2 и ХЗ - с однорядным. Восьмой контакт вилки ХР1 и третий вилки ХР2 удалены, а в соответствующие гнезда ответных частей разъемов вставлены заглушки - отрезки толстой рыболовной лески. Эта мера не позволит неправильно состыковать разъемы. Розетка разъема Х2 изготовлена из 20-гнездной панели под микросхему в корпусе DIP (используется одна ее часть, имеющая 10 контактов). Кнопки SB1-SB16 - TS-A3PS-130.

Содержимое ЭСППЗУ МК, которое можно изменять с целью задания других параметров работы, представлено в табл. 2.

Многопрограммный таймер-часы-термометр

(нажмите для увеличения)

В столбце "Параметр" указано название параметра, которое высвечивается на индикаторе. Если в этом столбце стоит прочерк, то данный параметр можно изменить только при программировании МК.

Литература

  • Долгий А. Разработка и отладка устройств на МК. - Радио, 2001. № 6, с 24-26; № 7, с. 19-21
  • Зелепукин С. Микроконтроллерный регулятор температуры MPT-1. - Радио, 2001, № 9, с 21, 22.
  • Автор: Д.Фролов, г.Рязань

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

    Защитный код
    Обновить

    Навигация

    Инструкции по эксплуатации

    Copyright © 2017 Электрические принципиальные схемы.