Виберіть свою мову

У статті описано універсальний цифровий прилад на базі 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.
  • Автор: Д. Фролов, Рязань р.