Reloj digital con 39 alarmas programables

Puerto. Señal de alarma. Displays, LED (Light Emisor Diode). Programa, código fuente. Horas, minutos, codificador hexadecimal. Timers. Contador, contadores. Segmentos

  • Enviado por: David Ortega
  • Idioma: castellano
  • País: España España
  • 17 páginas
publicidad

RELOJ DIGITAL CON 39 ALARMAS PROGRAMABLES.

DEFINICION DEL PROYECTO

El proyecto consiste en diseñar un reloj digital capaz de almacenar 39 alarmas programables y mandar por el puerto 1 (bit 0) la señal de alarma. Gracias a unos displays de 7 segmentos conectados al puerto 2 podremos visualizar la hora actual y las alarmas programadas y a traves de unos leds podremos visualizar los distintos estados en el que se encuentra el microcontrolador. Para controlar las distintas funciones del reloj lo haremos a traves de unos pulsadores miniatura los cuales estaran conectados a 3 pines del puerto 1.

CODIGO FUENTE

USES 80537

ORG 00H

DB 63D,06D,91D,79D,102D,109D,125D,07D,255D,111D

HORA EQU 30H

MIN EQU 31H

SEG EQU 28H

CONTADOR EQU 29H

ALARMA EQU 32H

MAXIMO EQU 20H

MOV R5,#11H

MOV P1,R4

SETB P1.6

MOV R0,#30H

PETICION ACALL DISPLAYS-MANDAR

JB 90H.1,BOTON1

JB 90H.3,BOTON3

JB 90H.2,BOTON2

AJMP PETICION

BOTON1: MOV MAXIMO,#24H

INC R3

ACALL DECIMAL

JB P1.6,MAX_HORA

MOV MAXIMO,#60H

MAX_HORA: MOV A,R3

CJNE A,MAXIMO,SALTO24H

MOV R3,#00H

MOV A,#00H

SALTO24H MOV @R0,A

AJMP PETICION

BOTON2: CPL P1.6

MOV R3,#00H

INC R0

CJNE @R0,#0FFH,PETICION

AJMP SETUP_OK

BOTON3: MOV A,R0

CLR C

RRC A

JC PETICION

SETUP_OK MOV @R0,#0FFH

MOV 89H,#02H

MOV 88H,#10H

MOV 8CH,#0FEH

INICIALIZAR: MOV R0,#30H

MOV R2,#32H

MOV CONTADOR, 89H

PUESTA0 MOV R6,#01H

MOV R7,#01H

INC SEG

MOV A,SEG

CJNE A,#3CH,CUENTA

MOV SEG,R4

AJMP MINUTOS

CUENTA: ACALL DISPLAYS-MANDAR

ACALL CHEQUEO

MOV A,88H

CJNE A,#30H,CUENTA

MOV 88H,#10H

DJNZ R7,CUENTA

MOV R7,#01H

DJNZ R6,CUENTA

AJMP PUESTA0

MINUTOS: INC MIN

CLR 90H.0

MOV A, MIN

CJNE A,#60H, CONVERTIR_MIN

AJMP HORAS

CONVERTIR_MIN MOV R3,MIN

ACALL DECIMAL

MOV MIN,R3

MOV A,MIN

CJNE A,#60H, CUENTA

HORAS: MOV MIN,R4

INC HORA

MOV A, HORA

CJNE A,#24H, CONVERTIR_HORA

MOV HORA,R4

AJMP INICIALIZAR

CONVERTIR_HORA MOV R3,HORA

ACALL DECIMAL

MOV HORA,R3

MOV A,HORA

CJNE A,#24H, CUENTA

AJMP INICIALIZAR

ACTIVAR: SETB 90H.0

INC R2

INC R2

MOV A,R2

MOV R0,A

CJNE @R0,#0FFH,FIN_ALARMAS

MOV R2,#32H

FIN_ALARMAS: MOV R0,#30H

RET

CHEQUEO: MOV R0,#30H

