Informática
Reloj digital con 39 alarmas programables
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
Descargar
Enviado por: | David Ortega |
Idioma: | castellano |
País: | España |