По материалам

Скачать книгу
Счетчик Событий
Счетчик событий предназначен для считывания нажатий кнопки и отображения в десятичной форме количества таких нажатий на экра­не. Счетчик можно использовать для регистрации посетителей в любом небольшом заведении, а так же — событий в электронике или в цифро­вой технике (например, для подсчета импульсов в лентопротяжных ме­ханизмах или метража в механизмах намотки провода). Цель главы — ознакомить читателей с современными технологиями вывода информа­ции на семисегментные индикаторы в случае ограниченного количества выводов микроконтроллера, а так же с методами минимизации элемен­тов монтажа для быстрой сборки устройства.
Счетчик ведет подсчет с момента включения от 0 до 99. Схема счетчика (рис. 4.1) очень проста: IC1 — регистр 74НС164; IC2 — мик­роконтроллер Tiny 15 от компании Atmel [3]. Микроконтроллер оснащен Flash-памятью на 1 Кбайт, памятью EEPROM на 64 байт, шестью ли­ниями ввода-вывода, встроенным RC-генератором, а так же АЦП, ана­логовым компаратором и двумя таймерами/счетчиками. Этого набора вполне достаточно для полноценной работы устройства.
Питание счетчика осуществляется от батареи 4,5 В При включении питания светодиод LED1 светится, указывая о подаче питания. Микро­контроллер после сброса выполняет динамический опрос индикатора и устанавливает начальное положение в ноль. Индикатор счетчика оп­рашивает регистр IC1 при подаче импульсов управления от микрокон­троллера. Регистр IC1 преобразует последовательную информацию в параллельную [6], в результате чего нулевой потенциал подается на необходимый сегмент индикатора.
Индикаторы подключены по схеме с общим анодом. Для включения индикатора DIS1 включаются транзисторы Q2, Q3; для индикатора DIS2 — транзистор Q1. Транзисторы включены по противофазной схе­ме, поэтому обоими индикаторами можно управлять одним выводом микроконтроллера. При включении одного из плеч транзисторов через сегменты индикатора протекает ток. Например, ток сегмента А индика­тора DIS1 протекает по пути: +ВАТ1, эмиттер-коллектор Q2, сегмент А индикатора DIS1, R3, 3-й вывод IC1, "ноль" GND.
Недостатком схемы является непригодность регистра 74НС164 для коммутации сегментов индикаторов. Максимальный ток потребления 1С1 — 40 мА, что почти достаточно для засветки восьми сегментов ин­дикаторов.
Учитывая падение напряжения на выходных буферах микросхемы и на транзисторном переходе ЭК 01 или (}2, а так же динамический ре­жим работы, автор установил в схему гасящие резисторы 113-119 номи­налом 100 Ом. При этом яркость индикаторов уменьшится.
В схему введен разъем внутрисхемного программирования 8У1 для оперативного перепрограммирования микроконтроллера. Протокол про­граммирования через последовательный интерфейс 8Р1 рассмотрен в книге [3]. Схему можно использовать в качестве индикатора от других устройств.
Программа
Счетчик событий имеет два индикатора. Для вывода цифр на инди­катор используется динамический режим. В начале программы указан вектор прерывания от различных источников микроконтроллера. Ис­пользуется только два прерывания: по сигналам RESET и TIME0.
Далее в программе настраивается режим работы таймера с тактовой частотой f/64 от внутреннего генератора микроконтроллера, а так же на­стройка выводов порта В на ввод-вывод данных. Для прерывания про­граммы и вывода данных на индикатор с периодом в 0,738 мс автор ис­пользовал таймер 0 микроконтроллера.
Динамический вывод цифр на индикаторы полностью реализован в подпрограмме обработки прерывания, которая считывает данные из регистров R22, R23 микроконтроллера и декодирует их в последова­тельный семисегментный код (по таблице "прошивки") (табл. 4.1). За­тем этот код последовательно с тактируемыми импульсами выводится на индикатор через регистр IC1. Далее подпрограмма возвращается из вектора прерывания в то место, где была прервана основная программа. В подпрограмме запоминаются все данные, использованные в основной программе. После перехода в основную программу данные восстанав­ливаются.
Алгоритм основной программы (рис. 4.2) проверяет, нажата кнопка или нет. Если кнопка нажата, то устраняется дребезг контактов (про­граммным путем) и содержимое регистра R22 микроконтроллера увели­чивается на единицу. На данном этапе алгоритм программы упрощен путем ограничения подсчета до девяти в R22 и увеличения следующего разряда десятичной функции в R23.
В программе выполняется проверка на достижение числа 99. Если регистр R23 микроконтроллера достиг 99, то результат регистров обну­ляется. Однако для будущего использования в других приложениях не­обходим пересчет шестнадцатеричной системы исчисления в десятич­ную. Схему счетчика событий можно использовать для других прибо­ров. Если добавить согласующий усилитель и немного модифицировать программу, то получится измеритель напряжения или температуры. В составе микроконтроллера Tiny 15 компании Atmel присутствует АЦП, необходимый для этих целей.
Индикация цифр имеет необычную структуру и организована через вектор прерывания от таймера TIME0 каждые 738 мкс. В подпрограмме прерывания реализован алгоритм, представленный на рис. 4.3.
1. Вывод в регистр кода первого разряда индикации.
2. Пауза в 130 мкс (отображение первой цифры).
3. Вывод в регистр кода второго разряда индикации.
4. Пауза в 130 мкс (отображение второй цифры).
5. Сброс регистра дважды.
На примере цифры 2 рассмотрена структура движения разрядов в последовательном коде. На обоих индикаторах выводится цифра 22. Сегменты на индикаторе расположены стандартно, вывод данных в ре­гистр происходит, начиная с последнего (точка индикатора — сегмент р) и заканчивая первым сегментом (сегмент а).
На рис. 4.3 представлены примеры кодировки всех цифр. Во время вывода кода в регистр буфер регистра постоянно включен, а сегменты индикатора хаотически засвечиваются, что приводит к ненужной под­светке. Однако инертность человеческого глаза настолько высока, что при отображении полезной информации 80% от общего времени и не­нужной — 20%, видна только полезная. Кроме того, частота отображе­ния цифр индикатора составляет около 1355 Гц, тогда как предел распо­знавания мерцания человеческим глазом составляет 25 Гц.
Дальнейшее наращивание числа индикаторов снизит частоту ото­бражения, однако запас инертности очень велик. Изменяя время засвет­ки полезной информации до 90%, можно программным путем увели­чить яркость свечения сегментов индикатора. В программе не использу­ется "спящий" режим микроконтроллера, а также отключен сторожевой таймер, предотвращающий зацикливание.
Код программы на языке ассемблер представлен в листинге 4.1, шестнадцатеричный код — в листинге 4.2. Программа полностью про­верена в симуляторе AVR Studio 4.
ляторов по 1,5 В (150 мАч), или от внешнего блока питания 5 В (100 мА). При включении загорается светодиод индикации питания. Индикатор счетчика в начальный момент должен показать "ноль-ноль". Если индикатор не светится, то неисправна схема индикации. Если све­тится восьмерка на одном из индикаторов, то не работает микрокон­троллер. В случае нагрева микросхемы ІС1 необходимо увеличить но­минал гасящих резисторов R3-R9 от 100 Ом. до 900 Ом.
Плата
Монтажная схема счетчика показана на рис. 4.4, а схема развод­ки — на рис. 4.5.
Микроконтроллер установлен на панельку, индикатор — на впаян­ный разъем (в случае неисправности индикатор легко заменяется, а так­же нет необходимости в соблюдении жестких условий пайки выводов).
Hosted by uCoz