Está en la página 1de 13

PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

RELOJ PARLANTE

El objetivo de este proyecto es hacer un circuito electrónico que sea


capaz de mostrar la hora y fecha real en una pantalla y en el instante que se
desee reproducir dicha hora.

Para este proyecto se utilizará los siguientes elementos:

• Microcontrolador PIC 16F871.


• ISD 25120 (grabador-reproductor de audio).
• RTC DS1307 (Reloj de tiempo real).
• Teclado matricial de 4x4.
• Display de cristal liquido 16x2.
• Micrófono Electret.
• Parlante 8ohm
• Resistencias.
• Condensadores.

DESCRIPCION DE LOS ELEMENTOS

PIC 16F871

Este es un microcontrolador de 40 pines que dispone de 2 Kilo bites de


memoria Flash, 128 bytes de RAM y 64 bytes de memoria EEPROM, puede
llegar a operar hasta con una frecuencia de 20 Mhz, el rango de voltaje para su
alimentación es de 2.0V a 5.5V

Una de las razones para utilizar este microcontrolador es el número de


pines, ya que se utilizara algunos periféricos como el teclado, LCD, RTC y el
ISD. Consta de cinco puertos, A, B, C, D, E, la mayoría de los pines el
microcontrolador están destinados para cierta acción, pos lo que son pocos los
MICROS Y MAS MICROS Giovanni Lafebre
Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

que quedan sin conectar. A continuación se muestra un diagrama del PINOUT


del microcontrolador.

Distribución de pines del microcontrolador PIC 16F871 de MICROCHIP.

Para poder programar el microcontrolador he optado por utilizar el


compilador PROTON Development Suite, pueden descargar el demo en su
página web

Este es un compilador en lenguaje BASIC, muy potente y fácil de usar,


agilitando mucho la programación, dispone de muchas librerías y un IDE muy
bueno.

Y como no, para poder descargar el HEX al PIC utilizo nada mas y nada
menos que mi GTP USB + con el winpic800 del maestro SISCO, un
programador muy rápido y soporta gran cantidad de dispositivos, haciendo que

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

la programación de 1436 bytes que es el tamaño del programa lo descargue en


no mas de 6 segundos.

GTP USB +

ISD25120

El ISD25120 es un modulo registrador de audio de alta calidad capaz de


almacenar 120 segundos que pueden permanecer en el CI aun así se le corte la
alimentación, también ofrece una opción muy útil que permite reproducir carios
mensajes de forma continua.

Este CI tiene varios modos de operación y en este proyecto se lo utiliza como


un registrador de multi-mensajes, en este caso se pueden registrar un total de 64
menajes siempre y cuando el tiempo no exceda los 120 segundos

Se puede seleccionar con el teclado matricial la posición en la que se desee


grabar el mensaje, así mismo se puede seleccionar una posición de la memoria para
reproducir el mensaje, escucharlo y si esta conforme dejarlo o se lo puede reagravar.

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

LCD 16x2

Este es un dispositivo muy útil que en nuestro caso nos servirá para visualizar
la hora y la fecha como se muestra en la imagen

RTC DS1307

El ds1307 es un reloj de tiempo real que nos permite configurar la hora y


la fecha, utiliza protocolo I2C, y funciona a una frecuencia de 32768 Hz, y
también se puede poner una pila de 3V para que cuando se le quite la
alimentación pueda seguir funcionando.

Estos a mi parecer son los dispositivos mas importantes, ya que los otros
como el micrófono, parlante y teclado son muy conocidos.

Y con esta breve introducción creo que estamos listos para empezar a
hablar de lo que nos interesa que es el Reloj Parlante.

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

Desarrollo del Proyecto

Como mencionaba anteriormente, el ISD será, el encargado de


reproducir la hora, los datos del RTC los veremos en el LCD tal como se
describe a continuación:

1 2 3

FIG 1.
4

1.- Hora actual.


2.- Contador para grabar el mensaje en posición de memoria. (cont)
3.- Contador para reproducir el mensaje en posición de memoria. (cont1)
4.- Fecha actual.

A trabes del teclado podremos grabar los mensajes y reproducir uno a


uno o la hora actual.

FIG 2.

Las funciones de las teclas marcadas son las siguientes:

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

D.- Graba un mensaje en la posición de memoria seleccionada. (cont)


C.- Reproduce un mensaje en la posición de memoria seleccionada
(cont1)

B.- Incrementa el contador para almacenar en la posición de memoria el


mensaje.

A.- Decrementa el contador para almacenar en la posición de memoria el


mensaje.

6.- Incrementa el contador para reproducir el mensaje en la posición de


memoria.

7.- Decrementa el contador para reproducir el mensaje en la posición de


memoria.

8.- Reproduce la hora actual. Ejemplo:


“Son las seis pm y treinta y nueve minutos”

Para que la reproducción de la hora sea correcta, se tiene que grabar


