Програмиране на AVR микроконтролери. Кухненски таймер на ATMega8 Многоканален дневен таймер на atmega8

В този урок ще говорим за таймери.

Тази тема е пряко свързана с темата за часовника на микроконтролера. Затова ви препоръчвам да прочетете предишния, преди да прочетете този урок.

И така, защо се нуждаем от таймер?

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

Таймерите помагат за решаването на задачите. Но таймерите на микроконтролера AVR не знаят какво е секунда, минута или час. Те обаче много добре знаят какво е такт! Те работят именно благодарение на наличието на часовник на контролера. Тоест, таймерът отчита броя на циклите на контролера, като по този начин измерва времевите интервали. Да кажем, че контролерът работи на тактова честота от 8 MHz, тоест, когато таймерът преброи до 8 000 000, ще мине една секунда, като броим до 16 000 000, ще минат 2 секунди и т.н.

Тук обаче идва първото препятствие. Нашите регистри са 8-битови, тоест можем да броим до максимум 255, а като вземем 16-битов таймер, можем да броим до максимум 65535. Тоест за една секунда трябва да нулираме таймера a огромен брой пъти! Разбира се, можете да направите това, ако нямате какво друго да правите. Но простото измерване на времето с помощта на мощен микроконтролер изобщо не е интересно; искам да направя нещо повече. Тук на помощ ни идва предделителят. Най-общо казано, това е междинна връзка между таймера и тактовата честота на контролера. Предварителят улеснява нашата задача, като ни позволява да разделим тактовата честота на определено число, преди да я подадем към таймера. Тоест, като настроим прескалера на 8, за 1 секунда нашият таймер ще брои до 1 000 000, вместо 8 000 000 (Разбира се, с тактова честота на контролера от 8 MHz). Вече е по-интересно, нали? И можем да делим не само на 8, но и на 64 и дори на 1024.

Сега е време да сглобим веригата, да настроим нашия таймер, прескалер и да направим поне нещо полезно!

И днес ще направим „ходови светлини“ от светодиоди. Тоест, ще светим 3 светодиода един по един, с период от 0,75 секунди (тоест времето на работа на един светодиод е 0,25 секунди). Нека съставим следната диаграма:

Изчислете сами стойностите на резисторите R 1-R 3.

След това нека разгледаме регистрите, отговорни за работата на таймерите. Общо AtMega 8 има 3 таймера. Два 8-битови (Таймер 0, Таймер 2) и един 16-битов (Таймер 1). Ще разгледаме примера на 16-битов таймер 1.

Двойка регистри, 8-битови регистри TCNT 1H и TCNT 1L, заедно образуват 16-битовия регистър TCNT 1. Този регистър е отворен както за запис, така и за четене. Когато таймер 1 работи, стойността на този регистър се променя с единица при всяко преброяване. Това означава, че регистърът TCNT 1 записва броя на тактовите цикли, които таймерът е преброил. Можем също да запишем тук всяко число в диапазона от 0 до 2 на 16-та степен. В този случай тактовите цикли ще се броят не от 0, а от числото, което сме записали.

Регистърът TIMSK е отговорен за прекъсванията, генерирани при работа на таймерите на микроконтролера. Прекъсването е манипулатор за специален сигнал, получен, когато нещо се промени.. Всяко прекъсване на микроконтролера може да бъде активирано или деактивирано. Когато възникне разрешено прекъсване, ходът на основната програма се прекъсва и този сигнал се обработва. Когато възникне забранено прекъсване, потокът на програмата не се прекъсва и прекъсването се игнорира. Битът TOIE 1 (Timer 1 Overflow Interrupt Enable) е отговорен за активирането на прекъсването при препълване на броячния регистър TCNT 1 на таймер 1. При запис на 1 в този бит, прекъсването е разрешено, а при запис на 0, то е деактивирано. Това прекъсване се генерира от таймер 1, когато се достигне максималната стойност на регистъра TCNT 1. Ще говорим повече за прекъсванията в следващия урок.

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

Останалите битове засега не ни интересуват.

Има и регистър TCCR 1A, който ви позволява да конфигурирате други режими на работа на таймера, например PWM, но за тях в отделна статия.

А сега кодът в C:

#define F_CPU 16000000UL #include #включи uint8_t брой=0; ISR(TIMER1_OVF_vect) ( PORTD=(1<2) ( num=0; ) TCNT1=61630;//Първоначална стойност на таймера ) int main(void) ( DDRD|=(1<

#define F_CPU 16000000UL

