Basándonos en nuestro circuito "reloj calendario con pic 16F873A", hemos construido un reloj calendario más completo. Le hemos añadido una alarma y un sensor de temperatura.
El hardware del circuito es prácticamente el mismo que el utilizado para el "reloj calendario con pic 16F873A", la diferencia es que hemos añadido un pulsador, una resistencia, un trimmer y un transistor conectado a un buzzer que nos hará el pitido de la alarma.
El programa grabado en el pic se encarga de leer los segundos, minutos, horas, día, nombre del día, mes y año, mediante un bus bidireccional de "dos hilos" I2c, los datos del integrado DS1307.
Dicho integrado es un reloj en tiempo real (Real Time Clock) que se ocupa de contar el tiempo a partir del momento en que iniciemos dicho reloj.
En otras palabras, ajustamos la hora, minutos, segundos y la fecha, se la comunicamos al DS1307, lo iniciamos, y a partir de ahí el microcontrolador pic 16F873A lo que hace es leer los datos que el integrado DS1307 le va pasando cada segundo. Aquí tienes el datasheet del DS1307.
La batería conectada entre los terminales 3 y el negativo, es una pila modelo CR2032 que se encarga de que el reloj siga funcionando aunque se vaya la alimentación del circuito.
Dicha pila ha de ser de litio y la cambiaremos, por seguridad, cada cinco años aproximadamente para garantizar que el reloj siga funcionando si hay un corte de electricidad.
El DS1307 posee una alta estabilidad y precisión. La precisión viene dada por la calidad del cuarzo conectado a sus terminales 1 y 2. El integrado DS1307 tiene grabada en su memoria los años de este siglo hasta el 2100, incluyendo por supuesto los años bisiestos.
Los pulsadores S1, S2, son lo que usaremos para el ajuste del reloj. El ajuste es muy sencillo. La primera vez que damos tensión al circuito aparecerá la hora 00:00:00 y la fecha SA 1/1/2011.
Pulsamos durante un segundo aproximadamente el pulsador S1, marcado como "SET" en el esquema, al soltar, aparecerá la palabra "SET" y un cursor debajo de las horas para su ajuste, pulsamos S2 y podemos avanzar las horas.
Volvemos a pulsar S1 y el cursor se pondrá en los minutos, con S2 los ajustamos, y así hasta completar todos los ajustes. Después de ajustar el año, que es el último, al volver a pulsar S1 mandamos al DS1307 los datos de nuestro ajuste. Aparecerá en el display "OK", y a partir de ahí empezará a contar el reloj.
La función alarma que hemos añadido en éste montaje funciona así: Si pulsamos S3 nos saldrá una pantalla "ALARMA", donde podemos ajustar la hora de la alarma. Está pensado para que actúe como un despertador, es decir, podemos programar la alarma para el día siguiente. Una vez pulsado S3, un cursor se colocará debajo de las horas, pulsando S2 podremos ajustar la hora de la alarma.
Si volvemos a pulsar S3, el cursor se colocará debajo de los minutos y los ajustamos nuevamente con S2, otra vez con S3 el cursor se colocará debajo de las letras "OFF", con S2 podemos poner en "ON" o en "OFF" la alarma. Por último, otra presión en S3, y salimos de la pantalla de alarma grabando la misma en el microcontrolador, al salir leeremos "ALARMA OK".
Si hemos puesto la alarma en "ON" en la pantalla "reloj" aparecerá en el margen inferior derecho la letra "A" de alarma, lo que significa que tenemos la alarma activada.
Si la "ALARMA" está en "OFF", no aparecerá nada en el margen inferior derecho del display. Cuando el reloj llegue a la hora prefijada en la alarma, la salida en el pin 16 (RC5) del pic 16F873A se pondrá a nivel alto (+5V) a intervalos, y eso hará que el buzzer comience a sonar intermitentemente.
Tenemos conectado al pin 16 del pic una resistencia, y a ésta un transistor, que excitará un buzzer que funciona cuando ponemos en sus extremos un voltaje de 5 voltios (si no podéis conseguir uno de 5V, también vale uno de 6V). El trimmer de 1K sirve para reducir el volumen del buzzer, si resulta excesivo.
Para apagar la alarma, debemos pulsar S2 durante 1 segundo aproximadamente. Si apagamos la alarma, la "A" de alarma situada en el margen inferior derecho desaparecerá y la función alarma quedará en "OFF". Si no hemos pulsado S2 la alarma sonará durante 1 minuto y después se apagará, pero la alarma volverá a sonar al día siguiente a la misma hora y la "A" seguirá apareciendo en el margen inferior derecho.
Una funcionalidad importante que hemos añadido es el "recuerdo" de la hora y del estado de la alarma en el caso de un corte de corriente eléctrica. En el caso de que se apague el circuito por un corte eléctrico, la hora no se verá modificada cuando volvamos a dar tensión al circuito por la pila colocada entre el pin 3 del DS1307 y la masa del circuito, y la alarma tampoco se borrará, ya que está grabada en la memoria no volátil del pic 16F873A.
El esquema eléctrico es de lo más sencillo, se compone del microcontrolador con sus componentes asociados, un cuarzo de 4Mhz con sus condensadores de 22pF, resistencia de 10K entre el pin 1 (reset) y el positivo de la alimentación, tres pulsadores conectados a las entradas RC2, RC3, RC4, y el bus de datos de 4 bits para manejar el display.
La conexión del pic 16F873A con el circuito integrado DS1307 la realizamos mediante un bus bidireccional I2c con los puertos RC6 y RC7 del microcontrolador a los pines 5 y 6 del integrado DS1307. La visualización se realiza mediante un display lcd de 2x16. Cualquier display con un controlador Hitachi HD44780 o compatible, (datasheet del controlador Hitachi HD44780), será válido para la visualización.
El contraste del display Lcd (V0) se hace mediante la resistencia ajustable R2 de 10K, con sus extremos conectados, uno al polo positivo, y otro al polo negativo.
Nuestra pantalla tiene luz de fondo, o backlight, por lo que el led, o leds que la iluminan, están regulados por la resistencia variable de 470 ohmios, R3. La resistencia R4 tiene como misión proteger los leds para prevenir que asuman más corriente de la necesaria, lo que podría llevar a su destrucción.
Hemos completado nuestro despertador con un sensor de temperatura basado en la sonda digital DS18B20, si quieres más información sobre esta sonda, echa un vistazo a nuestro termómetro de interior y exterior con pic 16F9873A. Dicha sonda nos proporcionará la temperatura de la habitación en grados centígrados con una precisión de décimas de grado. La visualización de la temperatura la hemos colocado en la parte superior derecha del display lcd.
El circuito se alimenta con 5 voltios de corriente continua y su consumo no supera los 100mA con la luz del display lcd encendida, por lo que la fuente de alimentación, que estará encendida 24 horas al día y 365 días al año, debe proporcionar 5V y 200mA.
Una recomendación; Según el datasheet del DS1307 el cuerpo del cristal de cuarzo ha de ir conectado a masa y sus terminales lo más cerca posible de los pines 1 y 2 del DS1307, según la siguiente foto.
Detalle de la fecha, hora y temperatura (la alarma está activada).
Pantalla de ajuste de la alarma.
En este montaje no hemos diseñado la placa de circuito impreso, ya que dependerá mucho de la caja donde vayamos a ubicar nuestro reloj.
El archivo de descarga está comprimido, para descomprimirlo debes poner la clave que es www.kemisa.es La versión actual del código del programa es V1.
El código .hex es el programa que hay que grabar en el microcontrolador 16F873A, necesario para que funcione el circuito.
Si no sabes programar microntroladores pincha aquí.