En este proyecto vamos a diseñar un Despertador simple usando temporizadores ATMEGA32. El microcontrolador ATmega32A tiene un temporizador de 16 bits, y usaremos ese temporizador para contar los segundos y desarrollar un reloj digital.
Todos los relojes digitales tienen un cristal dentro de ellos que es el corazón del reloj. Este cristal no solo está presente en el reloj sino que está presente en todos los sistemas informáticos de tiempo real. Este cristal genera pulsos de reloj, que se necesitan para los cálculos de tiempo. Aunque hay otras formas de obtener pulsos de reloj, pero para mayor precisión y frecuencia, la mayoría prefiere un reloj basado en cristal. Vamos a conectar un cristal a ATMEGA32 para obtener un reloj preciso.
Componentes requeridos
Hardware: microcontrolador ATmega32, cristal de 11.0592MHz, condensador de 22pF (2 piezas), fuente de alimentación (5v), PROGRAMADOR AVR-ISP, JHD_162ALCD (LCD de 16x2), condensador de 100uF (conectado a través de la fuente de alimentación), botones (cuatro piezas), resistencia de 10KΩ (seis piezas), condensador de 100nF (cuatro piezas), interruptores de tres pines (2 piezas), transistor 2N2222, zumbador, resistencia de 200Ω.
Software: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuito y explicación de trabajo
Para una sincronización precisa, hemos conectado un cristal de 11.0592MHz para el reloj. Ahora para deshabilitar el reloj interno de ATMEGA tenemos que cambiar sus BITS DE FUSIBLE BAJO. Recuerde que no estamos tocando los bits de fusible alto, por lo que la comunicación JTAG aún estaría habilitada.
Para decirle a ATMEGA que desactive el reloj interno y que trabaje en el externo, debemos configurar:
BYTE DE USO BAJO = 0xFF o 0b11111111.
En el circuito PORTB de ATMEGA32 está conectado al puerto de datos LCD. Aquí uno debe recordar deshabilitar la comunicación JTAG en PORTC de ATMEGA cambiando los bytes de fusible alto, si se quiere usar el PORTC como un puerto de comunicación normal. En LCD de 16x2 hay 16 pines en total si hay una luz negra, si no hay luz de fondo, habrá 14 pines. Uno puede encender o dejar los pines de luz de fondo. Ahora en los 14 pines hay 8 pines de datos (7-14 o D0-D7), 2 clavijas de alimentación de alimentación (1 y 2 o VSS y VDD o GND y + 5V), 3 rd pin para el control de contraste (Vee-controla cómo de espesor los caracteres deben estar mostrado) y 3 pines de control (RS & RW & E)
En el circuito, se puede observar que solo he sacado dos pines de control. Esto brinda la flexibilidad de una mejor comprensión, el bit de contraste y READ / WRITE no se usan con frecuencia, por lo que pueden cortocircuitarse a tierra. Esto coloca a la pantalla LCD en el modo de mayor contraste y lectura. Solo necesitamos controlar los pines ENABLE y RS para enviar caracteres y datos en consecuencia.
Las conexiones que se realizan para LCD se dan a continuación:
PIN1 o VSS a tierra
PIN2 o VDD o VCC a + 5v de potencia
PIN3 o VEE a tierra (ofrece el mejor contraste máximo para un principiante)
PIN4 o RS (Selección de registro) a PD6 de uC
PIN5 o RW (lectura / escritura) a tierra (pone la pantalla LCD en modo lectura facilita la comunicación para el usuario)
PIN6 o E (habilitado) 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
En el circuito puede ver que hemos usado comunicación de 8 bits (D0-D7) sin embargo, esto no es obligatorio, podemos usar comunicación de 4 bits (D4-D7) pero con la comunicación de 4 bits el programa se vuelve un poco complejo. Entonces, como se muestra en la tabla anterior, estamos conectando 10 pines de LCD al controlador en el que 8 pines son pines de datos y 2 pines para control.
El interruptor uno es para habilitar la función de ajuste entre alarma y hora. Si el pin está bajo, podemos ajustar la hora de la alarma presionando botones. Si sus botones altos son solo para ajustar el TIEMPO. Hay CUATRO botones presentes aquí, el primero es para incrementar MINUTOS en alarma o tiempo. El segundo es para disminuir MINUTOS en alarma o tiempo. El tercero es para el incremento de HORA en la alarma o la hora. CUARTO es para disminuir HORAS en alarma o tiempo.
Los condensadores presentes aquí son para anular el efecto de rebote de los botones. Si se quitan, el controlador puede contar más de uno cada vez que se presiona el botón. Las resistencias conectadas para pines son para limitar la corriente, cuando se presiona el botón para bajar el pin al suelo.
Cada vez que se presiona un botón, el pin correspondiente del controlador se baja al suelo y, por lo tanto, el controlador reconoce que se presiona cierto botón y se toma la acción correspondiente.
En primer lugar, el reloj que elegimos aquí es 11059200 Hz, dividiéndolo por 1024 da 10800. Entonces, por cada segundo obtenemos 10800 pulsos. Así que vamos a iniciar un contador con un prescaler de 1024 para obtener el reloj del contador como 10800 Hz. En segundo lugar, vamos a utilizar el modo CTC (Clear Timer Counter) de ATMEGA. Habrá un registro de 16 bits donde podemos almacenar un valor (valor de comparación), cuando el contador cuenta hasta el valor de comparación que una interrupción está configurada para generar.
Vamos a establecer el valor de comparación en 10800, así que básicamente tendremos un ISR (Rutina de servicio de interrupción en cada comparación) por cada segundo. Así que vamos a utilizar esta oportuna rutina para conseguir el reloj que necesitábamos.
MARRÓN (WGM10-WGM13): estos bits sirven para seleccionar el modo de funcionamiento del temporizador.
Ahora que queremos el modo CTC con el valor de comparación en el byte OCR1A, solo tenemos que configurar WGM12 en uno, los restantes se dejan como son cero por defecto.
ROJO (CS10, CS11, CS12): Estos tres bits son para elegir el prescalar y así obtener el reloj contador apropiado.
Como queremos un 1024 como preescalado, tenemos que configurar tanto CS12 como CS10.
Ahora hay otro registro que deberíamos considerar:
VERDE (OCIE1A): Este bit debe establecerse para obtener una interrupción en la comparación entre el valor del contador y el valor OCR1A (10800) que establecemos.
El valor OCR1A (valor de comparación del contador), se escribe en el registro anterior.
Explicación de programación
El funcionamiento del despertador se explica paso a paso en el siguiente código:
#include // encabezado para habilitar el control del flujo de datos sobre los pines #define F_CPU 1000000 // indicando la frecuencia del cristal del controlador adjunto #include