MOV A, R2

MOV R1,A

BUCLE: MOV A, @R0

XRL A, @R1

JNZ SALIR

DJNZ CONTADOR, BUCLE1

ACALL ACTIVAR

BUCLE1: INC R0

INC R1

AJMP BUCLE

ACALL ACTIVAR

SALIR: MOV R0,#30H

MOV CONTADOR, #02H

RET

DECIMAL: MOV A,#0AH

ANL A,R3

CJNE A,#0AH, NO_TOCAR

MOV A,R3

ADD A,#06H

XCH A,R3

NO_TOCAR RET

DISPLAYS ACALL NPN

MOV A,#0F0H

ANL A,@R0

SWAP A

ACALL MANDAR

ACALL NPN

MOV A,#0FH

ANL A,@R0

ACALL MANDAR

RET

MANDAR MOVC A, @A+DPTR

MOV P2,A

RET

DISPLAYS-MANDAR: ACALL DISPLAYS

INC R0

ACALL DISPLAYS

DEC R0

RET

NPN: MOV A,R5

MOV P3,A

MOV P3,R4

RR A

SEGUIR MOV R5,A

RET

END

.

PARTES DEL PROGRAMA

Todo el funcionamiento del reloj esta escrito en ensamblador, es decir, en lenguaje de bajo nivel con un limite de 256 bytes de memoria interna por chip (8052). En el programa se puede diferenciar 6 partes diferentes:

-Inicializacion de datos.

-Configuracion de las horas y minutos.

-Configuracion de registros para emular un segundo(TIMERS).

-Algoritmo del reloj y activacion dela alarma.

-Codificador de hexadecimal a decimal.

-Codificador de decimal a 7 segmentos.

INICIALIZACION DE DATOS

La funcion de esta parte es la de almacenar unos datos en la memoria para poner en marcha al reloj. Hay dos clases de datos en nuestro programa:

  • Datos temporales.

  • Constantes.

Los datos temporales se utilizan para poner en marcha el reloj. Estos datos cambiaran continuamente según el algoritmo empleado. Un ejemplo de dato temporal puede ser el registro que contiene la direccion de la ultima alarma programada.

Las constantes son datos que no van a cambiar en el transcurso del programa y que nos sirven de referencia. Un ejemplo de constantes es la tabla de datos correspondiente a la excitación de los displays de 7 segmentos.

TABLA DE DATOS DE EXCITACIÓN DISPLAY 7 SEGMENTOS.

USES 80537

ORG 00H

DB 63D,06D,91D,79D,102D,109D,125D,07D,255D,111D

ASIGNACIONES DE MEMORIA.

HORA EQU 30H HORA ACTUAL

MIN EQU 31H MINUTO ACTUAL

SEG EQU 28H SEGUNDOS TRANSCURRIDOS

CONTADOR EQU 29H ENCARGADO DE ACTIVAR LA ALARMA SI LOS 4

BYTES COINCIDEN(30H CON 32H Y 31H CON 3H, ETC)

ALARMA EQU 32H HORA 1º ALARMA

MAXIMO EQU 20H ENCARGADO DE QUE NO PONGAMOS + DE 24

HORAS NI + DE 60 MINUTOS

CONFIGURACION DE LA HORA Y ALARMAS

Para configurar la hora y las alarmas lo hacemos mediante pulsadores en miniatura conectados al puerto 1, estos, al pulsarlos, enviaran tension a una determinada partilla del microcontrolador y ejecutara la parte del programa que le corresponde a ese boton. En nuestro proyecto disponemos de 3 botones:

-BOTON1 INCREMENTA EL VALOR DE LAS HORAS Y MINUTOS.

-BOTON2 GRABAR LOS DATOS EN MEMORIA.

-BOTON3 PUESTA EN MARCHA DEL RELOJ.

PARTE DEL PROGRAMA CONTROLADA POR EL BOTON1.

BOTON1: MOV MAXIMO,#24H