#включи

#включи

uint8_t num =;

ISR(TIMER1_OVF_vect)

PORTD = (1<< num ) ;

номер++;

ако (число > 2)

брой = ;

TCNT1 = 61630; //Първоначална стойност на таймера

int main(void)

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

TCCR1B |= (1<< CS12 ) | (1 << CS10 ) ; //Prescaler = 1024

TIMSK |= (1<< TOIE1 ) ; //Активиране на прекъсване при препълване на таймер 1

TCNT1 = 61630; //Първоначална стойност на таймера

sei(); //Активиране на прекъсванията

докато (1)

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

ASM код:

Сглобяване (x86)

Включете "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_OV F: изход 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

Включете "m8def.inc"

Rjmp стартира

Org OVF 1адр

Rjmp TIM 1_OVF

начало:

Ldi R 16, НИСКО (RamEnd)

Изход SPL, R 16

Ldi R 16, ВИСОКА (RamEnd)

Извън SPH, R 16

Ldi R 16, 1

Ldi R 17, 0b00000111

Извън DDRD, R 17

Ldi R 17, 0b00000101

Изход TCCR 1B, R 17

Ldi R 17, 0b11110000

Изход TCNT 1H, R 17

Ldi R 17, 0b10111110

Таймерът е предназначен да включва товара в един момент и да го изключва в друг, т.е. товарна операция в рамките на определен период от време.

Дизайнът използва PCF8583 часовник за реално време във връзка с резервна батерия за часовник, за да работи с часовника при липса на захранване. Микроконтролерът Atmega8 с тактова честота 16MHz се използва като мозък на устройството.
Устройството беше планирано да се захранва от зареждане на телефона - затова в схемата няма 5V стабилизатор - има 5V захранващ конектор и 220V захранване за захранването.
Включването на товара се извършва с реле - с вида посочен на схемата до 10А.
На схемата има 3 светодиода:
НАСТРОИКИ– светва, когато влезете в настройките на часовника.
ВРЕМЕ– мига, когато таймерът работи – не свети, когато таймерът е деактивиран.
ВЪН– показва състоянието на релето – включено или изключено.
Бутони:
SW1- бутон з.
SW2- бутон М.
Настройки:
Сверяване на часовника.
За да настроите часовника, трябва да задържите бутона SW1докато светодиодът светне НАСТРОИКИ.
Точката свети и не мига - с копчето SW1часовникът е настроен и бутонът SW2минути.


За да излезете от настройките също трябва да задържите бутона SW1докато светодиодът изгасне НАСТРОИКИ.
Настройка на таймера.
За да настроите таймера, трябва да настроите бутоните в режим на дисплей (режим на готовност - основен) SW1– време за превключване на товара, SW2– време на изключване на товара. След като настроите таймера, той автоматично ще премине в режим на показване на времето, ако бутоните не бъдат натиснати в рамките на 2-3 секунди.


Деактивиране на таймера.
За да деактивирате таймера, трябва да натиснете и задържите бутона SW2– устройството ще включи товара и таймерът няма да го изключи.
Схема.


Диаграмата използва нестандартен ISP конектор:
1 – VCC
2 – MOSI
3 – MISO
4 – SCK
5 – НУЛИРАНЕ
6 – GDN.

Печатни платки.



Печатната платка използва индикатор с общ анод E40361 - но е възможен и друг с подобни разводки и размери.

Малко 3D модели.




Този таймер е предназначен да задава скорости на затвора от 5 секунди до 100 минути. На изхода му има доста мощно електромагнитно реле, което ви позволява да превключвате ток до 30A при напрежение 12V и ток до 10A при напрежение 220V. Благодарение на използването на електромагнитно реле, таймерът може да контролира не само отоплителни или осветителни устройства, но и електронни устройства, които са критични за формата на захранващото напрежение. Трансформаторно захранване, в комбинация с реле, осигурява пълна галванична изолация на електронната верига на таймера от мрежата.

За комуникация между таймера и оператора има четирицифрен LED индикатор, който съдържа четири много стари 7-сегментни AL304 матрици, свързани в матрица чрез свързване на сегментни пинове със същото име. Разбира се, можете да използвате по-модерни LED индикатори и дори готови четирицифрени матрици за динамичен дисплей.

