Top Banner
UNIVERSIDAD AUTÓNOMA DEL CARIBE 1 IMPLEMENTACIÓN DE UN RELOJ DIGITAL CON FUNCIÓN CALENDARIO MEDIANTE DE EL USO DE UN MICROCONTROLADOR IMPLEMENTATION OF A DIGITAL CLOCK WITH CALENDAR FUNCTION THROUGH THE USE OF A MICROCONTROLLER Danilo Rojas M. 1 , José Salas R 2 . 1 Estudiante de Ingeniería Mecatrónica, Universidad Autónoma Del Caribe, Grupo De Investigación De Ingeniería Mecatrónica GIIM. Email: [email protected] 2 Estudiante de Ingeniera Mecatrónica, Universidad Autónoma Del Caribe. Email: [email protected] RESUMEN Un microcontrolador es un circuito integrado programable que contiene todos los componentes necesarios para controlar el funcionamiento de una tarea determinada, y que permite la utilización de la menor cantidad de elementos externos a parte del mismo, lo que reduce notablemente el tamaño y número de componentes permitiendo disminuir el número de averías, el volumen y el peso al momento de crear un dispositivo electrónico o mecatrónico. El Reloj fue desarrollado utilizando un Microcontrolador PIC16F84A el cual fue programado en lenguaje Assembler, también se utilizo un Decodificador de BCD a 7 Segmentos (7448), un demultiplexor (74138), 6 displays 7 Segmentos de Cátodo Común, un led y 4 pulsadores. Los Displays fueron controlados mediante la técnica de multiplexacion dinámica y las diferentes variables como los segundos, minutos, horas y cambio de modo entre Hora y Calendario se controlan mediante interrupciones externas e internas, todo esto permitió que la visualización de los números y el control de las variables produjeran excelentes resultados y un producto final compuesto por dos placas superpuestas. Palabras Claves: Microcontrolador, Assembler, Display 7 segmentos, Reloj, Calendario. ABSTRAC A microcontroller is a programmable integrated circuit that contains all the components necessary to control the operation of a particular task, and allows the use of fewer external components of the same, which greatly reduces the size and number of components allowing reduce the number of failures, the volume and weight when creating an electronic or mechatronics device. The clock was developed using a PIC16F84A microcontroller which was programmed in Assembler, also use a Decoder BCD to 7 Segment (7448), a demultiplexer (74 138), 6 7-Segment Displays Common Cathode, a LED and 4 buttons. The displays were controlled by the dynamic multiplexing technique and the different variables as the seconds, minutes, hours, and mode change between Time and Calendar are controlled by external and internal interrupts, this allowed the display of numbers and control variables produce excellent results and a final product consists of two overlapping plates. Keywords: Microcontroller, Assembler, 7-segment Display, Clock, Calendar.
24

74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

Jan 19, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

1

IMPLEMENTACIÓN DE UN RELOJ DIGITAL CON FUNCIÓN CALENDARIO MEDIANTE DE EL USO DE UN

MICROCONTROLADOR

IMPLEMENTATION OF A DIGITAL CLOCK WITH CALENDAR FUNCTION THROUGH THE USE OF A MICROCONTROLLER

Danilo Rojas M.1, José Salas R2.

1 Estudiante de Ingeniería Mecatrónica, Universidad Autónoma Del Caribe, Grupo De Investigación De

Ingeniería Mecatrónica GIIM. Email: [email protected] 2 Estudiante de Ingeniera Mecatrónica, Universidad Autónoma Del Caribe. Email: [email protected]

RESUMEN Un microcontrolador es un circuito integrado programable que contiene todos los componentes necesarios para controlar el funcionamiento de una tarea determinada, y que permite la utilización de la menor cantidad de elementos externos a parte del mismo, lo que reduce notablemente el tamaño y número de componentes permitiendo disminuir el número de averías, el volumen y el peso al momento de crear un dispositivo electrónico o mecatrónico. El Reloj fue desarrollado utilizando un Microcontrolador PIC16F84A el cual fue programado en lenguaje Assembler, también se utilizo un Decodificador de BCD a 7 Segmentos (7448), un demultiplexor (74138), 6 displays 7 Segmentos de Cátodo Común, un led y 4 pulsadores. Los Displays fueron controlados mediante la técnica de multiplexacion dinámica y las diferentes variables como los segundos, minutos, horas y cambio de modo entre Hora y Calendario se controlan mediante interrupciones externas e internas, todo esto permitió que la visualización de los números y el control de las variables produjeran excelentes resultados y un producto final compuesto por dos placas superpuestas. Palabras Claves: Microcontrolador, Assembler, Display 7 segmentos, Reloj, Calendario. ABSTRAC A microcontroller is a programmable integrated circuit that contains all the components necessary to control the operation of a particular task, and allows the use of fewer external components of the same, which greatly reduces the size and number of components allowing reduce the number of failures, the volume and weight when creating an electronic or mechatronics device. The clock was developed using a PIC16F84A microcontroller which was programmed in Assembler, also use a Decoder BCD to 7 Segment (7448), a demultiplexer (74 138), 6 7-Segment Displays Common Cathode, a LED and 4 buttons. The displays were controlled by the dynamic multiplexing technique and the different variables as the seconds, minutes, hours, and mode change between Time and Calendar are controlled by external and internal interrupts, this allowed the display of numbers and control variables produce excellent results and a final product consists of two overlapping plates. Keywords: Microcontroller, Assembler, 7-segment Display, Clock, Calendar.