INC R3

ACALL DECIMAL

JB P1.6,MAX_HORA

MOV MAXIMO,#60H

MAX_HORA: MOV A,R3

CJNE A,MAXIMO,SALTO24H

MOV R3,#00H

MOV A,#00H

SALTO24H: MOV @R0,A

AJMP PETICION

Lo primero que hacemos es llevar a MAXIMO el valor 24 que corresponde al maximo de horas que tiene un dia. Incrementamos R3 que contiene la veces que hemos pulsado el boton y llamamos a una subrutina llamada DECIMAL que lo que hace es que cuando el byte bajo de R3 sea 0AH ponga 00H ya que nuestro reloj va a visualizar los valores en numeracion decimal. Una vez convertido el dato, preguntamos si el bit 6 del puerto 1 esta puesto a 1 para poner el limite de 24 o 60, si esta puesto a uno entonces cuando hayamos pulsado 24 veces el pulsador, R3 pasara a valer 00H que corresponde a las doce de la noche. Si por el contrario, el bit 6 del puerto 1 esta a 0, estonces cargaremos en MAXIMO el valor 60 y esta vez R3 no parsara a 00H cuando llegue a 24 sino cuando llegue a 60. De esta manera nos aseguramos que nunca vamos a poner mas de 24 horas en el byte de las horas ni mas de 60 minutos en el byte de los minutos.

Una vez que tengamos el dato en R3 lo graba en la posicion 30H (MOV @R0,A) para que una subrutina pueda llevar el contenido de 30H y poderlo visualizarlo en los displays.

PARTE DEL PROGRAMA CONTROLADA POR EL BOTON2.

BOTON2: CPL P1.6

MOV R3,#00H

INC R0

CJNE @R0,#0FFH,PETICION

AJMP SETUP_OK

Una vez que pulsemos el boton 2, el bit P1.6 se pondra a 0 lo que indicara que los proximos datos a introducir van a ser minutos. Borramos los datos anteriores contenidos en R3 e incrementamos R0 para después grabar en la direccion 31h los minutos de la hora actual cuando pulsemos el boton1. Tambien compara si la proxima direccion de memoria equivale a FFH, si es así, el programa entendera que se ha completado de introducir las 39 alarmas y saltara a la etiqueta AJMPM SETUP_OK.

PARTE DEL PROGRAMA CONTROLADA POR EL BOTON3.

BOTON3: MOV A,R0

CLR C

RRC A

JC PETICION

Al pulsar el boton 3 indicamos que hemos completado de introducir todos los datos. Una vez que pulsemos el boton 3, el programa comprobara si hemos grabado la horas y los minutos. Si hemos introducido solo horas y no los minutos y pulsamos el boton3, el programa seguira dentro de la parte de configuracion de los minutos y todavia no se habra puesto en marcha el reloj.

Si por el contrario lo hemos configurado bien, las siguientes instrucciones a ejecutar son las siguientes:

SETUP_OK MOV @R0,#0FFH

MOV 89H,#02H

MOV 88H,#10H

MOV 8CH,#0FEH

INICIALIZAR: MOV R0,#30H

MOV R2,#32H

MOV CONTADOR, 89H

En esta parte graba mediante el direccionamiento indirecto el dato FFH para que, cuando vayamos comprobando cuantas alarmas hemos programado, sepa el programa cual ha sido la ultima y vuelva a la primera y ademas configura los timers para llevar la cuenta de los ciclos maquina. El reloj ira inspecionando la tabla de datos y cuando encuentre el dato FFH volvera al principio de la tabla.

En R0 vamos a llevar, como al principio, el dato 30h que corresponde a la direccion de las horas actuales y en R2 la de las alarmas. En la posicion apuntada por CONTADOR vamos a llevar el dato que contiene la posmem 89h que es exactamente un 02h. Este byte es el encargado de averiguar cuantos bytes coinciden entre la hora actual y la de la alarma. Por ejemplo: Si la hora actual es 16:00 y la de la alarma es 16:05 el contador mediante una serie de instrucciones se decrementara en 1 ya que solo coinciden en la horas. Si coincidiesen tambien en minutos, el contador se pondria a cero y saltariamos a la señal de alarma.