correctamente 25 mensajes de voz de un segundo cada uno, para hacer esto
debemos utilizar las teclas para incrementar el contador (6 y 3) y luego
presionar D para grabar, en el LCD aparecerá un mensaje “LISTO” para
podernos preparar para grabar el mensaje, luego se vera un mensaje “AHORA”
y se dispondrá de un segundo para grabar el mensaje.

El orden para grabar los mensajes será el siguiente:

Con (2 en la FIG 1.) Mensaje


0 "CERO"
1 "UNO"
2 "DOS"
3 "TRES"
4 "CUATRO"
5 "CINCO"
6 "SEIS"
7 "SIETE"
8 "OCHO"
9 "NUEVE"
10 "DIEZ"
11 "ONCE"
12 "DOCE"
13 "TRECE"
14 "CATORCE"
15 "QUINCE"
16 "VEINTE"
17 "TREINTA"
18 "CUARENTA"
19 "CINCUENTA"
20 "Y"

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

21 "SON"
22 "LAS"
23 "AM"
24 "PM"
25 "MINUTOS"

Una ves que se han grabado esos mensajes, el reloj esta listo para
funcionar.

Cualquier duda comentario o sugerencia lo pueden hacer en el


GUESTBOOK de mi pagina web: http://www.freewebs.com/glafebre/

A continuación les dejo el diagrama y el código fuente en PROTON +

CODIGO

'PIC a utilizar
DEVICE 16F871
'Frecuencia
XTAL 4
'declaracion del LCD
DECLARE LCD_TYPE 0
DECLARE LCD_DTPIN PORTC.4
DECLARE LCD_ENPIN PORTC.2
DECLARE LCD_RSPIN PORTC.3
DECLARE LCD_INTERFACE 4
DECLARE LCD_LINES 2
'teclado matricial
DECLARE KEYPAD_PORT PORTD

'---- DECLARACION DE LOS PINES DEL BUS I2C -------


SCL_PIN = PORTB.7
SDA_PIN = PORTB.6
'todos los puertos digitales
ALL_DIGITAL true
'variables

DIM tecla AS BYTE


DIM cont AS BYTE
DIM cont1 AS BYTE
DIM var1 AS BYTE
DIM segu AS BYTE
DIM minu AS BYTE
DIM hora AS BYTE
DIM minu1 AS BYTE
DIM minu2 AS BYTE
DIM diaS AS BYTE
DIM diaF AS BYTE
DIM mes AS BYTE
DIM anio AS BYTE
DIM eeprom AS BYTE
DIM control AS BYTE
DIM aux AS BYTE
DIM STRING1[10] AS BYTE
DIM horario AS BIT
SYMBOL CE = PORTE.0
SYMBOL PD = PORTE.1

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

SYMBOL PR = PORTE.2
SYMBOL EOM = PORTC.0

TRISA = 0

DELAYMS 500

cont=0
cont1=0

CLS

PORTA = 0
HIGH CE

GOSUB grabar_RTC

'Programa principal
inicio:
GOSUB leer_RTC
tecla = INKEY
PRINT AT 1,12,DEC2 cont,"-"
PRINT AT 1,15,DEC2 cont1,
SELECT CASE tecla
CASE 0: 'para grabar
GOSUB antirebote 'antirebote de tecla
GOSUB grabar
CASE 1: 'para reproducir el msg seleccionado
GOSUB antirebote 'antirebote de tecla
GOSUB reproducir
CASE 2
cont1=cont1+1
GOSUB antirebote 'antirebote de tecla
CASE 3
cont1=cont1-1
IF cont1<0 THEN
cont1=0
ENDIF
GOSUB antirebote 'antirebote de tecla
CASE 5
GOSUB reproducir_HORA
CASE 6
cont=cont+1
GOSUB antirebote
CASE 7
cont=cont-1
IF cont<0 THEN
cont=0
ENDIF
GOSUB antirebote
CASE 8
GOSUB antirebote
GOSUB reproducir_HORA
ENDSELECT
GOTO inicio

'Subrutinas
grabar:
PORTA=cont
HIGH PD: DELAYMS 10
LOW PR:LOW PD:HIGH CE

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

PRINT AT 2,1, "LISTO "


DELAYMS 2000
PRINT AT 2,1, "AHORA"
LOW CE
DELAYMS 1000
PRINT AT 2,1, "FINALIZADO"
HIGH CE
RETURN

' --------------------------------------------------------

reproducir:
PORTA=cont1
PRINT AT 2,1, "REPRODUCIR"
HIGH PR: LOW PD: LOW CE
WHILE EOM <> 0 'buble para esperar el bajo en EOM para saber
WEND 'cuando ha finalizado el mensaje
HIGH CE
PRINT AT 2,1, " "
RETURN

' --------------------------------------------------------

antirebote:
WHILE tecla<>16 'antirebote
tecla=INKEY
WEND
RETURN

' --------------------------------------------------------

grabar_RTC:

