Suunnittelemme tässä projektissa yksinkertaisen herätyskellon ATMEGA32-ajastimilla. ATmega32A-mikrokontrollerissa on 16-bittinen ajastin, ja käytämme tätä ajastinta sekuntien laskemiseen ja digitaalisen kellon kehittämiseen.
Kaikissa digitaalisissa kelloissa on kristalli, joka on kellon sydän. Tämä kide ei ole vain kellossa, vaan läsnä kaikissa laskevissa reaaliaikaisissa järjestelmissä. Tämä kide tuottaa kellopulsseja, joita tarvitaan ajoituslaskelmiin. Vaikka on olemassa joitain muita tapoja saada kellopulsseja, mutta tarkkuuden ja korkeamman taajuuden vuoksi mieluummin kristallipohjainen kello. Yhdistämme kiteen ATMEGA32: een tarkan kellon saamiseksi.
Tarvittavat komponentit
Laitteisto: ATmega32-mikrokontrolleri, 11,0592 MHz: n kristalli, 22pF-kondensaattori (2 kpl), virtalähde (5v), AVR-ISP-OHJELMOINTI, JHD_162ALCD (16x2 LCD), 100uF-kondensaattori (kytketty virtalähteen yli), painikkeet (neljä kappaletta), 10KΩ vastus (kuusi kappaletta), 100 nF: n kapasiteetti (neljä kappaletta), 3-napainen kytkin (2 kpl), 2N2222-transistori, summeri, 200 Ω vastus.
Ohjelmisto: Atmel studio 6.1, progisp tai flash magic.
Piirikaavio ja selitys työstä
Tarkkaa ajoitusta varten olemme liittäneet 11,0592 MHz: n kiteen kelloa varten. ATMEGA: n sisäisen kellon poistamiseksi käytöstä meidän on muutettava sen LOW FUSE BITIT. Muista, ettemme koske korkean sulakkeen bitteihin, joten JTAG-tiedonsiirto olisi edelleen käytössä.
Asettaaksesi ATMEGA: n poistamaan sisäinen kello käytöstä ja toimimaan ulkoisen kanssa, meidän on asetettava:
MATALA KÄYTTÖ BYTE = 0xFF tai 0b11111111.
Piirissä ATMEGA32: n PORTB on kytketty dataportin LCD-näyttöön. Tässä on syytä muistaa poistaa JTAG-tiedonsiirto ATMEGA: n PORTC: sta vaihtamalla korkean sulakkeen tavuja, jos halutaan käyttää PORTC: ta normaalina tiedonsiirtoporttina. 16x2 LCD -näytössä on kaikkiaan 16 nastaa, jos on musta valo, jos taustavaloa ei ole, 14 nastaa. Voidaan kytkeä päälle tai jättää taustavalon nastat. Nyt 14 nastat on 8 data nastat (7-14 tai D0-D7), 2 virtalähde nastat (1 & 2 tai VSS ja VDD tai GND ja + 5V), 3 rd pin kontrastin säätö (VEE-ohjaimet kuinka paksu merkkien pitäisi olla kuvassa) ja 3 ohjaintappia (RS & RW & E)
Piirissä voit havaita, että olen ottanut vain kaksi ohjaintappia. Tämä antaa ymmärrettävyyden joustavuuden, kontrastibittiä ja LUKU / KIRJOITA ei käytetä usein, jotta ne voidaan oikosuljettaa. Tämä asettaa LCD-näytön suurimmalle kontrastille ja lukutilaan. Meidän on vain hallittava ENABLE- ja RS-nastoja merkkien ja tietojen lähettämiseksi vastaavasti.
LCD-liitännät ovat alla:
PIN1 tai VSS maahan
PIN2- tai VDD- tai VCC-jännite + 5 V: n tehoon
PIN3 tai VEE maahan (antaa parhaan kontrastin aloittelijalle)
PIN4 tai RS (Rekisterivalinta) - PD6 uC: lle
PIN5 tai RW (luku / kirjoitus) maahan (asettaa LCD-näytön lukutilaan helpottamaan viestintää käyttäjälle)
PIN6 tai E (käytössä) - u5: n PD5
UC: n PIN7 tai D0 - PB0
U8: n PIN8 tai D1 - PB1
U9: n PIN9 tai D2 - PB2
U10: n PIN10 tai D3 - PB3
UC: n PIN11 tai D4 - PB4
U12: n PIN12 tai D5 - PB5
PIN13 tai D6 - PB6 uC: stä
UC: n PIN14 tai D7 - PB7
Piirissä näet, että olemme käyttäneet 8-bittistä tiedonsiirtoa (D0-D7), mutta tämä ei ole pakollista, voimme käyttää 4-bittistä tiedonsiirtoa (D4-D7), mutta 4-bittisellä viestintäohjelmalla tulee hieman monimutkainen. Joten, kuten yllä olevassa taulukossa on esitetty, yhdistämme 10 LCD-nastaa ohjaimeen, jossa 8 nastaa on datanastoja ja 2 nastaa ohjausta varten.
Kytkin yksi mahdollistaa säätötoiminnon hälytyksen ja ajan välillä. Jos tappi on alhaalla, voimme säätää hälytysaikaa painamalla painikkeita. Jos sen korkeilla painikkeilla on tarkoitus säätää vain TIME. Tässä on NELJÄ painiketta, ensin MINUTES lisäykseksi hälytyksessä tai ajassa. Toinen on vähennys MINUTES hälytyksessä tai ajassa. Kolmas on HOUR: n lisäys hälytyksessä tai ajassa. NELJÄS tarkoittaa HOURS-arvon vähentämistä hälytyksessä tai ajassa.
Tässä olevat kondensaattorit on tarkoitettu painikkeiden pomppimisvaikutuksen mitätöimiseen. Jos ne poistetaan, ohjain saattaa laskea useamman kuin yhden joka kerta, kun painiketta painetaan. Nastoja varten kytketyt vastukset on tarkoitettu virran rajoittamiseen, kun painiketta painetaan vetämään tappi maahan.
Aina kun painiketta painetaan, vastaava ohjaimen tappi vedetään maahan ja siten ohjain tunnistaa, että tiettyä painiketta painetaan ja vastaava toiminta suoritetaan.
Ensinnäkin täällä valitsemamme kello on 11059200 Hz, jakamalla se 1024: llä saadaan 10800. Joten saamme jokaista sekuntia kohti 10800 pulssia. Joten aiomme aloittaa laskurin 1024 esilaskurilla saadaksemme laskurin kellon 10800 Hz. Toiseksi aiomme käyttää ATMEGA: n CTC (Clear Timer Counter) -tilaa. Tulee olemaan 16-bittinen rekisteri, johon voimme tallentaa arvon (vertaa arvoa), kun laskuri laskee vertailuarvoon, jonka keskeytys asetetaan tuottamaan.
Aiomme asettaa vertailuarvoksi 10800, joten periaatteessa meillä on ISR (Interrupt Service Routine joka vertailussa) joka sekunti. Joten aiomme käyttää tätä ajankohtaista rutiinia saadaksemme tarvitsemamme kellon.
RUSKEA (WGM10-WGM13): Nämä bitit ovat ajastintoiminnon valitsemista varten.
Koska haluamme nyt CTC-tilan vertailevalla arvolla OCR1A-tavussa, meidän on vain asetettava WGM12 yhdeksi, jäljelle jäävät, koska ne ovat oletusarvoisesti nolla.
PUNAINEN (CS10, CS11, CS12): Nämä kolme bittiä on tarkoitettu esiakalaarin valitsemiseksi ja sopivan laskurin saamiseksi.
Koska haluamme 1024: n esiasteiksi, meidän on asetettava sekä CS12 että CS10.
Nyt on toinen rekisteri, jota meidän tulisi harkita:
VIHREÄ (OCIE1A): Tämä bitti on asetettava, jotta saadaan keskeytys vertailulaskurin ja asettamamme OCR1A-arvon (10800) välisessä vertailussa.
OCR1A-arvo (laskurin vertailuarvo), on kirjoitettu yllä olevaan rekisteriin.
Ohjelmoinnin selitys
Herätyskellon toiminta selitetään vaihe vaiheelta alla olevassa koodissa:
#include // otsikko tiedonsiirron mahdollistamiseksi nastoihin #define F_CPU 1000000 // kertovan ohjaimen kide taajuus liitetty #include