Таймер на микроконтроллере atmega8 с lcd дисплеем. Кухонный таймер на ATmega8

Простая схема хорошего таймера на МК atmega8, удобная навигация в меню, жидкокристаллический LCD дисплей, часы реального времени, минимальное количеством деталей.

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


Сердцем данного таймера является очень популярный и уже не дорогой микроконтроллер Atmega8.

Конечно для прошивки нам потребуется программатор, но если его нет то можно обойтись всего 4 проводками подключенными к LPT порту по этой схеме.

Что нам понадобится:

Схема таймера

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

Как вариант исполнительного устройства на триаках, тиристорах и симисторах показаны ниже.



Вариант из программы Sprint Layout.

Особое внимание надо обращать при монтаже микросхемы часов и кварцевого элемента. Длина дорожек между ними должна быть минимальна, а лучше использовать микро кварц из наручных часов и припаять его непосредственно к ножкам МС часов. Все свободное место рядом с часами заполняем медью на корпус. Батарея необходима для поддержания часов в рабочем состоянии во время отключения от сети. Если по какой-то причине вы не стали устанавливать эту батарейку, то посадите плюсовой провод на корпус, иначе часы просто не пойдут.

Микроконтроллер прошивается программатором или с помощью простых 5 проводов.

Автор прошивки (скачать — multitimer) постарался и не стал изменять фьюзы, что очень сильно облегчает, без заморочки, прошивку для начинающего радиолюбителя. Если МК еще не использовался, новый из магазина, то просто заливаете прошивку и все, но если уже есть изменения в фьюзах, то надо выставить их так CKSEL=0001. Все остальное просто и не нуждается в пояснении.

Для корпуса очень удобно использовать распаечные коробки из пластмассы, они бывают разных размеров и форм.

В прорезанную ножом крышку, при помощи термоклея из пистолета, закрепляем LCD экран., прорезаем отверстия под кнопки управления и кнопку питания.

Размещаем все узлы внутри корпуса, постоянно проверяя как закрывается крышка, при необходимости переносим или подгибаем мешающие.

На собранную схему подаем питание, должно появиться такое изображение.

Управление осуществляется четырьмя кнопками. Меню состоит из трех пунктов, СLОСК -установка часов, RЕSЕТ -сброс всех установленных таймеров, ТIМЕR — установка таймеров.