CONFIGURACION DE LOS TIMERS

Esta parte es el corazon del reloj ya que es la parte del programa que lleva la cuenta de los ciclos maquina para emular los segundos de nuestro reloj. De las diversas formas de configuracion de los timers, hemos seleccionado el modo 2 ( temporizador con auto-recarga) y controlado por hardware.

MOV 89H,#02H MODO 2

MOV 88H,#10H HABILITAR TEMPORIZADOR

MOV 8CH,#055H VALOR CORRESPONDIENTE A LA AUTO-RECARGA

Nuestro chip lleva internamente un reloj interno de 12MHz.Cada ciclo maquina tarda un microsegundo en completarse por lo tanto si los timers cuentan ciclos maquina debemos contar exactamente un millon de ciclos para que equivalga a un segundo. Como los registros de auto-recarga son de 8 bits, como maximo podremos contar 256 c.m (ciclos maquina) por lo que debemos auxiliarnos de unos registros auxiliares para llevar la cuenta.

METODO PARA CONTAR UN SEGUNDO.

PUESTA0 MOV R6,#50D

MOV R7,#100D

INC SEG

MOV A,SEG

CJNE A,#3CH,CUENTA

MOV SEG,R4

AJMP MINUTOS

CUENTA: ACALL DISPLAYS-MANDAR

MOV A,88H

CJNE A,#30H,CUENTA

MOV 88H,#10H

DJNZ R7,CUENTA

MOV R7,#100D

DJNZ R6,CUENTA

AJMP PUESTA0

El registro de auto-recarga lo ponemos a 55D para que cuando alcance FFH empiece desde 55D, así contara exclusivamente 200D cada vez. Cada vez que sobrepase FFh iremos decrementando el valor del R6 que inicialmente vale 50D y cuando R6 llegue a cero haremos lo mismo con R7 hasta que llegue igualmente a cero. Una vez que R7 llegue a cero significara que hemos contado 1000000 c.m (200x50x100). Inmediatamente después, volvemos a poner en los registros su valor inicial para contar el 2º y asi sucesivamente. En la posmem apuntada por SEG se encuentra el numero de segundos transcurridos y mientras que no excendan de 60D=3CH, esta parte del programa va a seguir haciendo lo mismo que antes pero si por el contrario llega a 3CH entoces los segundos se inicializan a 00H=contenido de R4 y ademas se incrementa la posmem MINUTOS.

ALGORITMO DEL RELOJ Y ACTIVACION DE LA ALARMA.

Esta parte del programa es la que mas bytes de memoria ocupa ya que los datos va a pasar por distinta fases para que el reloj funcione correctamente.

MINUTOS: INC MIN

MOV A, MIN

CJNE A,#60H, CONVERTIR_MIN

AJMP HORAS

CONVERTIR_MIN MOV R3,MIN

ACALL DECIMAL

MOV MIN,R3

ACALL CHEQUEO

MOV A,MIN

CJNE A,#60H, CUENTA

HORAS: MOV MIN,R4

INC HORA

MOV A, HORA

CJNE A,#24H, CONVERTIR_HORA

AJMP INICIALIZAR

Una vez transcurrido un minuto, lo primero que hacemos es llevar el contenido de MINUTOS al acumulador para compararlo con el valor 60h, si es igual, ponemos a 00H MINUTOS y saltamos a la etiqueta HORAS. Si por el contrario no es igual a 60H, lo que hacemos es llevar a R3 el contenido de MINUTOS y llamamos a la subrutina DECIMAL que se encarga de pasar los datos de hexadecimal a decimal. Una vez tengamos el dato convertido en R3 lo pasamos a MINUTOS y llamamos a la subrutina Chequeo que es la encargada de verificar los bytes de las horas actuales y alarmas. Una vez verificado estos datos hacemos el mismo proceso de los minutos a las horas,es decir, llevamos al acumulador el valor de HORAS para compararlo con el valor 24D y si es igual poner HORAS a 00H, etc.

