Šajā projektā mēs izstrādāsim vienkāršu modinātāju, izmantojot ATMEGA32 taimerus. ATmega32A mikrokontrollerim ir 16 bitu taimeris, un mēs izmantosim šo taimeri, lai skaitītu sekundes un izstrādātu digitālo pulksteni.
Visu digitālo pulksteņu iekšpusē ir kristāls, kas ir pulksteņa sirds. Šis kristāls atrodas ne tikai pulkstenī, bet arī visās skaitļošanas reāllaika sistēmās. Šis kristāls ģenerē pulksteņa impulsus, kas nepieciešami laika aprēķiniem. Lai gan ir daži citi veidi, kā iegūt pulksteņa impulsus, bet precizitātes un augstākas frekvences dēļ lielākā daļa dod priekšroku kristāla pulkstenim. Lai iegūtu precīzu pulksteni, mēs savienosim kristālu ar ATMEGA32.
Nepieciešamās sastāvdaļas
Aparatūra: mikrokontrolleris ATmega32, 11.0592MHz kristāls, 22pF kondensators (2 gab.), Barošanas avots (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), 100uF kondensators (savienots pāri strāvas padevei), pogas (četras daļas), 10KΩ rezistors (seši gabali), 100nF kapacitātes r (četri gabali), trīs kontaktu slēdži (2 gab.), 2N2222 tranzistors, skaņas signāls, 200Ω rezistors.
Programmatūra: Atmel studio 6.1, progisp vai flash magic.
Shēmas shēma un darba skaidrojums
Lai iegūtu precīzu laiku, pulkstenim esam pievienojuši 11,0592 MHz kristālu. Tagad, lai atspējotu ATMEGA iekšējo pulksteni, mums ir jāmaina tā LOW FUSE BITS. Atcerieties, ka mēs nepieskaramies augstajiem drošinātāju bitiem, tāpēc JTAG sakari joprojām būtu iespējoti.
Lai liktu ATMEGA atspējot iekšējo pulksteni un strādāt pie ārējā, mums jāiestata:
ZEMA LIETOŠANA BYTE = 0xFF vai 0b11111111.
ATMEGA32 shēmā PORTB ir pievienots datu porta LCD. Šeit jāatceras atspējot JTAG sakarus ATMEGA PORTC, mainot augsto drošinātāju baitus, ja vēlaties PORTC izmantot kā parastu sakaru portu. 16x2 LCD ekrānā ir 16 tapas, ja ir melna gaisma, ja nav aizmugures gaismas, būs 14 tapas. Var darbināt vai atstāt aizmugurējās gaismas tapas. Tagad 14 tapas ir 8 datu tapas (7-14 vai D0-D7), 2 el piegādes tapas (1 un 2 vai VSS un VDD vai GND & + 5v), 3 rd pin kontrasta kontrole (Vee-kontrolē, cik biezu rakstzīmēm jābūt attēlā) un 3 vadības tapas (RS & RW & E)
Ķēdē jūs varat novērot, ka esmu paņēmis tikai divus vadības tapas. Tas nodrošina elastīgāku izpratni, kontrasta bits un LASĪT / RAKSTĪT netiek bieži izmantoti, lai tos varētu saīsināt. Tas nodrošina LCD kontrasta un lasīšanas režīmu. Mums vienkārši jākontrolē ENABLE un RS tapas, lai atbilstoši nosūtītu rakstzīmes un datus.
LCD savienojumi ir izveidoti zemāk:
PIN1 vai VSS uz zemi
PIN2 vai VDD vai VCC līdz + 5v jaudai
PIN3 vai VEE uz zemes (iesācējam vislabāk nodrošina maksimālu kontrastu)
PIN4 vai RS (Reģistrēt atlasi) līdz uC PD6
PIN5 vai RW (lasīšana / rakstīšana) uz zemi (LCD nodošana lasīšanas režīmā atvieglo saziņu lietotājam)
PIN6 vai E (iespējot) līdz PD5 no uC
UC PIN7 vai D0 līdz PB0
UC PIN8 vai D1 līdz PB1
U9 PIN9 vai D2 līdz PB2
U10 PIN10 vai D3 līdz PB3
UC PIN11 vai D4 līdz PB4
U12 PIN12 vai D5 līdz PB5
UC PIN13 vai D6 līdz PB6
U14 PIN14 vai D7 līdz PB7
Shēmā jūs varat redzēt, ka esam izmantojuši 8 bitu sakarus (D0-D7), taču tas nav obligāti, mēs varam izmantot 4 bitu sakarus (D4-D7), bet ar 4 bitu sakaru programma kļūst mazliet sarežģīta. Tātad, kā parādīts iepriekšējā tabulā, mēs savienojam 10 LCD tapas ar kontrolieri, kurā 8 tapas ir datu tapas un 2 tapas kontrolei.
Slēdzis viens ir paredzēts, lai iespējotu regulēšanas funkciju starp trauksmi un laiku. Ja tapa ir zema, mēs varam pielāgot trauksmes laiku, nospiežot pogas. Ja tā augstās pogas ir paredzētas tikai TIME pielāgošanai. Šeit ir ČETRAS pogas. Pirmkārt, tas ir paredzēts MINUTES solim pēc trauksmes vai laika. Otrais ir samazinājums MINUTES trauksmē vai laikā. Trešais ir par HOUR pieaugumu trauksmes signālā vai laikā. CETURTĀ ir domāta HOURS samazināšanai trauksmes vai laika režīmā.
Šeit esošie kondensatori ir paredzēti pogu atlēcošās iedarbības atcelšanai. Ja tie tiek noņemti, kontrolieris katru reizi, nospiežot pogu, var saskaitīt vairāk nekā vienu. Piespraudes savienotie rezistori ir paredzēti strāvas ierobežošanai, kad tiek nospiesta poga, lai tapu nolaistu zemē.
Ikreiz, kad tiek nospiesta poga, atbilstošais kontrollera kontakts tiek novilkts uz zemes, un tādējādi kontrolieris atpazīst, ka ir nospiesta noteikta poga un tiek veikta atbilstoša darbība.
Pirmkārt, pulkstenis, kuru mēs šeit izvēlamies, ir 11059200 Hz, dalot to ar 1024, iegūst 10800. Tātad par katru sekundi mēs saņemam 10800 impulsus. Tātad mēs sāksim skaitītāju ar 1024 prescaler, lai skaitītāja pulksteni iegūtu kā 10800 Hz. Otrkārt, mēs izmantosim ATMEGA režīmu CTC (Clear Timer Counter). Būs 16 bitu reģistrs, kurā mēs varēsim saglabāt vērtību (salīdzināt vērtību), kad skaitītājs skaitīs līdz salīdzināšanas vērtībai, kuru ģenerē pārtraukums.
Salīdzināšanas vērtību mēs iestatīsim uz 10800, tāpēc būtībā mums katrai sekundei būs ISR (Interrupt Service rutine katrā salīdzinājumā). Tāpēc mēs izmantosim šo savlaicīgo rutīnu, lai iegūtu vajadzīgo pulksteni.
BROWN (WGM10-WGM13): šie biti ir paredzēti taimera darbības režīma izvēlei.
Tā kā mēs vēlamies CTC režīmu ar salīdzināšanas vērtību OCR1A baitā, mums vienkārši jāiestata WGM12 uz vienu, atlikušie paliek, jo pēc noklusējuma tie ir nulle.
RED (CS10, CS11, CS12): Šie trīs biti ir paredzēti, lai izvēlētos preskalāru un tādējādi iegūtu atbilstošu skaitītāju.
Tā kā mēs vēlamies 1024 kā iepriekšēju mērogu, mums ir jāiestata gan CS12, gan CS10.
Tagad ir vēl viens reģistrs, kas mums jāapsver:
ZAĻŠ (OCIE1A): Šis bits ir jāiestata, lai iegūtu pārtraukumu, salīdzinot mūsu iestatīto skaitītāja vērtību un OCR1A vērtību (10800).
OCR1A vērtība (skaitītāja salīdzināšanas vērtība) ir ierakstīta iepriekš reģistrā.
Programmēšanas skaidrojums
Modinātāja darbība tiek paskaidrota soli pa solim zemāk esošajā kodā:
#include // header, lai iespējotu datu plūsmas kontroli pār tapām #define F_CPU 1000000 // pievienota kontroliera kristāla frekvence #include