Сначала заходим (*) в меню часов и выставляем (>)(<)(#) точное время.


Подсказка по кнопкам управления в нижней строке дисплея, в каждом меню разное, поэтому описывать кнопки нет необходимости.

Теперь все готово чтобы корректно задавать временные позиции таймера, после нажатия решетки, программа записывается в постоянную память МК.

Таймер обратного отсчёта поможет вам точно отмерять интервал времени в диапазоне от 1 секунды до 24 часов.

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

Вот из этих соображений я и сделал программу таймера, который отвечает следующим параметрам:
– компактная конструкция и простая схемотехника;
– оперативное кнопочное управление;
– при управлении кнопками, дублирование действий на ЖКИ;
– задание времени с точностью до секунды;
– диапазон отсчета от 1 секунды до 24 часов;
– функция старт, пауза;
– функция сброса отсчета и выставленных значений времени;
– при достижении значения 00.00.00, включается исполнительное устройство;

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

В этом уроке мы поговорим о таймерах.

Данная тема непосредственно связана с темой тактирования микроконтроллера. Поэтому рекомендую перед прочтением данного урока ознакомиться с предыдущим.

Итак, зачем нам таймер?

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

Решить поставленные задачи помогают именно таймеры. Но таймеры микроконтроллеров AVR не знают что такое секунда, минута, час. Однако они прекрасно знают, что такое такт! Работают они именно благодаря наличию тактирования контроллера. То есть, таймер считает количество тактов контроллера, отмеряя тем самым промежутки времени. Допустим, контроллер работает при тактовой частоте 8МГц, то есть когда таймер досчитает до 8 000 000, пройдет одна секунда, досчитав до 16 000 000, пройдет 2 секунды и так далее.

Однако, тут возникает первое препятствие. Регистры то у нас 8 битные, то есть досчитать мы можем максимум до 255, а взяв 16 битный таймер, мы, досчитаем максимум до 65535. То есть за одну секунду мы должны обнулить таймер огромное количество раз! Конечно, можно заняться этим, если больше заняться нечем. Но ведь просто измерять время, используя мощный микроконтроллер совсем не интересно, хочется сделать нечто большее. Тут нам на помощь приходит предделитель. В общем виде это промежуточное звено между таймером и тактовой частотой контроллера. Предделитель облегчает нашу задачу позволяя поделить тактовую частоту на определенное число, перед подачей её на таймер. То есть установив предделитель на 8, за 1 секунду наш таймер досчитает до 1 000 000, вместо 8 000 000 (Разумеется, при частоте тактирования контроллера 8МГц). Уже интереснее, не так ли? А поделить мы можем и не только на 8, но и на 64 и даже на 1024.

Теперь настало время собрать схему, настроить наш таймер, предделитель, и сделать уже хоть что-то полезное!

А делать мы сегодня будем “бегущие огни” из светодиодов. То есть поочередно будем зажигать 3 светодиода, с периодом 0.75 секунды (То есть время работы одного светодиода 0.25 секунды). Соберем следующую схему:

Номиналы резисторов R 1-R 3 рассчитайте самостоятельно.

Далее, рассмотрим регистры отвечающие за работу таймеров. Всего AtMega 8 имеет в своем составе 3 таймера.Два 8 битных(Timer 0,Timer 2) и один 16 битный(Timer 1).Рассматривать будем на примере 16 битного таймера 1.

Пара регистров 8 битных регистров TCNT 1H и TCNT 1L , вместе образуют 16 битный регистр TCNT 1. Данный регистр открыт как для записи, так и для чтения. При работе таймера 1, значение данного регистра при каждом счете изменяется на единицу. То есть в регистре TCNT 1 записано число тактов, которые сосчитал таймер. Так же мы можем записать сюда любое число в диапазоне от 0 до 2 в 16 степени. В таком случае отсчет тактов будет вестись не с 0, а с записанного нами числа.

Регистр TIMSK отвечает за прерывания, генерируемые при работе таймеров микроконтроллера. Прерывание – обработчик специального сигнала, поступающего при изменении чего либо . Любое прерывания микроконтроллера может быть разрешено или запрещено. При возникновении разрешенного прерывания, ход основной программы прерывается, и происходит обработка данного сигнала. При возникновении запрещенного прерывания, ход программы не прерывается, а прерывание игнорируется. За разрешение прерывания переполнения счетного регистра TCNT 1 таймера 1 отвечает бит TOIE 1(Timer 1 Overflow Interrupt Enable ).При записи 1 в данный бит прерывание разрешено, а при записи 0 – запрещено. Данное прерывание генерируется таймером 1 при достижении максимального значения регистра TCNT 1. Подробнее о прерываниях поговорим в следующем уроке.

Регистр TCCR 1B отвечает за конфигурацию таймера 1. В данном случае битами CS 10-CS 12 мы задаем значение предделителя согласно следующей таблицы.

Остальные биты пока нас не интересуют.

Так же существует регистр TCCR 1A , который позволяет настроить другие режимы работы таймера, например ШИМ, но о них в отдельной статье.

А теперь код на C :

#define F_CPU 16000000UL #include #include uint8_t num=0; ISR(TIMER1_OVF_vect) { PORTD=(1<2) { num=0; } TCNT1=61630;//Начальное значение таймера } int main(void) { DDRD|=(1<

#define F_CPU 16000000UL

#include

#include

uint8_t num = ;

ISR (TIMER1_OVF_vect )

PORTD = (1 << num ) ;

num ++ ;

if (num > 2 )

num = ;

TCNT1 = 61630 ; //Начальное значение таймера

int main (void )

DDRD |= (1 << PD0 ) | (1 << PD1 ) | (1 << PD2 ) ;

TCCR1B |= (1 << CS12 ) | (1 << CS10 ) ; //Предделитель = 1024

TIMSK |= (1 << TOIE1 ) ; //Разрешить прерывание по переполнению таймера 1

TCNT1 = 61630 ; //Начальное значение таймера

sei () ; //Разрешить прерывания

while (1 )

//Основной цикл программы, он пуст, так как вся работа в прерывании

Код на ASM :

Assembly (x86)

Include "m8def.inc" rjmp start .org OVF1addr rjmp TIM1_OVF start: ldi R16,LOW(RamEnd) out SPL,R16 ldi R16,HIGH(RamEnd) out SPH,R16 ldi R16,1 ldi R17,0b00000111 out DDRD,R17 ldi R17,0b00000101 out TCCR1B,R17 ldi R17,0b11110000 out TCNT1H,R17 ldi R17,0b10111110 out TCNT1l,R17 ldi R17,0b00000100 out TIMSK,R17 sei main_loop: nop rjmp main_loop TIM1_OVF: out PORTD,R16 lsl R16 cpi R16,8 brlo label_1 ldi R16,1 label_1: ldi R17,0b10111110 out TCNT1L,R17 ldi R17,0b11110000 out TCNT1H,R17 reti

Include "m8def.inc"

Rjmp start

Org OVF 1addr

Rjmp TIM 1_ OVF

start :

Ldi R 16, LOW (RamEnd )

Out SPL , R 16

Ldi R 16, HIGH (RamEnd )

Out SPH , R 16

Ldi R 16, 1

Ldi R 17, 0b00000111

Out DDRD , R 17

Ldi R 17, 0b00000101

Out TCCR 1B , R 17

Ldi R 17, 0b11110000

Out TCNT 1H , R 17

Ldi R 17, 0b10111110

Данное устройство будет полезно любому человеку, которому приходится постоянно готовить, и надежно защитит вашу кухню от чрезмерного количества дыма. Этот прибор, как следует из названия - кухонный таймер. Он предназначен для отсчитывания интервалов при приготовлении различных блюд. Таймер имеет несколько клавиш, при помощи которых можно легко установить время от 1 минуты до 99 часов. Обратный отсчет начинается автоматически, через 3 секунды после установки времени. Благодаря громкой пищалке вы точно услышите когда блюдо готово. Устройство собрано на основе микроконтроллера ATMega8.

Описание конструкции

Сердцем устройства является микроконтроллер U1 (ATMega8) с кварцевым резонатором X1 (16 МГц) и обвязкой из двух конденсаторов C1 (22 пФ) и C2 (22 пФ). Стабилизатор U2 (7805) с обвязкой из конденсаторов C3 (100 мкФ) и C4 (47 мкФ) стабилизирует напряжение питания 5В, необходимое для корректной работы микроконтроллера и связанных компонентов. На разъем Zas подается напряжение 7-12В. Если у Вас имеется блок питания с напряжением 5-6В, можно исключить из схемы стабилизатор напряжения. Зуммер B1 и аноды дисплея W1 управляются транзисторами T1 - T5 (BC556), с обвязкой из резисторов R1 - R8 (3.3 кОм), R17 (3.3 кОм) и R18 (3.3 кОм). Резисторы R9 - R16 (330 Ом) ограничивают ток через сегменты дисплея. Разъем Prog и один вывод R используются для подключения программатора. Клавиатура таймера подключена к разъему Sw.

Изготовление

Рисунок печатной платы для устройства есть в архиве в конце статьи. Установка деталей начинается с пайки двух перемычек. Затем устанавливаются все резисторы и прочие элементы в порядке от меньшего к большему. Кварц X1 должен быть "низкий" - он устанавливается под дисплей - в противном случае он просто не поместится туда. Зуммер B1 можно припаять на плату, как это показано на фотографиях, но позже выяснилось, что после закрытия корпуса звук слишком тихий (несмотря на отверстия, просверленные в корпусе). Лучше приклеить зуммер на одну из сторон корпуса (так, как это показано на последнем фото), и соединить проводами с платой. Клавиатура состоит из 5 кнопок без фиксации 12х12мм непосредственно на лицевой части корпуса, так что их толкатели находятся чуть выше поверхности корпуса. Для этого устройства в качестве блока питания хорошо использовать зарядное устройство для телефона, из-за его небольшого веса и размеров.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК AVR 8-бит

ATmega8A-AU

1 В блокнот
U2 Линейный регулятор

LM7805CT

1 В блокнот
T1-T5 Биполярный транзистор

BC556

5 В блокнот
C1, C2 Конденсатор 22 пФ 1 В блокнот
C3 100 мкФ 1 В блокнот
С4 Конденсатор электролитический 47 мкФ 1 В блокнот
R1-R8, R17, R18 Резистор 3.3 кОм 10 В блокнот
R9-R16 Резистор 330 Ом 8 В блокнот
W1 7-сегментный индикатор AF-05643FG-B 1 Или с аналогичной распиновкой В блокнот
B1 Пьезодинамик с генератором 1

Таймер обратного отсчёта поможет вам точно отмерять интервал времени в диапазоне от 1 секунды до 24 часов.

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

Вот из этих соображений я и сделал программу таймера, который отвечает следующим параметрам:
– компактная конструкция и простая схемотехника;
– оперативное кнопочное управление;
– при управлении кнопками, дублирование действий на ЖКИ;
– задание времени с точностью до секунды;
– диапазон отсчета от 1 секунды до 24 часов;
– функция старт, пауза;
– функция сброса отсчета и выставленных значений времени;
– при достижении значения 00.00.00, включается исполнительное устройство;

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

Описание режимов работы таймера

После включения таймера, можно выставлять время, которое нам требуется. Назначение кнопок видно на схеме. После установки, нажимаете кнопку СТАРТ-пауза отсчет начинается. Максимальное выставляемое время 23.59.59.

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

Как только время достигает 00.00.00, - включается светодиод (в данный момент это имитация включения исполнительного устройства или просто можно пищалку с генератором).

Если при его работе таймера нажать кнопку старт-ПАУЗА, таймер остановит отсчет, двойное нажатие кнопки СТАРТ-пауза приводит к возобновлению остановленного отсчета.

Чтобы выключить нагрузку после включения, нужно нажать СБРОС, данные таймера установятся 00.00.01 - нагрузка выключиться. Или выставить новый период отсчета и двойное нажатие кнопки СТАРТ-пауза.

Отображение на ЖКИ символов < ! > означает, что нагрузка отключена (PD3) и при однократном нажатии кнопки СТАРТ начнется обратный отсчет установленного времени.

Кварц внешний 8 MHz, для точности счета.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
МК AVR 8-бит

ATmega8

1 В блокнот
Линейный регулятор

LM7805

1 В блокнот
Выпрямительный диод

1N4148

1 В блокнот
Конденсатор 22 пФ 2 В блокнот
Конденсатор 0.1 мкФ 1 В блокнот
100 мкФ 1 В блокнот
Электролитический конденсатор 470 мкФ 1 В блокнот
Резистор

470 Ом

1 В блокнот
Подстроечный резистор 5 кОм 1 В блокнот
Резистор

10 кОм

1 В блокнот
Кварцевый резонатор 8 МГц 1