El algoritmo empleado para activar la alarma es mas sencillo de entender. La hora actual se compone de 2 bytes, uno para las horas y otro para los minutos al igual que la hora de la alarma entonces solo basta comparar el byte de las horas actuales con el byte de las horas de alarmas, etc. Todo este algoritmo lo hace posible una cadena de subrutina que unidas de una forma determinada hace posible este proceso.

ALGORITMO DE CHEQUEO

CHEQUEO MOV R0,#30H

MOV A, R2

MOV R1,A

BUCLE: MOV A, @R0

XRL A, @R1

JNZ SALIR

DJNZ CONTADOR, BUCLE1

ACALL ACTIVAR

BUCLE1: INC R0

INC R1

AJMP BUCLE

SALIR: MOV R0,#30H

MOV CONTADOR, #02H

RET

Esta subrutina graba en R0 la posicion 30h que corresponde a las horas y lleva R2 a R1 que va a contener la hora de alarma. Mediante direccionamiento indirecto vamos grabando los bytes en R0 y haciendo la AND logica para saber si esos dos bytes (R0 y R1 coinciden). Si coinciden decrementamos el valor de CONTADOR e incrementamos en 1 los valores de R0 y R1 para comparar los siguientes bytes y se hace la misma operación. Si coinciden otra vez quiere decir que han coincidido las horas y los minutos y entonces llamaremos a una subrutina encargada de dar la señal de alarma. En el caso de que no coincidan los bytes de las horas, R0 volvera a valer 30H y R1 la direccion de la ultima alarma junto a CONTADOR que volvera a valer 02H.

ALGORITMO DE ACTIVAR

ACTIVAR: SETB 90H.0

INC R2

INC R2

MOV A,R2

MOV R0,A

CJNE @R0,#0FFH,FIN_ALARMAS

MOV R2,#32H

FIN_ALARMAS: MOV R0,#30H

RET

Nuestra señal de alarma la vamos a enviar por el bit 0 del puerto 1 y va a estar activa durante 1 minuto. Luego incrementamos R2 dos veces para grabar en el mismo R2 la proxima alarma y ademas comparamos si el valor de R2 es FFh lo que significara que ya no hay mas alarmas y debe empezar la tabla de alarmas desde el principio (32H)

CODIFICADOR DE HEXADECIMAL A DECIMAL.

Una vez implantado nuestro algoritmo debemos visualizarlo al exterior pero surge un problema, el 8052 interpreta los datos en hexadecimal y no son los datos legibles para visualizarlo en los displays ni tampoco a la hora de buscar su equivalente de 7 segmentos ( Mirar tabla de datos de los 7 segmentos). Para ello debemos construirnos un sencillo codificador:

DECIMAL: MOV A,#0AH

ANL A,R3

CJNE A,#0AH, NO_TOCAR

MOV A,R3

ADD A,#06H

XCH A,R3

NO_TOCAR: RET

En el registro R3 se guarda el valor a convertir y se hace la AND logica con el dato 0AH. Si el valor de R3 es un 0AH entonces su equivalente seria 00D y lo hacemos sumandole el numero 6H al acumulador y despues lo llevamos todo sumado a R3. Por ejemplo: tenemos 9H minutos al aumentar los minutos no quedaria AH minutos pero le sumamos 6 y nos da 10 minutos. Asi lo hacemos con todos los digitos del reloj.

CODIFICADOR DE DECIMAL A 7 SEGMENTOS.