Таймерът се управлява от бутони S1, S2, S3, S4. Когато натиснете бутона S1, товарът се включва и таймерът започва. За да зададете времето, през което товарът трябва да работи, трябва да натиснете S4.На дисплея ще мигат двете най-значими цифри (минути). Сега можете да използвате бутоните S2 и S3, за да зададете минутите. След това трябва да натиснете отново S4. Сега най-малко значимите цифри ще мигат и можете да използвате бутоните S2 и S3, за да зададете секундите. За да запазите настройките, натиснете отново S4. Сега индикаторът ще покаже зададената скорост на затвора. За да стартирате таймера трябва да натиснете S1. Товарът е включен и показанията на индикатора започват да намаляват. Веднага след като зададеното време изтече, на индикатора се появява „OFF“ и товарът се изключва от електромагнитното реле. За да повторите, натиснете два пъти бутона S1. Първият път, когато натиснете “OFF”, ще се промени, за да покаже зададеното време, а вторият път, когато таймерът стартира. Управление на реле чрез пин 23 D1. Включването е логична единица. Ключът на VT5 и VT6 управлява електромагнитното реле K1. Такива релета се използват в алармени схеми на автомобили. Те могат да превключват както прав ток (12V), така и променлив ток (220V), тъй като имат добра изолация.

Източникът на захранване е направен с помощта на трансформатор с ниска мощност. Тъй като вторичната намотка на трансформатора е изведена от средата (12-0-12), токоизправителят не е направен с помощта на мост, а с помощта на верига с пълна вълна, използваща два диода VD2 и VD3. Ако трансформаторът има 12V намотка без кран, тогава е необходим токоизправителен мост. Релето се захранва директно от изхода на токоизправителя, а останалата част от веригата през 5V стабилизатор на напрежение A1.

Когато флашвате фърмуера, трябва да го настроите да работи с вътрешен 8 MHz осцилатор.

Веригата е сглобена на закупена прототипна печатна платка, от едната страна има микросхема и други части, а от другата страна има бутони и индикатори. Силов трансформатор извън платката.

Транзисторите KT315 могат да бъдат заменени с KT3102 или други аналози. Транзисторът KT815 може да бъде заменен с KT817, KT604. Диод KD521 - почти всеки аналог. Диодите в токоизправителя KD209 са всякакви токоизправителни диоди за постоянен ток не по-нисък от 150 mA. Интегрираният стабилизатор 7805 може да бъде заменен с всеки 5-волтов, например KR142EN5A. Или направете стабилизатор, използвайки параметрична схема, използвайки два транзистора и 5V ценеров диод. Относно индикаторите, казахме по-горе. Това могат да бъдат всякакви седемсегментни индикатори с общ анод (катод).

Файлове на фърмуера

19.02.2011 г. 5,58 KB 2317

Този таймер е предназначен да задава скорости на затвора от 5 секунди до 100 минути. На изхода му има доста мощно електромагнитно реле, което ви позволява да превключвате ток до 30A при напрежение 12V и ток до 10A при напрежение 220V. Благодарение на използването на електромагнитно реле, таймерът може да контролира не само отоплителни или осветителни устройства, но и електронни устройства, които са критични за формата на захранващото напрежение. Трансформаторно захранване, в комбинация с реле, осигурява пълна галванична изолация на електронната верига на таймера от мрежата.

За комуникация между таймера и оператора има четирицифрен LED индикатор, който съдържа четири много стари 7-сегментни AL304 матрици, свързани в матрица чрез свързване на сегментни пинове със същото име. Разбира се, можете да използвате по-модерни LED индикатори и дори готови четирицифрени матрици за динамичен дисплей.

Таймерът се управлява от бутони S1, S2, S3, S4. Когато натиснете бутона S1, товарът се включва и таймерът започва. За да зададете времето, през което товарът трябва да работи, трябва да натиснете S4.На дисплея ще мигат двете най-значими цифри (минути). Сега можете да използвате бутоните S2 и S3, за да зададете минутите. След това трябва да натиснете отново S4. Сега най-малко значимите цифри ще мигат и можете да използвате бутоните S2 и S3, за да зададете секундите. За да запазите настройките, натиснете отново S4. Сега индикаторът ще покаже зададената скорост на затвора. За да стартирате таймера трябва да натиснете S1. Товарът е включен и показанията на индикатора започват да намаляват. Веднага след като зададеното време изтече, на индикатора се появява „OFF“ и товарът се изключва от електромагнитното реле. За да повторите, трябва да натиснете два пъти бутона S1. Първият път, когато натиснете “OFF”, ще се промени, за да покаже зададеното време, а вторият път, когато таймерът стартира. Управление на реле чрез пин 23 D1. Включването е логична единица. Ключът на VT5 и VT6 управлява електромагнитното реле K1. Такива релета се използват в алармени схеми на автомобили. Те могат да превключват както прав ток (12V), така и променлив ток (220V), тъй като имат добра изолация.

