V tomto projektu navrhneme jednoduchý budík využívající časovače ATMEGA32. Mikrokontrolér ATmega32A má 16bitový časovač a my budeme tento časovač používat k počítání sekund a vývoji digitálních hodin.
Všechny digitální hodiny mají uvnitř krystal, který je srdcem hodin. Tento krystal je přítomen nejen v hodinách, ale ve všech výpočetních systémech v reálném čase. Tento krystal generuje hodinové impulsy, které jsou potřebné pro výpočty časování. I když existuje několik dalších způsobů, jak získat hodinové impulsy, ale pro přesnost a vyšší frekvenci nejvíce upřednostňují hodiny založené na krystalu. Chystáme se připojit krystal k ATMEGA32, abychom získali přesné hodiny.
Požadované komponenty
Hardware: mikrokontrolér ATmega32, krystal 11,0592 MHz, kondenzátor 22pF (2 kusy), napájecí zdroj (5v), programátor AVR-ISP, JHD_162ALCD (16x2 LCD), kondenzátor 100uF (připojený přes napájecí zdroj), tlačítka (čtyři kusy), rezistor 10KΩ (šest kusů), kapacita 100 nF (čtyři kusy), tři pinové spínače (2 kusy), tranzistor 2N2222, bzučák, rezistor 200 Ω.
Software: Atmel studio 6.1, progisp nebo flash magic.
Schéma zapojení a pracovní vysvětlení
Pro přesné načasování jsme připojili krystal 11,0592 MHz pro hodiny. Nyní pro deaktivaci interních hodin ATMEGA musíme změnit jeho LOW FUSE BITS. Pamatujte, že se nedotýkáme vysokých pojistek, takže komunikace JTAG bude stále povolena.
Abychom ATMEGA řekli, aby deaktivovala interní hodiny a pracovala na externích, musíme nastavit:
LOW USE BYTE = 0xFF nebo 0b11111111.
V obvodu PORTB ATMEGA32 je připojen k datovému portu LCD. Zde je třeba pamatovat na zakázání komunikace JTAG v PORTC ATMEGA změnou bajtů vysoké pojistky, pokud chcete použít PORTC jako normální komunikační port. V 16x2 LCD je 16 kolíků, pokud je černé světlo, pokud není podsvícení, bude 14 kolíků. Jeden může napájet nebo nechat kolíky podsvícení. Nyní ve 14 kolíky jsou 8 datových kolíky (7-14 nebo D0-D7), 2 napájecí kolíky elektrárny (1 & 2 nebo VSS a VDD nebo GND a + 5 V), 3 rd kolík pro řízení kontrastu (VEE-určuje, jak silná znaky musí být a 3 ovládací piny (RS & RW & E)
V okruhu můžete pozorovat, že jsem vzal pouze dva kontrolní piny. To dává flexibilitu lepšího porozumění, kontrastní bit a READ / WRITE se často nepoužívají, takže mohou být zkratovány na zem. LCD se tak dostane do režimu nejvyššího kontrastu a čtení. Abychom mohli odpovídajícím způsobem odesílat znaky a data, musíme pouze ovládat piny ENABLE a RS.
Připojení, která se provádí pro LCD, jsou uvedena níže:
PIN1 nebo VSS k zemi
PIN2 nebo VDD nebo VCC na + 5V napájení
PIN3 nebo VEE k zemi (poskytuje maximální kontrast nejlepší pro začátečníky)
PIN4 nebo RS (výběr registru) na PD6 uC
PIN5 nebo RW (čtení / zápis) na zem (přepnutí LCD do režimu čtení usnadňuje uživateli komunikaci)
PIN6 nebo E (povolit) na PD5 uC
PIN7 nebo D0 až PB0 uC
PIN8 nebo D1 až PB1 uC
PIN9 nebo D2 až PB2 uC
PIN10 nebo D3 až PB3 uC
PIN11 nebo D4 až PB4 uC
PIN12 nebo D5 až PB5 uC
PIN13 nebo D6 až PB6 uC
PIN14 nebo D7 až PB7 uC
V obvodu, který vidíte, jsme použili 8bitovou komunikaci (D0-D7), ale to není povinné, můžeme použít 4bitovou komunikaci (D4-D7), ale se 4bitovým komunikačním programem se stává trochu složitější. Jak je znázorněno ve výše uvedené tabulce, připojujeme 10 pinů LCD k řadiči, ve kterém 8 pinů jsou datové piny a 2 piny pro ovládání.
Přepínač 1 slouží k povolení funkce nastavení mezi budíkem a časem. Pokud je kolík nízký, můžeme nastavit čas alarmu stisknutím tlačítek. Pokud jsou jeho vysoká tlačítka pro nastavení právě TIME. K dispozici jsou zde ČTYŘI tlačítka, první je pro zvýšení MINUT v alarmu nebo času. Druhý je pro snížení MINUT v alarmu nebo čase. Třetí je pro zvýšení HOUR v alarmu nebo času. ČTVRTÝ je pro snížení hodin v budíku nebo v čase.
Kondenzátory, které jsou zde k dispozici, slouží ke zrušení odrazového efektu tlačítek. Pokud jsou odstraněny, řadič může počítat více než jeden při každém stisknutí tlačítka. Rezistory připojené pro kolíky slouží k omezení proudu, když je stisknuto tlačítko, aby se kolík stáhl na zem.
Kdykoli je stisknuto tlačítko, odpovídající kolík ovladače se stáhne dolů na zem, a tak ovladač rozpozná, že je stisknuto určité tlačítko a je provedena příslušná akce.
Za prvé, hodiny, které zde vybereme, jsou 11059200 Hz, vydělením 1024 dává 10800. Takže za každou sekundu dostaneme 10800 pulsů. Budeme tedy spouštět počitadlo s předvoličem 1024, abychom dostali hodiny počitadla na 10800 Hz. Zadruhé použijeme režim CTC (Clear Timer Counter) v ATMEGA. Bude 16bitový registr, kde můžeme uložit hodnotu (porovnat hodnotu), když počítadlo počítá do srovnávací hodnoty, kterou má generovat přerušení.
Chystáme se nastavit srovnávací hodnotu na 10800, takže v zásadě budeme mít každou sekundu ISR (Interrupt Service Routine on every comparison). Takže použijeme tuto včasnou rutinu k získání hodin, které jsme potřebovali.
BROWN (WGM10-WGM13): Tyto bity slouží k výběru provozního režimu časovače.
Nyní, protože chceme režim CTC s srovnávací hodnotou v bajtu OCR1A, musíme pouze nastavit WGM12 na jednu, zbývající jsou ponechány, protože jsou ve výchozím nastavení nulové.
ČERVENÁ (CS10, CS11, CS12): Tyto tři bity slouží k výběru prescalaru a získání vhodných počítadel.
Protože chceme 1024 jako přednastavení, musíme nastavit jak CS12, tak CS10.
Nyní existuje další registr, který bychom měli zvážit:
ZELENÁ (OCIE1A): Tento bit musí být nastaven pro získání přerušení při porovnávání shody mezi hodnotou čítače a hodnotou OCR1A (10800), kterou jsme nastavili.
Hodnota OCR1A (hodnota porovnání čítače), je zapsána do výše uvedeného registru.
Vysvětlení programování
Fungování budíku je vysvětleno krok za krokem v níže uvedeném kódu:
#include // header to enable data flow control over pins #define F_CPU 1000000 // telling controller Crystal frequency attached #include