Врассматриваемом таймере предусмотрено два режима обратного отсчета интервалов времени длительностью от 1-й до 999 минут или такого же числа секунд.
здесь
Схема устройства представлена на рисунке. В нем имеется выключатель SA1, с помощью которого выбирают, в каких единицах, минутах или секундах будет вестись счет, кнопки управления SB1-SB3, трехразрядный светодиодный индикатор HG1 (разряд сотен) - HG3 (разряд единиц). После включения питания таймера RC-цепь R2C3 формирует импульс, устанавливающий микроконтроллер DD1 (AT90S2313-10PI) в исходное состояние.
При установке продолжительности формируемой выдержки каждым нажатием на кнопку SB1 (Л) показания индикатора увеличивают на единицу. Если удерживать эту кнопку нажатой более 3 с, значение на индикаторе станет в каждую секунду увеличиваться на 5 единиц (минут или секунд). Кнопка SB2 (V) действует аналогично кнопке SB1, но значение на индикаторе не увеличивается, а уменьшается. По достижении значений 999 или 0 дальнейшее изменение показаний в соответствующую сторону автоматически блокируется.
Выбрав выключателем SA1, в минутах или в секундах будет отсчитываться время и установив кнопками SB1 и SB2 необходимую продолжительность выдержки, следует нажать на кнопку SB3 (С). С этого момента начинается работа таймера - высокий уровень на выходе PD6 микроконтроллера сменяется низким, подается напряжение на исполнительное устройство, подключенное к разъему Х2, о чем сигнализирует неоновая лампа HL1 (со встроенным балластным резистором), и начинается обратный отсчет заданного времени. Число, выведенное на индикатор, каждую минуту или секунду уменьшается на единицу. Десятичная точка в разряде единиц мигает с периодом 1 с.
Как только показания индикатора достигнут нуля, низкий уровень на выходе PD6 вновь станет высоким, что приведет к выключению исполнительного устройства. Кроме того, в режиме отсчета минут в этот момент на выходе PD4 будет сформирована импульсная последовательность длительностью 60 с - прозвучит звуковой сигнал. Затем прибор возвратится в исходное состояние.
Для досрочного завершения выдержки на кнопку SB3 следует нажать еще раз - исполнительное устройство будет выключено. Чтобы сформировать новую выдержку, необходимо задать ее продолжительность заново.
Узел управления исполнительным устройством собран на твердотельном реле U1, излучающий диод которого соединен с выходом PD6 микроконтроллера. Благодаря этому реле цепи, связанные с сетью 220 В, изолированы от остальных цепей таймера. Пьезоэлектрический излучатель НА1, подающий звуковой сигнал окончания выдержки, подключен к выходу PD4.
На выходах порта В микроконтроллер DD1 формирует сигналы, поступающие через токоограничительные резисторы R4-R11 на катоды элементов светодиодных индикаторов HG1-HG3, и сигналы, используемые для определения состояния кнопок SB1-SB3. Вторые выводы всех кнопок соединены вместе и подключены к входу PD3 микроконтроллера. Диоды VD1-VD3 предотвращают замыкания между линиями порта В при одновременном нажатии на несколько кнопок. Транзисторы VT1-VT3, управляемые сигналами с выходов PDO-PD2, поочередно соединяют с источником питания общие аноды
индикаторов HG1-HG3, что требуется для организации динамической индикации.
Тактовая частота микроконтроллера DD1 задана кварцевым резонатором ZQ1 равной 10 МГц.
Загружаемая в микроконтроллер таймера программа, исходный текст которой имеется в приложении к статье, состоит из трех основных частей: модуля инициализации (метка INIT), основного бесконечного цикла (метка SE1) и обработчика прерывания от таймера Т/С1 (метка TIM0).
Она начинает свою работу, инициализируя регистры, счетчики, стек, таймер Т/С1, сторожевой таймер, порты ввода-вывода. По завершении инициализации на индикатор выведено
число 001, все десятичные точки выключены, на выходе PD6 установлен высокий уровень, поэтому цепь исполнительного устройства разомкнута. Отсчет времени остановлен.
Задача формирования точных интервалов времени длительностью 1 с решена с помощью прерываний от таймера Т/С1, запросы которых следуют через каждые 3,9 мс (1/256 с). Их подсчитывает счетчик в регистре г25. С помощью счетчика, организованного в регистре г21, формируется интервал в 1 мин.
В процессе обработки прерываний производятся также смена отображаемого на индикаторе разряда и преобразование двоичного значения цифры, выводимой в этом разряде, в "семисег-ментный" код. Кроме того, выполняется опрос состояния кнопок, формируются сигналы управления оптоэлектронным реле и звуковым сигнализатором.
В памяти данных микроконтроллера с адреса $060 по $062 организован буфер, хранящий значение оставшегося до завершения выдержки интервала времени. Именно из него программа обработки прерывания берет цифры для динамического вывода на индикатор. При нажатии на кнопку SB1 хранящееся в буфере значение увеличивается на единицу. Одновременно запускается счетчик секунд в регистре r1. Если кнопка удерживается нажатой более 3 с, значение в буфере начинает увеличиваться на единицу пять раз за каждую секунду. Подсчет интервала времени, в течение которого происходит это увеличение, организован в регистре гО. После отпускания кнопки SB1 счетчики в регистрах г1 и гО обнуляются.
Совершенно аналогичным образом организована обработка нажатий на кнопку SB2, уменьшающих число в буфере. Счетчики времени для этой кнопки находятся в регистрах гЗ и г2.
В процессе отсчета заданной выдержки число в буфере декрементиру-ется (уменьшается на единицу) каждую минуту или секунду в зависимости от положения выключателя SA1. Учтите, что при переводе его в другое положение до завершения заданной выдержки соответственно изменится период де-крементирования.
В регистре г22 хранится двоичный код с единицей в разряде, соответствующем включенному в данный момент разряду индикатора. При инициализации в него записывается 00000001 (включен индикатор HG3), а в регистр Y - начальный адрес буфера ($060). При каждом вызове процедуры обработки
прерывания содержимое регистра г22 сдвигается на один разряд влево, а регистр Y инкрементируется. Понятно, что как только единица в регистре г22 будет сдвинута в третий разряд (пройдены все индикаторы), регистры г22 и Y следует перезагрузить, восстановив в них исходные значения.
На время опроса состояния кнопок SB1-SB3 все индикаторы выключаются, а на выходах PB0-РВ2 микроконтроллера формируется код "бегущий ноль". Обнаружив низкий уровень на входе PD3 и зная, на каком из выходов PB0-РВ2 уровень в данный момент низкий, процедура обработки прерывания принимает решение о том, какая кнопка нажата.
Вся программа занимает около 670 байт памяти программ микроконтроллера.
Таймер собран на макетной плате, помещенной в пластмассовый корпус, на переднюю панель которого выведены индикаторы HG1- HG3, кнопки SB1 - SB3, выключатель SA1 и неоновая лампа HL1. Потребляемый от источника напряжения 5 В ток не превышает 100 мА.
Пьезоэлектрический излучатель НРМ14АХ можно заменить на НРА17АХ или НРА14АХ. Вместо индикаторов HDSP-F501 подойдут и другие светодиодные семиэлементные индикаторы с общими анодами. Индикаторную лампу N-702R со встроенным резистором можно заменить обычной неоновой лампой, включив последовательно с ней резистор номиналом 200...560 кОм и мощностью не менее 0,25 Вт.
Программа микроконтроллераскачать здесь