Източникът на захранване е направен с помощта на трансформатор с ниска мощност. Тъй като вторичната намотка на трансформатора е изведена от средата (12-0-12), токоизправителят не е направен с помощта на мост, а с помощта на верига с пълна вълна, използваща два диода VD2 и VD3. Ако трансформаторът има 12V намотка без кран, тогава е необходим токоизправителен мост. Релето се захранва директно от изхода на токоизправителя, а останалата част от веригата през 5V стабилизатор на напрежение A1.

Когато флашвате фърмуера, трябва да го настроите да работи с вътрешен 8 MHz осцилатор.

Веригата е сглобена на закупена прототипна печатна платка, от едната страна има микросхема и други части, а от другата страна има бутони и индикатори. Силов трансформатор извън платката.

Транзисторите KT315 могат да бъдат заменени с KT3102 или други аналози. Транзисторът KT815 може да бъде заменен с KT817, KT604. Диод KD521 - почти всеки аналог. Диодите в токоизправителя KD209 са всякакви токоизправителни диоди за постоянен ток не по-нисък от 150 mA. Интегрираният стабилизатор 7805 може да бъде заменен с всеки 5-волтов, например KR142EN5A. Или направете стабилизатор, използвайки параметрична схема, използвайки два транзистора и 5V ценеров диод. Относно индикаторите, казахме по-горе. Това могат да бъдат всякакви седемсегментни индикатори с общ анод (катод).

Архив за статията "Таймер на Atmega8 и LED индикатори"
Описание:Файлове на фърмуера
Размер на файла: 5,58 KB Брой изтегляния: 4 319

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

Описание на дизайна

Сърцето на устройството е микроконтролерът U1 (ATMega8) с кварцов резонатор X1 (16 MHz) и низ от два кондензатора C1 (22 pF) и C2 (22 pF). Стабилизатор U2 (7805) с кондензатори C3 (100 µF) и C4 (47 µF) стабилизира 5V захранващо напрежение, необходимо за правилната работа на микроконтролера и свързаните с него компоненти. Към конектора Zas се подава напрежение от 7-12V. Ако имате захранване с напрежение 5-6V, можете да изключите стабилизатора на напрежението от веригата. Зумерът B1 и анодите на дисплея W1 се управляват от транзистори T1 - T5 (BC556), с резистори R1 - R8 (3,3 kOhm), R17 (3,3 kOhm) и R18 (3,3 kOhm). Резисторите R9 - R16 (330 ома) ограничават тока през сегментите на дисплея. Конекторът Prog и един R щифт се използват за свързване на програматора. Клавиатурата на таймера е свързана към Sw конектора.

производство

Чертеж на печатната платка за устройството е в архива в края на статията. Монтажът на частите започва със запояване на два джъмпера. След това всички резистори и други елементи се монтират в ред от най-малките до най-големите. Quartz X1 трябва да е „нисък“ - той е инсталиран под дисплея - в противен случай просто няма да се побере там. B1 зумерът може да бъде запоен на платката, както е показано на снимките, но по-късно се установи, че звукът е твърде тих след затваряне на кутията (въпреки дупките, пробити в кутията). По-добре е да залепите зумера от едната страна на корпуса (както е показано на последната снимка) и да го свържете с кабели към платката. Клавиатурата се състои от 5 незакопчаващи се бутона с размери 12x12 мм директно върху предната част на кутията, така че бутоните им да са малко над повърхността на кутията. За това устройство е добре да използвате зарядно за телефон като захранване поради лекото му тегло и размери.

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

Обозначаване Тип Деноминация Количество ЗабележкаМагазинМоят бележник
U1 MK AVR 8-битов

ATmega8A-AU

1 Към бележника
U2 Линеен регулатор

LM7805CT

1 Към бележника
Т1-Т5 Биполярен транзистор

пр.н.е.556

5 Към бележника
C1, C2 Кондензатор22 pF1 Към бележника
C3 100 µF1 Към бележника
C4 Електролитен кондензатор47 µF1 Към бележника
R1-R8, R17, R18 Резистор3,3 kOhm10 Към бележника
R9-R16 Резистор330 ома8 Към бележника
W1 7-сегментен индикаторAF-05643FG-B1 Или с подобен pinout Към бележника
B1 Пиезо говорител с генератор 1