Una vez tengamos todos los datos pasados a decimal en la memoria del 8052, solo hace falta mandarlos al exterior porque seria inutil el reloj si no visualizamos los datos. Para ello, nos habiamos implementado una tabla de datos correspondientes a la excitación de las patillas de un display de 7 segmentos, la cual, va a empezar en la posicion 00h de nuestro programa. La tabla de datos va a tener un tamaño de 10 elementos que corresponden a los numeros del 0 al 9. Para que funcione correctamente, debemos llevar al DPTR el dato 00H para que sepa el 8052 que en 00H empieza nuestra tabla. Una vez hecho esto lo unico que se hace es llevar al acumulador el numero que queremos que se visualice en los displays y mediante la orden MOVC A,@A + DPTR localizamos el dato de la tabla. Ejemplo: Si llevamos el numero 8 al acumulador, entonces quedaria MOVC A,@ 8 + 00H y el dato cuyo orden es el 8 es el 255D es decir,11111111B que es lo mismo que tener todas las patillas encendidas.

0 1 2 3 4 5 6 7 8 9

63D,06D,91D,79D,102D,109D,125D,07D,255D,111D

DISPLAYS ACALL NPN

MOV A,#0F0H Obtenemos el valor del primer digito

ANL A,@R0 Obtenemos el valor del primer digito

SWAP A

ACALL MANDAR

ACALL NPN

MOV A,#0FH Obtenemos el valor del segundo digito

ANL A,@R0 Obtenemos el valor del segundo digito

ACALL MANDAR

RET

MANDAR MOVC A, @A+DPTR

MOV P2,A

RET

Una vez que tenemos el dato que excitara a los displays, lo mandamos directamente al exterior mediante el puerto 2 cuyas patillas estan conectadas a las 8 patillas de 4 displays, en total 32 patillas. Al haber 32 patillas necesitariamos 4 puertos para visualizar la hora y los minutos pero solo disponemos de 1. En este caso se utiliza la técnica blanking (parpadeo) que consiste en apagar y encender cada uno de los displays muy rapido de modo de que a una cierta frecuencia, la retina retenga la luz de los displays y nos de la sensacion de que estan todos encendidos pero en realidad este un display encendido cada vez. Para ello se tiene que sincronizar la transmision del dato con el encendido del display correspondiente y lo hacemos con la subrutina NPN que nos recuerda a los transistores NPN por que ellos van a tener la funcion de conectar a masa los displays por el puerto 3.

SELECCIÓN DE ENCENDIDO DE LOS DISPLAYS

La selección de los displays la va hacer la subrutina NPN que va a enceder los displays a una velocidad muy alta, del orden de los MHz, alternandose los displays. Una vez que tengamos el primer dato, que va a ser el primer digito de las horas, debemos encender unicamente el primer display y cuando obtengamos el segundo datos, el segundo display. Los bits que van a enceder los displays pertenecen al puerto 3( P3.3P3.0). A continuacion se explica el funcionamiento de la subrutina NPN:

NPN: MOV A,R5

MOV P3,A

MOV P3,R4

RR A

MOV R5,A

RET

En R5 se guarda el ultimo bit correspondiente al ultimo display encendido, se manda al puerto 3 mediante el acumulador.Inmediatamente despues se apagan todos los displays y se rota el acumulador para despues guardar en R5 otra vez el ultimo display encendido. Se deben apagar inmediatamente para que otros datos no se visualicen en los displays que no les corresponde. Como al principio, R5 contiene el dato 11D=10001000, los displays los podemos conectar tanto a los primeros 4 bits del puerto 3 como a los 4bits de mas peso, porque al rotar sin carry el valor 11D vamos a obtener el mismo resultado que si rotasemos solo los primeros 4 bits que seria equivalente al dato 08D=00001000.

ESQUEMA GLOBAL DE ENTRADA Y SALIDA.

DIAGRAMAS DE FLUJO.

Diagrama general del programa.

1 LINEA

6 LINEAS

25 LINEAS

3 LINEAS

19 LINEAS

19 LINEAS

22 LINEAS

20 LINEAS

6 LINEAS

Diagrama por partes del programa.

