U ovom ćemo projektu dizajnirati jednostavan budilnik pomoću ATMEGA32 timera. Mikrokontroler ATmega32A ima 16-bitni timer, a mi ćemo taj timer koristiti za brojanje sekundi i razvoj digitalnog sata.
Svi digitalni satovi imaju kristal koji je srce sata. Ovaj kristal nije prisutan samo u satu već je prisutan u svim računalnim sustavima u stvarnom vremenu. Ovaj kristal generira taktove koji su potrebni za izračun vremena. Iako postoje neki drugi načini za dobivanje impulsa takta, ali zbog točnosti i veće frekvencije većina preferira sat na bazi kristala. Spojit ćemo kristal na ATMEGA32 radi dobivanja točnog sata.
Komponente potrebne
Hardver: ATmega32 mikrokontroler, kristal 11.0592MHz, kondenzator 22pF (2 komada), napajanje (5v), AVR-ISP PROGRAMER, JHD_162ALCD (16x2 LCD), kondenzator 100uF (spojen preko napajanja), tipke (četiri komada), otpornik 10KΩ (šest komada), kondenzator od 100 nF (četiri komada), tri preklopna prekidača (2 komada), tranzistor 2N2222, zujalica, otpor 200Ω
Softver: Atmel studio 6.1, progisp ili flash magic.
Kružni dijagram i radno objašnjenje

Za precizno mjerenje vremena spojili smo kristal od 11,0592 MHz za sat. Sada za onemogućavanje internog sata ATMEGA-e moramo promijeniti NJEGOVE NISKE OSIGURAČE. Imajte na umu da ne dodirujemo bitove visokih osigurača kako bi JTAG komunikacija i dalje bila omogućena.
Da bismo ATMEGA-i rekli da onemogući interni sat i radi na vanjskom, moramo postaviti:
BAJT KORIŠTENJA = 0xFF ili 0b11111111.
U krugu PORTB ATMEGA32 spojen je na podatkovni port LCD. Ovdje treba imati na umu da onemogućite JTAG komunikaciju u PORTC-u ATMEGA-e promjenom visokih bajtova osigurača, ako želite koristiti PORTC kao uobičajeni komunikacijski priključak. Na 16x2 LCD-u postoji 16 pinova ako postoji crno svjetlo, a ako nema pozadinskog svjetla, bit će 14 pinova. Može se napajati ili ostaviti igle stražnjeg svjetla. Sada u 14 pinova postoji 8 podatkovnih pinova (7-14 ili D0-D7), 2 pina za napajanje (1 & 2 ili VSS & VDD ili gnd & + 5v), treći pinski za kontrolu kontrasta (VEE - kontrolira koliko debeli znakovi trebaju biti prikazano) i 3 upravljačka zatiča (RS & RW & E)
U krugu možete primijetiti da sam uzeo samo dvije upravljačke igle. To daje fleksibilnost boljeg razumijevanja, kontrastni bit i READ / WRITE se ne koriste često pa se mogu kratko spojiti na masu. Ovo LCD postavlja u najveći kontrast i način čitanja. Samo trebamo kontrolirati ENABLE i RS igle da bi u skladu s tim slali znakove i podatke.
Priključci koji se rade za LCD prikazani su u nastavku:
PIN1 ili VSS na masu
PIN2 ili VDD ili VCC do + 5v snage
PIN3 ili VEE na zemlju (daje maksimalni kontrast najbolji za početnike)
PIN4 ili RS (registracijski odabir) na PD6 od uC
PIN5 ili RW (čitanje / pisanje) na masu (stavlja LCD u način čitanja olakšava komunikaciju za korisnika)
PIN6 ili E (Omogući) na PD5 od uC
PIN7 ili D0 do PB0 od uC
PIN8 ili D1 do PB1 od uC
PIN9 ili D2 do PB2 od uC
PIN10 ili D3 do PB3 od uC
PIN11 ili D4 do PB4 od uC
PIN12 ili D5 do PB5 od uC
PIN13 ili D6 do PB6 od uC
PIN14 ili D7 do PB7 od uC
U krugu možete vidjeti da smo koristili 8-bitnu komunikaciju (D0-D7), međutim to nije obvezno, možemo koristiti 4-bitnu komunikaciju (D4-D7), ali s 4-bitnim komunikacijskim programom postaje pomalo složen. Dakle, kao što je prikazano u gornjoj tablici, spajamo 10 pinova LCD-a na kontroler u kojem su 8 pinova podatkovne i 2 pina za kontrolu.
Prekidač jedan omogućuje omogućavanje prilagodbe značajke između alarma i vremena. Ako je igla niska, vrijeme alarma možemo prilagoditi pritiskom na tipke. Ako su njegovi visoki gumbi za podešavanje samo VRIJEME. Ovdje su prisutna ČETIRI gumba, prvi je za povećanje MINUTA u alarmu ili vremenu. Drugo je za smanjenje MINUTA u alarmu ili vremenu. Treće je povećanje SATA u alarmu ili vremenu. ČETVRTO je za smanjenje SATI u alarmu ili vremenu.
Ovdje prisutni kondenzatori služe za poništavanje efekta odbijanja gumba. Ako se uklone, kontroler može brojati više od svakog puta kad se pritisne tipka. Otpornici spojeni na pinove služe za ograničavanje struje, kad se pritisne tipka za spuštanje klina na zemlju.
Kad god se pritisne tipka, odgovarajući klin regulatora se spušta na zemlju i time kontroler prepoznaje da je pritisnuta određena tipka i poduzima se odgovarajuća radnja.
Prije svega, sat koji ovdje odaberemo je 11059200 Hz, dijeljenjem s 1024 daje 10800. Dakle, za svaku sekundu dobijemo 10800 impulsa. Dakle, pokrenut ćemo brojač s 1024 prescalera da bismo dobili brojač na 10800 Hz. Drugo, mi ćemo koristiti CTC (Clear Timer Counter) način ATMEGA. Postojat će 16-bitni registar u kojem možemo pohraniti vrijednost (usporediti vrijednost), kada brojač računa do vrijednosti usporedbe, za koju je postavljen prekid.
Postavit ćemo vrijednost usporedbe na 10800, tako da ćemo u osnovi imati ISR (Interrupt Service Rutine za svaku usporedbu) za svaku sekundu. Dakle, iskoristit ćemo ovu pravovremenu rutinu kako bismo dobili sat koji nam je trebao.

SMEĐA (WGM10-WGM13): Ovi bitovi služe za odabir načina rada za tajmer.

Sada, budući da želimo način CTC s usporednom vrijednošću u bajtu OCR1A, samo moramo postaviti WGM12 na jedan, preostali su lijevi jer su prema zadanim postavkama nula.
CRVENA (CS10, CS11, CS12): Ova tri bita služe za odabir predskalara i tako dobivanje odgovarajućeg brojača sata.

Budući da želimo 1024 kao predkaliranje, moramo postaviti i CS12 i CS10.
Sada postoji još jedan registar koji bismo trebali razmotriti:

ZELENO (OCIE1A): Ovaj bit mora biti postavljen za dobivanje prekida na usporednom podudaranju između vrijednosti brojača i vrijednosti OCR1A (10800) koje smo postavili.

Vrijednost OCR1A (vrijednost za usporedbu brojača), upisana je u gornji registar.
Objašnjenje programiranja
Rad budilice objašnjen je korak po korak u donjem kodu:
#include // zaglavlje kako bi se omogućila kontrola protoka podataka preko pinova #define F_CPU 1000000 // kazivanje priključene kristalne frekvencije #include