Page 2: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

2

1. Introducción A la lo largo de este documento verán el camino decidido tomar para la elaboración de un Reloj Digital Con Función De Calendario utilizando un microcontrolador, impartido en el sexto semestre de ingeniería Mecatrónica por el docente Msc. Mauricio Barrios Barrios en el periodo 2011-02. El Reloj Digital contara con pulsadores que permiten modificar las diferentes variables como la hora, minutos, segundos, días, meses, años y modo, las variables a modificar dependerán del modo en el que el Reloj se encuentre, si esta en modo hora permitirá modificar las variables referentes a esta y si esta en modo calendario las de este. El incremento de los segundos por parte del reloj se controla mediante interrupciones por desbordamiento del Timer 0 para lo cual se realizaron una serie de cálculos para obtener el valor con el que se debe cargar y la cantidad de veces que se debe desbordar para que pase un segundo. 2. Elementos

• 1 Microcontrolador PIC16F84A. • 1 Decodificador de BCD a 7-Segmentos 7448. • 1 Demultiplexor 74138. • 6 Transistores 2N3906. • 6 Displays de 7-Segmentos. • 6 Pulsadores. • Un regulador de Voltaje de 5V 7805. • 7 Resistencias de 2.2kΩ a ½ Watt. • 1 Capacitor de 100uf a 16V. • 2 Capacitores de 22pf. • 1 Cristal de Cuarzo de 4MHz. • 1 Led Rojo.

2.1 Microcontrolador PIC16F84A Un microcontrolador es un circuito integrado programable que contiene todos los componentes necesarios para controlar el funcionamiento de una tarea determinada, como el control de una lavadora, un teclado de ordenar, una impresora, un sistema de alarma, etc. Un sistema de microcontrolador debe disponer de una memoria donde se almacena el programa que gobierna el funcionamiento del mismo que, una vez programado y configurado, solo sirve para realizar la tarea asignada. La utilización de un microcontrolador en un circuito reduce notablemente el tamaño y número de componentes y, en consecuencia, disminuye el número de averías y el volumen y el peso de los equipos, entre otras ventajas. [1] El microcontrolador PIC16F84A esta encapsulado en un DIL de 18 pines, trabaja a una frecuencia máxima de 10 MHz, normalmente se alimenta con un voltaje de 5V aplicados entre los pines VDD y VSS que son respectivamente la alimentación y masa del micro. Posee dos puertos de entra-salida, el Puerto A con 5 líneas y el Puerto B con 8 líneas, los cuales pueden entregar niveles TTL. [1]

Page 3: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA

Figura 1. Figur

2.2 Diodo Emisor de Luz LED Un led es un tipo especial de Diodo semiconductor, el cual emite luz cuando se polariza directamente. Estos emiten luz en la gama de los ultravioleta, luz visible e infrarrojos. El[2]

2.3 Transistor Los transistores son dispositivos de tres terminales que se utilizan para controlar corrientes relativamente grandes a partir de señales de corrienteinterruptores controlables electrónicamente. Los transistores pueden ser básicamente de dos tipos: Bipolares, y unipolares. Los transistores bipolares se denominan también transistores de unión o BJTson dispositivos controlados por corriente. Los transistores unipolares, por su parte se denominan transistores de efecto de campo o FET. Y son dispositivos controlados por voltaje. El transistor a utilizar es el PNP 2N3906. [3]

AUTÓNOMA DEL CARIBE

Figura 1. Encapsulado y símbolo del PIC16F84A.Figure 1. Encapsulation and symbol of PIC16F84A.

Diodo Emisor de Luz LED

Un led es un tipo especial de Diodo semiconductor, el cual emite luz cuando se polariza directamente. Estos emiten luz en la gama de los ultravioleta, luz visible e infrarrojos. El Led a utilizar es un Led Rojo.

Figura 2. Estructura LED. Figure 2. LED structure.

Los transistores son dispositivos de tres terminales que se utilizan para controlar corrientes relativamente grandes a partir de señales de corriente o de voltajes muy débiles, actuando como resistencias o interruptores controlables electrónicamente. Los transistores pueden ser básicamente de dos tipos: Bipolares, y unipolares. Los transistores bipolares se denominan también transistores de unión o BJTson dispositivos controlados por corriente. Los transistores unipolares, por su parte se denominan transistores de efecto de campo o FET. Y son dispositivos controlados por voltaje. El transistor a utilizar

3

PIC16F84A. PIC16F84A.

Un led es un tipo especial de Diodo semiconductor, el cual emite luz cuando se polariza directamente. Led a utilizar es un Led Rojo.

