V tomto projekte navrhneme jednoduchý budík využívajúci časovače ATMEGA32. Mikrokontrolér ATmega32A má 16-bitový časovač a my ho použijeme na počítanie sekúnd a vývoj digitálnych hodín.
Všetky digitálne hodiny majú vo vnútri kryštál, ktorý je srdcom hodín. Tento kryštál je prítomný nielen v hodinách, ale aj vo všetkých výpočtových systémoch v reálnom čase. Tento kryštál generuje hodinové impulzy, ktoré sú potrebné na výpočty časovania. Aj keď existuje niekoľko ďalších spôsobov, ako získať hodinové impulzy, ale pre presnosť a vyššiu frekvenciu sa najviac uprednostňujú hodiny založené na kryštáloch. Chystáme sa pripojiť kryštál k ATMEGA32, aby sme dosiahli presné hodiny.
Súčasti sú povinné
Hardvér: mikrokontrolér ATmega32, kryštál 11,0592 MHz, kondenzátor 22pF (2 kusy), napájací zdroj (5v), programátor AVR-ISP, JHD_162ALCD (16x2 LCD), kondenzátor 100uF (pripojený cez napájací zdroj), tlačidlá (štyri kusy), rezistor 10KΩ (šesť kusov), kapacita 100nF (štyri kusy), tri pinové spínače (2 kusy), tranzistor 2N2222, bzučiak, rezistor 200Ω.
Softvér: Atmel studio 6.1, progisp alebo flash magic.
Schéma zapojenia a pracovné vysvetlenie
Pre presné načasovanie sme pripojili kryštál 11,0592 MHz pre hodiny. Teraz pre deaktiváciu interných hodín ATMEGA musíme zmeniť jej NÍZKE POISTKY. Pamätajte, že sa nedotýkame vysokých poistkových bitov, takže komunikácia JTAG by bola stále povolená.
Aby sme ATMEGA povedali, aby deaktivovala interné hodiny a pracovala na externých, musíme nastaviť:
NÍZKE POUŽITIE BYTE = 0xFF alebo 0b11111111.
V obvode PORTB ATMEGA32 je pripojený k dátovému portu LCD. Tu by ste si mali pamätať, že chcete deaktivovať komunikáciu JTAG v PORTC ATMEGA zmenou bajtov vysokej poistky, ak chcete použiť PORTC ako normálny komunikačný port. Na 16x2 LCD je 16 pinov, ak je čierne svetlo, ak nie je podsvietenie, bude 14 pinov. Jeden môže napájať alebo nechať kolíky podsvietenia. Teraz v 14 kolíkoch je 8 dátových kolíkov (7-14 alebo D0-D7), 2 kolíky napájacieho zdroja (1 a 2 alebo VSS & VDD alebo gnd & + 5v), 3. kolík na kontrolu kontrastu (VEE - určuje, aké silné by mali byť znaky) (zobrazené na obrázku) a 3 ovládacie kolíky (RS & RW & E)
V obvode môžete pozorovať, že som vzal iba dva ovládacie piny. To dáva flexibilitu lepšieho porozumenia, kontrastný bit a READ / WRITE sa často nepoužívajú, takže môžu byť skratované na zem. Toto nastavuje LCD do najvyššieho kontrastu a režimu čítania. Potrebujeme iba ovládať piny ENABLE a RS, aby sme mohli zodpovedajúcim spôsobom odosielať znaky a údaje.
Pripojenia, ktoré sa vykonávajú pre LCD, sú uvedené nižšie:
PIN1 alebo VSS na zem
PIN2 alebo VDD alebo VCC na napájanie + 5 V.
PIN3 alebo VEE na zem (poskytuje maximálny kontrast najlepšie pre začiatočníkov)
PIN4 alebo RS (výber registra) na PD6 uC
PIN5 alebo RW (čítanie / zápis) na zem (prepnutie LCD do režimu čítania uľahčuje komunikáciu pre používateľa)
PIN6 alebo E (povoliť) na PD5 uC
PIN7 alebo D0 až PB0 uC
PIN8 alebo D1 až PB1 uC
PIN9 alebo D2 až PB2 uC
PIN10 alebo D3 až PB3 uC
PIN11 alebo D4 až PB4 uC
PIN12 alebo D5 až PB5 uC
PIN13 alebo D6 až PB6 uC
PIN14 alebo D7 až PB7 uC
V obvode, ktorý vidíte, sme použili 8-bitovú komunikáciu (D0-D7), nie je to však povinné, môžeme použiť 4-bitovú komunikáciu (D4-D7), ale so 4-bitovým komunikačným programom sa stáva trochu zložitejšou. Takže ako je uvedené v tabuľke vyššie, pripájame 10 pinov LCD k radiču, v ktorých 8 pinov sú dátové piny a 2 piny pre riadenie.
Prepínač 1 slúži na povolenie funkcie nastavenia medzi budíkom a časom. Ak je špendlík nízky, môžeme nastaviť čas budenia stlačením tlačidiel. Ak sú jeho vysoké tlačidlá na nastavenie, stačí nastaviť ČAS. K dispozícii sú tu ŠTYRI tlačidlá, prvé je určené na zvýšenie MINÚT v čase alarmu alebo času. Druhý je pre zníženie o MINUTES v alarme alebo čase. Tretie je o prírastok HODINY v čase alarmu alebo času. ŠTVRTÝ je na zníženie o HOURS v budíku alebo v čase.
Kondenzátory, ktoré sú tu prítomné, slúžia na potlačenie efektu odskakovania tlačidiel. Ak sú odstránené, ovládač môže počítať viac ako jedno pri každom stlačení tlačidla. Rezistory pripojené k pinom slúžia na obmedzenie prúdu, keď je stlačené tlačidlo na stiahnutie kolíka k zemi.
Kedykoľvek je stlačené tlačidlo, príslušný kolík ovládača sa stiahne na zem, a tak ovládač rozpozná, že je stlačené určité tlačidlo a sú podniknuté príslušné kroky.
Po prvé, hodiny, ktoré tu vyberieme, sú 11059200 Hz, delením 1024 dá 10800. Za každú sekundu teda dostaneme 10 000 impulzov. Začneme teda počítadlom s predvoľbou 1024, aby sme dostali hodiny počítadla na 10 800 Hz. Ako druhé použijeme režim CTC (Clear Timer Counter) systému ATMEGA. K dispozícii bude 16-bitový register, do ktorého môžeme uložiť hodnotu (porovnávať hodnotu), keď počítadlo počíta do porovnávacej hodnoty, ktorú má generovať prerušenie.
Nastavíme porovnávaciu hodnotu na 10800, takže v zásade budeme mať každú sekundu ISR (Interrupt Service Routine on every comparison). Takže použijeme túto včasnú rutinu na získanie hodín, ktoré sme potrebovali.
BROWN (WGM10-WGM13): Tieto bity slúžia na výber režimu činnosti časovača.
Teraz, keď chceme režim CTC s porovnávacou hodnotou v bajte OCR1A, stačí nastaviť WGM12 na jednu, zvyšné zostávajú predvolené ako nulové.
ČERVENÁ (CS10, CS11, CS12): Tieto tri bity slúžia na výber predskaláru a získanie primeraného počítadla hodín.
Pretože chceme 1024 ako predcaláciu, musíme nastaviť CS12 aj CS10.
Teraz existuje ďalší register, ktorý by sme mali zvážiť:
ZELENÁ (OCIE1A): Tento bit musí byť nastavený na získanie prerušenia pri porovnávaní zhody medzi hodnotou počítadla a hodnotou OCR1A (10800), ktorú sme nastavili.
Hodnota OCR1A (hodnota porovnania počítadla) je zapísaná do vyššie uvedeného registra.
Vysvetlenie programovania
Fungovanie budíka je vysvetlené krok za krokom v nasledujúcom kóde:
#include // hlavička na povolenie riadenia toku dát cez piny # define F_CPU 1000000 // pripojená informácia o kryštalickej frekvencii radiča #include