En aquest projecte dissenyarem un senzill rellotge despertador amb temporitzadors ATMEGA32. El microcontrolador ATmega32A té un temporitzador de 16 bits i utilitzarem aquest temporitzador per comptar els segons i desenvolupar un rellotge digital.
Tots els rellotges digitals tenen un cristall a l'interior, que és el cor del rellotge. Aquest cristall no només està present al rellotge, sinó que també es troba en tots els sistemes informàtics en temps real. Aquest cristall genera polsos de rellotge, que són necessaris per als càlculs de temps. Tot i que hi ha altres maneres d'obtenir impulsos de rellotge, però per a la precisió i la freqüència més alta, la majoria prefereixen el rellotge basat en cristalls. Connectarem un cristall a ATMEGA32 per obtenir un rellotge precís.
Components necessaris
Maquinari: microcontrolador ATmega32, cristall 11,0592 MHz, condensador 22pF (2 peces), font d'alimentació (5 v), PROGRAMADOR AVR-ISP, JHD_162ALCD (LCD 16x2), condensador 100uF (connectat a través de la font d'alimentació), botons (quatre peces), resistència de 10 KΩ (sis peces), 100nF capacito r (quatre peces), interruptors de tres pins (2 peces), transistor 2N2222, timbre, resistència de 200Ω.
Programari: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuits i explicació de treball

Per a una sincronització precisa, hem connectat un cristall de 11,0592 MHz per al rellotge. Ara, per desactivar el rellotge intern d'ATMEGA, hem de canviar-ne els FUSIBLES BAIXOS. Recordeu que no toquem els bits de fusible elevats, de manera que la comunicació JTAG encara estaria habilitada.
Per dir a ATMEGA que desactivi el rellotge intern i que funcioni en extern, hem de configurar:
BYTE D'ÚS BAIX = 0xFF o 0b11111111.
Al circuit PORTB d'ATMEGA32 està connectat al port de dades LCD. Aquí s'ha de recordar desactivar la comunicació JTAG a PORTC d'ATMEGA canviant els bytes de fusibles elevats, si es vol utilitzar el PORTC com a port de comunicació normal. A la pantalla LCD de 16x2 hi ha 16 pins sobre tot si hi ha llum negra, si no hi ha llum de fons hi haurà 14 pins. Es pot alimentar o deixar els passadors de llum de fons. Ara en els 14 pins hi ha 8 pins de dades (7-14 o D0-D7), 2 clavilles d'alimentació d'alimentació (1 i 2 o VSS i VDD o GND i + 5V), 3 rd pin per al control de contrast (Vee-controla com de gruix dels caràcters han d'estar mostrats) i 3 pins de control (RS i RW & E)
Al circuit, podeu observar que només he pres dos pins de control. Això proporciona la flexibilitat d’una millor comprensió, el bit de contrast i READ / WRITE no s’utilitzen sovint, de manera que es poden reduir a terra. D’aquesta manera, la pantalla LCD té un contrast i un mode de lectura més alts. Només hem de controlar els pins ENABLE i RS per enviar caràcters i dades en conseqüència.
Les connexions que es fan per a LCD es donen a continuació:
PIN1 o VSS a terra
PIN2 o VDD o VCC a una potència de + 5v
PIN3 o VEE a terra (proporciona el màxim contrast possible per a principiants)
PIN4 o RS (Selecció de registre) a PD6 de uC
PIN5 o RW (lectura / escriptura) a terra (posa la pantalla LCD en mode lectura facilita la comunicació per a l'usuari)
PIN6 o E (Habilita) a PD5 de uC
PIN7 o D0 a PB0 de uC
PIN8 o D1 a PB1 de uC
PIN9 o D2 a PB2 de uC
PIN10 o D3 a PB3 de uC
PIN11 o D4 a PB4 de uC
PIN12 o D5 a PB5 de uC
PIN13 o D6 a PB6 de uC
PIN14 o D7 a PB7 de uC
Al circuit podeu veure que hem utilitzat la comunicació de 8 bits (D0-D7), però això no és obligatori, podem utilitzar la comunicació de 4 bits (D4-D7), però amb un programa de comunicació de 4 bits es torna una mica complex. Així, tal com es mostra a la taula anterior, estem connectant 10 pins de LCD al controlador en què 8 pins són pins de dades i 2 pins per al control.
El primer commutador permet activar la funció d’alarma i hora. Si el pin és baix, podem ajustar l’hora de l’alarma prement els botons. Si els seus botons alts són per ajustar només TIME. Hi ha QUATRE botons presents, el primer és per incrementar MINUTS en alarma o hora. El segon és per disminuir MINUTES en alarma o hora. El tercer és per incrementar HORA en alarma o hora. QUART és per disminuir HORES en alarma o hora.
Els condensadors presents aquí serveixen per anul·lar l’efecte de rebot dels botons. Si s'eliminen, el controlador pot comptar-ne més d'un cada vegada que es prem el botó. Les resistències connectades per als pins serveixen per limitar el corrent quan es prem el botó per tirar el pin cap a terra.
Sempre que es prem un botó, el pin corresponent del controlador es tira cap a terra i, per tant, el controlador reconeix que es prem cert botó i es prenen les mesures corresponents.
Primer de tot, el rellotge que escollim aquí és 11059200 Hz, dividint-lo per 1024 donem 10800. Així, per cada segon obtenim 10800 impulsos. Així que començarem un comptador amb 1024 prescaler per obtenir el comptador de 10800 Hz. En segon lloc, utilitzarem el mode CTC (Clear Timer Counter) d’ATMEGA. Hi haurà un registre de 16 bits on podrem emmagatzemar un valor (valor de comparació), quan el comptador compti fins al valor de comparació que es configura per generar una interrupció.
Establirem el valor de comparació a 10800, de manera que bàsicament tindrem un ISR (Interrupt Service Service Routine en cada comparació) per cada segon. Per tant, utilitzarem aquesta rutina oportuna per obtenir el rellotge que necessitàvem.

MARRÓ (WGM10-WGM13): aquests bits serveixen per seleccionar el mode de funcionament del temporitzador.

Ara, com que volem el mode CTC amb valor de comparació en bytes OCR1A, només hem d’establir WGM12 a un, quedant restants ja que són zero per defecte.
VERMELL (CS10, CS11, CS12): Aquests tres bits són per triar el prescalar i, per tant, obtenir un comptador de rellotge adequat.

Com que volem un 1024 com a prescaling, hem d’establir CS12 i CS10.
Ara hi ha un altre registre que hauríem de tenir en compte:

VERD (OCIE1A): aquest bit s'ha de configurar per obtenir una interrupció en comparar la coincidència entre el valor del comptador i el valor OCR1A (10800) que hem establert.

El valor OCR1A (valor de comparació de comptadors) s’escriu al registre superior.
Explicació de la programació
El funcionament del despertador s’explica pas a pas al següent codi:
#include // capçalera per habilitar el control de flux de dades sobre els pins #define F_CPU 1000000 // indicant la freqüència de cristall del controlador adjunta #include