Los transistores son dispositivos de tres terminales que se utilizan para controlar corrientes relativamente o de voltajes muy débiles, actuando como resistencias o

interruptores controlables electrónicamente. Los transistores pueden ser básicamente de dos tipos: Bipolares, y unipolares. Los transistores bipolares se denominan también transistores de unión o BJT y son dispositivos controlados por corriente. Los transistores unipolares, por su parte se denominan transistores de efecto de campo o FET. Y son dispositivos controlados por voltaje. El transistor a utilizar

Page 4: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA

2.4 Decodificador BCD-7Segmentos Los decodificadores de segmentos requieren cuatro entradas en código decimal binario (BCD) y siete salidas, una para cada segmento del display. Los decodificintegrados 7447 y 7448. Siendo el 7447 de lógica negativa y se trabaja con el display de ánodo común y el 7448 de lógica positiva y se trabaja con el display de cátodo común[4]

Figura 4. Estructura integrado decodificador BCDFigure 4

2.5 Display De Led 7-Segmentos Un tipo muy común de display de 7 segmentos es el de diodo emisores de luz. Cada segmento es uque emite luz cundo lo atraviesa una corriente eléctrica. La configuración de Ánodo Común requiere de un circuito de excitación, que proporcione un nivel de excitación bajo para activar un determinado segmento. Cuando se aplica un nivel bajo a la enttravés de él. La configuración en cátodo común requiere de un circuito de excitación que proporcione un nivel de tensión alto para activar un cierto segmento. Cuando se aplica un nivel alto a lasegmento, el LED se enciende y circula corriente a través de él.Común. [5]

AUTÓNOMA DEL CARIBE

Figura 3. Estructura Transistor 2N3906. Figure 3. 2N3906 Transistor structure.

7Segmentos

Los decodificadores de segmentos requieren cuatro entradas en código decimal binario (BCD) y siete salidas, una para cada segmento del display. Los decodificadores más comunes son los circuitos integrados 7447 y 7448. Siendo el 7447 de lógica negativa y se trabaja con el display de ánodo común y el 7448 de lógica positiva y se trabaja con el display de cátodo común. El decodificador a utilizar es el 7448.

Estructura integrado decodificador BCD-7 segmentosFigure 4. Integrated structure BCD-7 7448 segment decoder.

Segmentos

Un tipo muy común de display de 7 segmentos es el de diodo emisores de luz. Cada segmento es uque emite luz cundo lo atraviesa una corriente eléctrica. La configuración de Ánodo Común requiere de un circuito de excitación, que proporcione un nivel de excitación bajo para activar un determinado segmento. Cuando se aplica un nivel bajo a la entrada de un segmento, el LED se enciende y circula corriente a

. La configuración en cátodo común requiere de un circuito de excitación que proporcione un nivel de tensión alto para activar un cierto segmento. Cuando se aplica un nivel alto a lasegmento, el LED se enciende y circula corriente a través de él. El 7-Segmentos a utilizar es de Cátodo

4

Los decodificadores de segmentos requieren cuatro entradas en código decimal binario (BCD) y siete adores más comunes son los circuitos

integrados 7447 y 7448. Siendo el 7447 de lógica negativa y se trabaja con el display de ánodo común y el El decodificador a utilizar es el 7448.

7 segmentos 7448. decoder.

Un tipo muy común de display de 7 segmentos es el de diodo emisores de luz. Cada segmento es un LED que emite luz cundo lo atraviesa una corriente eléctrica. La configuración de Ánodo Común requiere de un circuito de excitación, que proporcione un nivel de excitación bajo para activar un determinado segmento.

rada de un segmento, el LED se enciende y circula corriente a . La configuración en cátodo común requiere de un circuito de excitación que proporcione un

nivel de tensión alto para activar un cierto segmento. Cuando se aplica un nivel alto a la entrada del Segmentos a utilizar es de Cátodo

Page 5: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA

2.6 Demultiplexor Un demultiplixor es un circuito integrado que permite tomar datos de una line a de entrada y distribuirlos a un determinado número de salidas, por este motivo también se conoce como disdemultiplexores realizan la operación inversa a un multiplexor. es un demultiplexor de 3 líneas a 8 líneas.

3. Código del Programa El código del programa se desarrollo en lenguaje Assemanexo (Ver anexo 1). 4. Diagrama, PCB y Fotos del Circuito Los diagramas, PCB y fotos del circuito

AUTÓNOMA DEL CARIBE

Figura 5. Estructura Display de 7-Segementos. Figure 5. Structure 7-segement display.

un circuito integrado que permite tomar datos de una line a de entrada y distribuirlos de salidas, por este motivo también se conoce como dis

demultiplexores realizan la operación inversa a un multiplexor. El demultiplexor a utilizar es el 74138 que es un demultiplexor de 3 líneas a 8 líneas. [6]

Figura 6. Estructura Demultiplexor 74138. Figure 6. Demultiplexer Structure 74138.

El código del programa se desarrollo en lenguaje Assembler y se presentara al final del informe como un

del Circuito