ESQUEMAS ELECTRICOS DEL RELOJ.

RESUMEN DE PATILLAJE.

1. Bit 0 del puerto 1 Salida de alarma.

2. Bit 1 del puerto 1 Entrada boton 1.

3. Bit 2 del puerto 1 Entrada boton 2.

4. Bit 3 del puerto 1 Entrada boton 3.

5. Bit 4 del puerto 1 No usado.

6. Bit 5 del puerto 1 No usado.

7. Bit 6 del puerto 1 No usado.

8. Bit 7 del puerto 1 No usado.

9. Reset Reinicio del reloj (opcion disponible).

10. Bit 0 del puerto 3 Salida habilitacion display nº4.

11. Bit 1 del puerto 3 Salida habilitacion display nº3.

12. Bit 2 del puerto 3 Salida habilitacion display nº2.

13. Bit 3 del puerto 3 Salida habilitacion display nº1.

14. Bit 4 del puerto 3 * Salida habilitacion display nº4.

15. Bit 5 del puerto 3 * Salida habilitacion display nº3.

16. Bit 6 del puerto 3 * Salida habilitacion display nº2.

17. Bit 7 del puerto 3 * Salida habilitacion display nº1.

18. XTAL2

19. XTAL1

20. Vss Conexión a negativo.

21. Bit 0 del puerto 2 Salida excitación segmento A.

22. Bit 1 del puerto 2 Salida excitación segmento B.

23. Bit 2 del puerto 2 Salida excitación segmento C.

24. Bit 3 del puerto 2 Salida excitación segmento D.

25. Bit 4 del puerto 2 Salida excitación segmento E.

26. Bit 5 del puerto 2 Salida excitación segmento F.

27. Bit 6 del puerto 2 Salida excitación segmento G.

28. Bit 7 del puerto 2 No usado.

29. PSEN.

30. ALE/PROG.

31. EA/VPP.

32. Bit 7 del puerto 0 No usado.

33. Bit 6 del puerto 0 No usado.

34. Bit 5 del puerto 0 No usado.

35. Bit 4 del puerto 0 No usado.

36. Bit 3 del puerto 0 No usado.

37. Bit 2 del puerto 0 No usado.

38. Bit 1 del puerto 0 No usado.

39. Bit 0 del puerto 0 No usado.

40. Vcc Conectado a positivo.

* La salidas para habilitar los displays puede ser tanto los primeros 4 bits de puerto 3 como los 4 bits ultimos.

MANUAL DE USUARIO.

Una vez montado los componentes del reloj y conectado a la alimentacion, en los displays se deben visualizar 4 ceros, eso significa que se ha montado bien y el microcontrolador se ha puesto en marcha. Para configurar la hora debemos pulsar tantas veces el interruptor 1 como horas deseemos y cuando tengamos ya las horas elegidas, debemos pulsar el interruptor 2 y pulsar el interruptor 1 tantas veces como minutos deseemos. Estos dos pasos son los unicos que ha que seguir para poner la hora actual. Para configurar las 39 alarmas, debe seguir los pasos anteriores ya que los siguientes datos que introduzcamos van a ser horas y minutos correspondientes a las alarmas. Una vez hayamos introducido los minutos correspondientes a la ultima alarma programada debemos pulsar el interruptor 3 y el reloj se pondra en marcha. El reloj se pondra automaticamente en marcha si introducimos las 39 alarmas completas. Por motivos de espacio en memoria de programa, no se ha implementado un boton de reset por lo que si se hubiera introducido algun dato erroneo, se debe desconectar el reloj de la alimentacion y volverlo a conectar.

POSIBLES APLICACIONES.

Al tratarse de un reloj digital con multiples alarmas, su campo de aplicación es muy grande, puede utilizarse como activador de la sirena de un colegio, como dispositivo controlador de la caldera de la calefaccion asi como un reloj despertador conectado a un transformador de alimentacion.

PRODUCTOS EN EL MERCADO.