BUSOUT %11010000,0,[$00] 'segundos


DELAYMS 50
BUSOUT %11010000,1,[$59] 'mitutos
DELAYMS 50
BUSOUT %11010000,2,[$10] 'horas
DELAYMS 50
BUSOUT %11010000,3,[$4] 'dia de la semana
DELAYMS 50
BUSOUT %11010000,4,[$19] 'dia del mes
DELAYMS 50
BUSOUT %11010000,5,[$07] 'mes
DELAYMS 50
BUSOUT %11010000,6,[$06] 'año
DELAYMS 50
BUSOUT %11010000,7,[$10] 'frec 1hz
DELAYMS 50
RETURN

'---------------------------------------------------------

leer_RTC:

BUSIN %11010000,0,[segu]
BUSIN %11010000,1,[minu]
BUSIN %11010000,2,[hora]
BUSIN %11010000,3,[diaS]
BUSIN %11010000,4,[diaF]
BUSIN %11010000,5,[mes]

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

BUSIN %11010000,6,[anio]

PRINT AT 1,1, HEX2 hora,":",HEX2 minu,":",HEX2 segu," "

IF diaS=$1 THEN PRINT AT 2,1, "Dom."


IF diaS=$2 THEN PRINT AT 2,1, "Lun."
IF diaS=$3 THEN PRINT AT 2,1, "Mar."
IF diaS=$4 THEN PRINT AT 2,1, "Mie."
IF diaS=$5 THEN PRINT AT 2,1, "Jue."
IF diaS=$6 THEN PRINT AT 2,1, "Vie."
IF diaS=$7 THEN PRINT AT 2,1, "Sab."

PRINT AT 2,6,HEX2 diaF,"/"


PRINT AT 2,11," /20",HEX2 anio

IF mes=$1 THEN PRINT AT 2,9, "Ene"


IF mes=$2 THEN PRINT AT 2,9, "Feb"
IF mes=$3 THEN PRINT AT 2,9, "Mar"
IF mes=$4 THEN PRINT AT 2,9, "Abr"
IF mes=$5 THEN PRINT AT 2,9, "May"
IF mes=$6 THEN PRINT AT 2,9, "Jun"
IF mes=$7 THEN PRINT AT 2,9, "Jul"
IF mes=$8 THEN PRINT AT 2,9, "Ago"
IF mes=$9 THEN PRINT AT 2,9, "Sep"
IF mes=$10 THEN PRINT AT 2,9, "Oct"
IF mes=$11 THEN PRINT AT 2,9, "Nov"
IF mes=$12 THEN PRINT AT 2,9, "Dic"
RETURN

reproducir_HORA:
GOSUB leer_RTC

'--------------- son

cont1=21
GOSUB reproducir
DELAYMS 100

'--------------- las

cont1=22
GOSUB reproducir
DELAYMS 100

'--------------- HORAS

IF hora>=10 AND hora<32 THEN


hora=hora-6
ENDIF
IF hora>=32 AND hora<48 THEN '20
hora=hora-12
ENDIF

IF hora>12 THEN
hora=hora-12
horario=1
ELSE
horario=0
ENDIF
cont1=hora
GOSUB reproducir

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

DELAYMS 100

'--------------- AM/PM

IF horario=1 THEN
cont1=24
ELSE
cont1=23
ENDIF
GOSUB reproducir
DELAYMS 100

'--------------- Y

cont1=20
GOSUB reproducir
DELAYMS 100

'--------------- MINUTOS

IF minu>=10 AND minu<32 THEN '10


minu=minu-6
ENDIF
IF minu>=32 AND minu<48 THEN '20
minu=minu-12
ENDIF
IF minu>=48 AND minu<64 THEN '30
minu=minu-18
ENDIF
IF minu>=64 AND minu<80 THEN '40
minu=minu-24
ENDIF
IF minu>=80 AND minu<96 THEN '50
minu=minu-30
ENDIF
SELECT CASE minu
CASE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
cont1=minu
GOSUB reproducir
CASE ELSE
minu2=DIG minu, 1
minu2=minu2*10
cont1=minu2
SELECT CASE cont1
CASE 20
cont1=16
CASE 30
cont1=17
CASE 40
cont1=18
CASE 50
cont1=19
ENDSELECT
GOSUB reproducir
DELAYMS 100
'-------------------
IF minu<>20 AND minu<>30 AND minu<>40 AND minu<>50 THEN
cont1=20
GOSUB reproducir
DELAYMS 100

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

'-------------------
minu1=DIG minu, 0
cont1=minu1
GOSUB reproducir
ENDIF
ENDSELECT
DELAYMS 100

'--------------- MINUTOS (PALABRA)

cont1=25
GOSUB reproducir

RETURN
END

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador
PROYECTO Reloj Parlante con PIC 16F871 e ISD25120

MICROS Y MAS MICROS Giovanni Lafebre


Cuenca - Ecuador