y fotos del circuito se presentaran al final del informe como un anexo (

5

un circuito integrado que permite tomar datos de una line a de entrada y distribuirlos de salidas, por este motivo también se conoce como distribuidor de datos. Los

demultiplexor a utilizar es el 74138 que

bler y se presentara al final del informe como un

se presentaran al final del informe como un anexo (Ver Anexo 2).

Page 6: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

6

5. Técnicas De Programación Utilizadas 5.1 Multiplexacion Dinámica Debido a la baja cantidad de pines que posee el PIC16F84A fue necesario utilizar la técnica de Multiplexacion Dinámica para controlar seis 7-Segmentos a la vez. En el circuito las señales que salen del Decodificador 7448 están conectadas a todas las entradas de los 6 7-Segmentos y los pines comunes de estos están conectados al Demultiplexor 74138. La técnica consiste en habilitar el primer 7-Segmentos mediante el 74138 y enviar el dato a mostrar por este a través del 7448 manteniendo habilitado este primer 7-Segmentos durante un corto lapso de tiempo (durante ese tiempo los demás 7 segmentos están deshabilitados por tanto el numero no se va a mostrar por estos), luego lo deshabilito, habilito el segundo 7-Segmentos y envio el dato a mostrar por este manteniendo este segundo 7-Segmentos habilitado durante el mismo tiempo que el primero, el procedimiento se repite con cada uno de los demás. Esto quiere decir que los 7 segmentos van a estar apagándose y prendiendo constantemente solo que este cambio es tan rápido que el ojo humano no lo alcanza a percibir. 5.2 Interrupciones Una interrupción es un mecanismo por el cual un evento interno o externo puede interrumpir la ejecución de un programa en cualquier momento. El funcionamiento de estas es similar al de las interrupciones, de las cuales se diferencian, principalmente, en los procedimientos que las ponen en marcha. Las interrupciones se ejecutan al aparecer en cualquier instante de tiempo un evento externo al programa. [7] En PIC16F84A existen cuatro tipos de interrupciones:

• Interrupción INT. Por activación del pin RB0/INT. • Interrupción RBI. Por cambio en los estados en una o varias de las 4 líneas de más peso RB7:RB4

del puerto B. • Interrupción TOI. Por Desbordamiento del Timer0. • Interrupción EEI. Por la finalización de la escritura en el EEPROM de datos.

Las interrupciones utilizadas fueron en el desarrollo del programa fueron:

• Interrupción por RBI: Para modificar las variables Modo (Pin RB4), Hora/Dias (Pin RB5), Minutos/Meses (Pin RB6) y Segundos/Años (Pin RB7).

• Interrupción por TOI: Para que se vayan incrementando los segundos de manera automática. 6. Resultados 6.1 Tiempo de Retardo Multiplexacion Dinámica Como sabemos para realizar la multiplexacion cada 7-Segmentos debe durar un tiempo habilitado, para lo cual utilizamos un retardo. Las pruebas se hicieron con tiempos de 10ms, 5ms, 2ms, 1ms y 500us. Obteniéndose una buena multiplexacion con los valores de 1ms y 500us. Pudiéndose utilizar cualquiera de las dos.

Page 7: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

7

6.2 Carga Del Valor y Cantidad de Desbordamientos del TMR0 Al utilizar el TMR0 como temporizador toca cargarle una constante para determinar un intervalo de tiempo en concreto. Como se está utilizando un Cristal de Cuarzo de 4MHz el TMR0 se incremente cada 1us con lo que se desbordaría a los 256us debido a que es un registro de 1byte,pero se le puede asignar un Prescaler (divisor de frecuencia) para obtener tiempos mayores. Como el tiempo máximo que se puede obtener con el TMR0 utilizando el máximo prescaler es de 65.536 ms, se decidió trabajar con 50ms. Para conocer el valor que se debe cargar al TMR0 se utilizo la siguiente fórmula: [8]

· · 256 0 (1)

Donde Temporización es el tiempo que se desea obtener, Tcm es el periodo de un ciclo maquina y CargaTMR0 es el valor a cargar. [8]

50000 1 · 256 · 256 0 (2) 50000 65536 2560 (3) 0 65536 50000 (4) 0 60536 (5)

Tomando el resultado anterior y redondeando se obtuvo del valor de 61. Para calcular cuantas veces tiene que desbordarse el TMR0, debemos conocer cuantas veces esta contenido 50ms en un 1s, entonces realizando una simple división:

!"

#$%!$&'" (6)

20 (7) Por lo tanto de lo anterior se puede inferir que para que transcurra un segundo el TMR0 ha de desbordarse 20 veces. 7. Conclusiones Podemos concluir que:

• Los microcontroladores son elementos programables que nos permiten ahorrar espacio y elementos al momento de realizar un proyecto teniendo muy en cuenta cuáles son sus características físicas externas e internas y el modo de funcionamiento.

• Los microcontroladores poseen recursos como las interrupciones que nos facilitan la captura de

datos externos y realizar temporizaciones internas. • Para obtener una excelente visualización utilizando la multiplexacion dinámica es necesario tener

habilitado cada 7-segmentos 1ms o menos. • El valor a cargar al TMR0 para obtener una temporización de 50 ms es de 61.

• La cantidad de veces que tiene que desbordarse el TMR0 para que transcurra un segundo es de 20.

Page 8: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

8

8. Referencias [1] Palacios E., Remiro F., y López L. (2006) Microcontrolador PIC16F84. En: Palacios E., Remiro F., y López L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edición. México, AlfaOmega, p.1-9. [2] Que es el LED? [Internet] Sistema De Información Energética de Guanajuato. Disponible desde: <http://energia.guanajuato.gob.mx/siegconcyteg/eventosieg/archivos/AI_Led.pdf> [Acceso 3 de Diciembre 2011] [3] Aranzabal Olea A. Transistor De Union Bipolar BJT [Internet] Universidad Nacional de Educación a Distancia. Disponible desde: <http://www.uned.es/ca-bergara/ppropias/Morillo/web_et_dig/02_semiconduc/transistores.pdf> [Acceso 3 de Diciembre 2011] [4] Floyd T. (2000) Funciones De Lógica Combinacional. En: Floyd T. Fundamentos De Sistemas Digitales 7ª Edición. España, Prentice Hall, p.358-359. [5] Floyd T. (2000) Algebra de Boole y Simplificación Lógica. En: Floyd T. Fundamentos De Sistemas Digitales 7ª Edición. España, Prentice Hall, p.254-257. [6] Floyd T. (2000) Funciones De Logica Combinacional. En: Floyd T. Fundamentos De Sistemas Digitales 7ª Edición. España, Prentice Hall, p.379-381. [7] Palacios E., Remiro F., y López L. (2006) Interrupciones. Lectura de Entradas. En: Palacios E., Remiro F., y López L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edición. México, AlfaOmega, p.253-270. [8] Palacios E., Remiro F., y López L. (2006) TMR 0. En: Palacios E., Remiro F., y López L. Microcontrolador PIC16F84 Desarrollo De Proyectos 2nd Edición. México, AlfaOmega, p.223-234

Page 9: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

9

ANEXOS

Anexo 1. Código Del Programa. LIST P=16F84A INCLUDE <P16F84A.INC> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC CBLOCK 0Ch ; Definimos un bloque de constantes segu ; Registros de las unidades de los segundos segd ; Registros de las decenas de los segundos

minu ; Registros de las unidades de los minutos mind ; Registros de las decenas de los minutos horu ; Registros de las unidades de las horas hord ; Registros de las decenas de las horas tmr ; Registro de las veces que se ha desbordado el TMR0 modo ; Registro del tipo de modo diasu ; Registros de las unidades de los días diasd ; Registros de las decenas de los días mesesu ; Registros de las unidades de los meses mesesd ; Registros de las decenas de los meses añosu ; Registros de las unidades de los años

añosd ; Registros de las decenas de los años diasauxu ; Registros auxiliar de las unidades de los días diasauxd ; Registros auxiliar de las decenas de los días GuardaW ; Registros para guardar el valor de W ENDC org 0 goto inicio org 4 btfsc INTCON,RBIF ; Verificamos si la interrupción fue por interruptores goto interrbi ; si lo fue nos vamos a la subrutina de interruptores goto intertmr ; sino nos vamos a la subrutina de TMR0 ;*:*:*:*:*:*:*CONFIGURACIÓN PUERTOS E INTERRUPCIONES*:*:*:*:*:*:*:* inicio bsf STATUS,RP0 ; Pasamos al banco 1 movlw b'11110000' ; Configuramos el nibble mas alto como entrada movwf TRISB ; y el más bajo como salida del puerto B movlw b'00000000' movwf TRISA ; Configuramos el puerto A como salida movlw b'00000111' movwf OPTION_REG ; Asignamos el prescaler de 256 al TMR0 bcf STATUS,RP0 ; Pasamos al banco 0 movlw .61 ; Cargamos el TMR0 con el valor correspondiente para un movwf TMR0 ; retardo de 50 ms movlw b'10101000' ; Configuro interrupción por RB7:RB4, por TMR0 y general

Page 10: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

10

movwf INTCON clrf PORTB ; Inicializamos Los puertos en 0 clrf PORTA clrf modo bsf modo,0 ; Iniciamos en modo hora call borrarregh ; Inicializamos los registros de las horas en 0 call borrarregd ; Inicializamos los registros de los días en 0 ;*:*:*:*:*:*:*:*PROGRAMA PRINCIPAL*:*:*:*:*:*:*:*:* Principal

btfsc modo,0 ; Verificamos en qué modo se encuentra goto mostrarh ; Si esta en hora mostramos la hora goto mostrard ; Si esta en calendario mostramos la fecha ;*:*:*:*:*:*:*:*:*INTERRUPCIONES*:*:*:*:*:*:*:* ;*:*:*:*:*:*:*:RBI:*:*:*:*:*:*:* interrbi movwf GuardaW ; Guardamos el contenido de W btfsc PORTB,4 ; verificamos si se ha presionado el interruptor cambiar modo call cambmodo ; Cambiamos a modo calendario o viceversa btfsc modo,0 ; Verificamos en qué modo se encuentra goto incmenhoras ; Si esta en hora incrementamos las horas goto incmendias ; Si esta en calendario incrementamos la fecha incmenhoras btfsc PORTB,7 ; Incrementar SEGUNDOS call incseg1 btfsc PORTB,6 ; Incrementar MINUTOS call incmin1b btfsc PORTB,5 ; Incrementar HORAS call inchor1b call verhoru ; Verificamos la Hora bcf INTCON,RBIF ; Borramos bit indicador de interrupción por RB7:RB0 call Retardo_100ms ; Este retardo es para evitar rebotes call Retardo_50ms movf GuardaW,W ; Cargamos a W con su valor previamente guardado retfie incmendias btfsc PORTB,5 ; Incrementar DÍAS call incdias1 btfsc PORTB,6 ; Incrementar MESES call incmeses1b btfsc PORTB,7 ; Incrementar AÑOS

Page 11: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

11

call incaños1b call verdiasmes ; Verificamos los Días dependiendo del Mes call vermesesu ; Verificamos Los Meses bcf INTCON,RBIF ; Borramos bit indicador de interrupción por RB7:RB0 call Retardo_100ms ; Este retardo es para evitar rebotes call Retardo_50ms movf GuardaW,W ; Cargamos a W con su valor previamente guardado retfie ;*:*:*:*:*:*:*CAMBIO DE MODO*:*:*:*:*:* cambmodo

btfsc modo,0 ; Si esta en modo hora cambio a calendario goto modocalen btfss modo,0 ; Si esta en calendario cambio a hora goto modohora return modohora

bsf modo,0 ; Activo modo hora return modocalen

bcf modo,0 ; Activo modo calendario return ;*:*:*:*:*:*:*:TMR0:*:*:*:*:*:*:* intertmr

movwf GuardaW ; Guardamos el contenido de W movlw .61 ; Cargamos el TMR0 con el valor correspondiente para un movwf TMR0 ; retardo de 50 ms inctmr incf tmr,F movf tmr,W sublw .20 ; Le restamos el valor correspondiente a la cantidad de veces btfsc STATUS,Z ; que tiene que desbordarse para cumplir un tiempo de 1s call incdeseg ; si se cumple incrementamos los segundos bcf INTCON,T0IF ; Borramos el bit indicador de interrupción por TMR0 movf GuardaW,W ; Cargamos a W con su valor previamente guardado retfie incdeseg

clrf tmr ; Borramos el registro tmr call incseg1 ; Incrementamos un segundo call verhoru ; verificamos la hora return ;*:*:*:*:*:*:*:*BORRADO DE REGISTROS*:*:*:*:*:*:*:*

Page 12: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

12

borrarregh1 call incdias1 ; Se incrementan los segundos

call verdiasmes ; Se verifica los días dependiendo del mes call vermesesu ; Se verifican los meses borrarregh

clrf segu ; Borramos todos los registros pertenecientes a las horas clrf segd clrf minu clrf mind clrf horu clrf hord return borrarregd

clrf diasu ; Borramos todos los registros pertenecientes al calendario bsf diasu,0 ; y los inicializamos clrf diasd clrf mesesu bsf mesesu,0 clrf mesesd clrf añosu clrf añosd return ;*:*:*:*:*:*:*:*INCREMENTAR REGISTROS*:*:*:*:*:*:*: * ;*:*:*:*:*:*:*:*HORAS*:*:*:*:*:*:*:* incseg1 incf segu,F ; Incrementamos las unidades de los segundos movf segu,W sublw .10 ; Si las unidades de los segundos se han btfsc STATUS,Z ; incrementado en 10 goto incseg10 ; incrementamos las decenas de los segundos return incseg10

clrf segu ; Borramos las unidades de los segundos incf segd,F ; Incrementamos las decenas de los segundos movf segd,W sublw .6 ; Si las decenas de los segundos se han btfsc STATUS,Z ; incrementado en 6 goto incmin ; incrementamos los minutos return incmin btfss INTCON,RBIF ; Verifica si el incremento fue por un interruptor goto incmin1 ; Sino fue, incremento los minutos clrf segd ; Borramos las decenas de los segundos return incmin1

Page 13: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

13

clrf segd ; Borramos las decenas de los segundos incmin1b

incf minu,F ; Incrementamos las unidades de los minutos movf minu,W sublw .10 ; Si las unidades de los minutos se han btfsc STATUS,Z ; incrementado en 10 goto incmin10 ; incrementamos las decenas de los minutos return incmin10

clrf minu ; Borramos las unidades de los minutos incf mind,F ; Incrementamos las decenas de los minutos movf mind,W sublw .6 ; Si las decenas de los minutos se han btfsc STATUS,Z ; incrementado en 6 goto inchor ; incrementamos las horas return inchor btfss INTCON,RBIF ; Verifica si el incremento fue por un interruptor goto inchor1 ; Sino fue, incremento las horas clrf mind ; Borramos las decenas de los minutos return inchor1 clrf mind ; Borramos las decenas de los minutos inchor1b

incf horu,F ; Incrementamos las unidades de las horas movf horu,W sublw .10 ; Si las unidades de las horas se han btfsc STATUS,Z ; incrementado en 10 goto inchor10 ; incrementamos las decenas de las horas return inchor10

clrf horu ; Borramos las decenas de las horas incf hord,F ; Incrementamos las decenas de los minutos movf hord,W sublw .10 ; Si las decenas de las horas se han btfsc STATUS,Z ; incrementado en 10 clrf hord ; Borramos las decenas de las horas return ;*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:* incdias1

incf diasu,F ; Incrementamos las unidades de los días movf diasu,W sublw .10 ; Si las unidades de los días se han btfsc STATUS,Z ; incrementado en 10 goto incdias10 ; incrementamos las decenas de los días return

Page 14: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

14

incdias10

clrf diasu ; Borramos las unidades de los días incf diasd,F ; Incrementamos las decenas de los días return incmeses1

clrf diasd ; Borramos las decenas de los días clrf diasu ; Borramos e inicializamos las unidades bsf diasu,0 ; de los días incmeses1b

incf mesesu,F ; Incrementamos las unidades de los meses movf mesesu,W sublw .10 ; Si las unidades de los meses se han btfsc STATUS,Z ; incrementado en 10 goto incmeses10 ; incrementamos las decenas de los meses return incmeses10

clrf mesesu ; Borramos las unidades de los meses incf mesesd,F ; Incrementamos las decenas de los meses return incaños1

clrf mesesd ; Borramos las decenas de los meses clrf mesesu ; Borramos e inicializamos las unidades bsf mesesu,0 ; de los meses incaños1b

incf añosu,F ; Incrementamos las unidades de los años movf añosu,W sublw .10 ; Si las unidades de los años se han btfsc STATUS,Z ; incrementado en 10 goto incaños10 ; Incrementamos las decenas de los años return incaños10

clrf añosu ; Borramos las unidades de los años incf añosd,F ; Incrementamos las decenas de los años movf añosd,W sublw .10 ; Si las decenas de los años se han btfsc STATUS,Z ; incrementado en 10 clrf añosd ; Borramos las decenas de los años return ;*:*:*:*:*:*:*VERIFICAR REGISTROS*:*:*:*:*:* ;*:*:*:*:*:*:*:*:*:*HORA*:*:*:*:*:*:*:*:*:* verhoru

movf horu,W

Page 15: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

15

sublw .4 ; Verificamos si las unidades de las horas btfsc STATUS,Z ; han llegado a 4, si han llegado goto verhord ; verificamos las decenas de las horas return verhord

movf hord,W sublw .2 ; Verificamos si las decenas de las horas btfsc STATUS,Z ; han llegado a 2, si han llegado goto verhor ; verificamos si fue por interruptor return verhor btfss INTCON,RBIF ; Verifica si el incremento fue por un interruptor goto borrarregh1 ; Sino fue, reinicio la hora e incremento 1 día clrf hord ; si fue, reinicio el reloj solamente clrf horu return ;*:*:*:*:*:*:*:*:*:*:*:*MESES*:*:*:*:*:*:*:*:*.*:* vermesesu

movf mesesu,W sublw .3 ; Verificamos si las unidades de los meses btfsc STATUS,Z ; han llegado a 4, si han llegado goto vermesesd ; verificamos las decenas de los meses return vermesesd

movf mesesd,W sublw .1 ; Verificamos si las decenas de las horas btfsc STATUS,Z ; han llegado a 1, si han llegado goto vermeses ; verificamos si el incremento fue por interruptor return vermeses

btfss INTCON,RBIF ; Verifico si el incrementos fue por un interruptor goto incaños1 ; Sino fue, incrementos los años clrf mesesd ; si fue, borramos e inicializamos los meses clrf mesesu bsf mesesu,0 return ;*:*:*:*:*:*:*:*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*:* :*:*:*:* verdiasmes

movf mesesu,W btfsc mesesd,0 ; Verificamos si los meses han llegado a 10 addlw .10 ; si han llegado, le sumo 10 a las unidades call tabladias ; Llamamos tabla de los días dependiendo del mes call descnumero ; Descomponemos el numero en unidades y decenas

Page 16: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

16

verdiasu

movf diasu,W subwf diasauxu,F ; Verificamos si las unidades de los días son iguales btfsc STATUS,Z ; si lo son goto verdiasd ; pasamos a verificar las decenas de los días return verdiasd

movf diasd,W subwf diasauxd,F ; Verificamos si las decenas de los días son iguales btfsc STATUS,Z ; si lo son goto verdias ; Verificamos si el incremento fue por interruptor return verdias btfss INTCON,RBIF ; Verifico si el incremento fue por interruptor goto incmeses1 ; Sino fue, incremento los meses clrf diasd ; si fue, borramos e inicializamos los días clrf diasu bsf diasu,0 return tabladias

addwf PCL,F retlw .0 retlw .32 retlw .29 retlw .32 retlw .31 retlw .32 retlw .31 retlw .32 retlw .32 retlw .31 retlw .32 retlw .31 retlw .32 descnumero

clrf diasauxd movwf diasauxu unidad movlw .10 subwf diasauxu,F btfsc STATUS,C goto decena addwf diasauxu,F return decena incf diasauxd,F goto unidad

Page 17: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

17

;*:*:*:*:*:*:*:*:*MOSTRAR REGISTROS*:*:*:*:*:*:*:* ;*:*:*:*:*:*:*:*:*:*:*:*:*HORAS*:*:*:*:*:*:*:*.*:*: *:* mostrarh

movlw b'00000101' movwf PORTA ; Habilitamos el primer 7-Segmentos movf segu,W movwf PORTB ; Mostramos las unidades de los segundos call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00001001' movwf PORTA ; Habilitamos el segundo 7-Segmentos movf segd,W movwf PORTB ; Mostramos las decenas de los segundos call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00001101' movwf PORTA ; Habilitamos el tercer 7-Segmentos movf minu,W movwf PORTB ; Mostramos las unidades de los minutos call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00010001' movwf PORTA ; Habilitamos el cuarto 7-Segmentos movf mind,W movwf PORTB ; Mostramos las decenas de los minutos call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00010101' movwf PORTA ; Habilitamos el quinto 7-Segmentos movf horu,W movwf PORTB ; Mostramos las unidades de las horas call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00011001' movwf PORTA ; Habilitamos el sexto 7-Segmentos movf hord,W movwf PORTB ; Mostramos las unidades de las horas call Retardo_1ms ; Esperamos un tiempo clrf PORTA clrf PORTB goto principal

Page 18: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

18

;*:*:*:*:*:*:*:*:*:*:*:*:*DIAS*:*:*:*:*:*:*:*:*:*:* : mostrard

movlw b'00000100' movwf PORTA ; Habilitamos el primer 7-Segmentos movf añosu,W movwf PORTB ; Mostramos las unidades de los días call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00001000' movwf PORTA ; Habilitamos el segundo 7-Segmentos movf añosd,W movwf PORTB ; Mostramos las decenas de los días call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00001100' movwf PORTA ; Habilitamos el tercer 7-Segmentos movf mesesu,W movwf PORTB ; Mostramos las unidades de los meses call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00010000' ; Habilitamos el cuarto 7-Segmentos movwf PORTA movf mesesd,W movwf PORTB ; Mostramos las decenas de los meses call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00010100' movwf PORTA ; Habilitamos el quinto 7-Segmentos movf diasu,W movwf PORTB ; Mostramos las unidades de las horas call Retardo_1ms ; Esperamos un tiempo clrf PORTB movlw b'00011000' movwf PORTA ; Habilitamos el sexto 7-Segmentos movf diasd,W movwf PORTB ; Mostramos las decenas de las horas call Retardo_1ms ; Esperamos un tiempo clrf PORTA clrf PORTB goto principal ;*:*:*:*:*:*:*RETARDOS*:*:*:*:*:*:*:* CBLOCK

Page 19: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

19

R_ContA ; Contadores para los retardos. R_ContB R_ContC ENDC Retardo_100ms movlw d'100' ; Esta subrutina de retardo fue tomada del libro goto Retardos_ms ; Microcontrolador PIC16F84 Desarrollo de Retardo_50ms ; Proyectos de Enrique Palacios. movlw d'50' goto Retardos_ms Retardo_1ms . movlw d'1' Retardos_ms movwf R_ContB R1ms_BucleExterno movlw d'249' movwf R_ContA R1ms_BucleInterno nop decfsz R_ContA,F goto R1ms_BucleInterno decfsz R_ContB,F goto R1ms_BucleExterno return END

Page 20: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA

Anexo 2. Diagramas, PCB y Fotos El diagrama del circuito es:

AUTÓNOMA DEL CARIBE

y Fotos del circuito.

Figura 7. Diagrama del Reloj. Figure 7. Diagram of the Clock.

20

Page 21: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

21

Figura 8. PCB Vista Real de la Cara Inferior. Figure 8. PCB Real view of the lower face.

Figura 9. PCB Vista Real de la Cara Superior. Figure 9. PCB Real view of the top face.

Page 22: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA DEL CARIBE

22

Figura 10. Impreso De la Cara Inferior. Figure 10. Printed of the lower face.

Figura 11. Diagrama del Reloj. Figure 11. Printed of the top face.

Page 23: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA

Figura 12.

Figura 1

AUTÓNOMA DEL CARIBE

Figura 12. Foto Del circuito de la cara superior. Figure 12. Photo of the top face circuit.

Figura 13. Foto Del circuito de la cara del lado.

Figure 13. Photo of the beside face circuit.

23

Page 24: 74716174 Proyecto Reloj Digital Con Calendario Realizado Con PIC16F84A (1)

UNIVERSIDAD AUTÓNOMA

AUTÓNOMA DEL CARIBE

Figura 14. Foto Del circuito de la cara inferior. Figure 14. Photo of the lower face circuit

24

.