En el mercado existe este tipo de producto pero con un diseno totalmente distinto, en vez de displays tienen pantalla LCD y el modo de configuracion es de tipo manual o automatico. El manual consta de una rueda con dientes seleccionables marcados de 5 en 5 minutos y la duraccion de la alarma o la activacion del dispositivo depende del numero de dientes seleccionados. Tambien existen relojes digitales cuyo funcionamiento es muy parecido al nuestro pero que son mas sofisticados y precisos

SITUACION EN EL MERCADO.

Los relojes comercializados tienen una posicion estable en el mercado pero no tienen una marca que destaques en la demas ya que cualquier reloj puede cumplir perfectamente con su objetivo. Puede que se vendan mas los relojes de configuracion manual al ser mas faciles de entender y configurar que los de configuracion automatica pero estos ultimos, al estar compuestos por circuitos integrados, son mas dificiles que fallen frente a los otros

PARTES DE LAS QUE CONSTA.

Nuestro reloj digital se compone esencialmente del microcontrolador de 40 pines, 4 displays de 7 segmentos y un rele o un circuito oscilante conectado al pin de salida de la alarma. Como es logico, tambien llevara componentes electronicos como resistencias a cada una de las patillas de los displays, unos transistores para activar los displays, un 555 configurado de tal manera que nos sirva de oscilador para emitir el sonido de la alarma y un transformador de 220 a 12V para alimentar todo el reloj.

CONDICIONES DE FUNCIONAMIENTO.

Nuestro reloj no tiene unas condiciones de funcionamiento exigentes, no va a necesitar ningun tipo de disipacion ni de mantenimiento a menos que se deteriore o falle algun componente. Debemos tener en cuenta que los displays se van a encender y apagar a una velocidad de unos cuanto MHz por lo que los 4 transistores que activan dichos displays deben contener las siglas BF = alta frecuencia para un funcionamiento correcto.

FUNCIONES NO IMPLEMENTADAS.

Por problemas de espacio en memoria de programa algunas funciones de los relojes digitales actuales no se han podido implementar en nuestro chip. Dichas funciones son las siguientes:

-No se ha podido suprimir el cero que aparece a la izquierda del 2º digito de la hora 05:30.

-A la hora de visualizar la hora en la parte de configuracion de horas y alarmas no vamos a ver la hora completa sino que la vamos a ver por partes. Si queremos poner la 15:30, se vera en los displays: 15:00 cuando hayamos puesto 15, le damos al boton 2 y ponemos 30 y se visualizara 30:00. Al finalizar la parte de configuracion la hora se vera como siempre 15:30.

-En los pines de los botones va a aparecer el fenomeno de los rebotes por lo que si pulsamos durante un instante los botones va a ser imposi-ble poder ajustar la hora, asi que se ha tenido que implementar con resistencias.

TIEMPO DE DESARROLLO.

Tiempo de desarrollo = 2 semanas.

Tiempo de ejecucion = 2 dias.

Tiempo de pruebas = 1 dia.

BOTONES

PUERTO 1

PUERTO 0

PUERTO 3

PUERTO 2

PUERTO 3

0

0

8

1

PUERTO

2

ACALL ACTIVAR

ACALL CHEQUEO

ALARMA

DISPLAYS

ENC. DISPLAYS

PUERTO INACTIVO

INICIALIZACION DE DATOS

CONFIGURACION DE LA HORA Y ALARMAS

PUESTA EN MARCHA DEL RELOJ

SENAL DE ALARMA DURANTE 1 MINUTO

Cargar tabla de datos displays 7 s.

Cargar direcciones de memoria

Llamada a los pines de los puertos para verficar botones

Inicializar datos correspondientes a la marcha del reloj

Esperar retardo de un segundo via software

Incrementar minutos y horas

Chequeo de alarma

Mandar a los puertos los datos

Doble conversion de datos:

Hexa. a decimal

Dec.a 7 segmentos

INICIO

Reloj digital con 39 alarmas programables