reloj digital con pic
DESCRIPTION
reporte de practica 1, reloj digital con interrupciones, en ccs.TRANSCRIPT
-
1
PRCTICA 2, RELOJ DIGITAL CON LCD BASADO EN TIMERS
Resumen: Construimos un reloj digital con hora ajustable utilizando un PIC18f4550 y una
LCD. El programa cargado en el pic fue realizado en el lenguaje C utilizando el compilador
CCS, y nuestro cdigo se basa en el uso de las interrupciones, especficamente utilizamos
el timer1 y sus caractersticas para obtener la funcionalidad del reloj. Para poder ajustar la
hora en nuestro reloj incluimos tres push buttons; un botn que habilita el ajuste, un botn
que permite ajustar los minutos y el ltimo botn que permite ajustar las horas. La hora y el
men de ajuste son mostrados en la LCD, obteniendo finalmente un reloj preciso y fcil de
usar para cualquier usuario.
Introduccin
En este reporte presentamos la
metodologa que utilizamos para construir
nuestro reloj digital, abarcando desde la
parte de programacin hasta la parte de
montaje del circuito. Es importante
resaltar que asumimos que el lector tiene
nociones bsicas de programacin en
lenguaje C, uso de interrupciones y
circuitos electrnicos.
El objetivo principal de la prctica es
utilizar el microcontrolador PIC18F4550
para construir un reloj digital ajustable,
realizando un cdigo en lenguaje C
basado en el uso de interrupciones y
usando una LCD para mostrar la hora del
reloj.
Para facilitar la comprensin de la prctica
presentamos en la siguiente seccin una
serie de conceptos bsicos que sern de
utilidad para el lector.
Marco Terico
Microcontrolador
Es un circuito integrado que en su interior
contiene una unidad central de
procesamiento (CPU), unidades de
memoria (RAM y ROM), puertos de
entrada y salida y perifricos.
Este circuito integrado programable, es
capaz de ejecutar las rdenes grabadas
en su memoria. Las rdenes a ejecutar se
pueden describir en un cdigo creado en
diferentes lenguajes de programacin
compatibles con el microcontrolador.
PIC18F4550
El PIC18F4550 pertenece a la familia de
microcontroladores PIC18 de Microchip.
Es un microcontrolador de 8 bits de bajo
costo que tiene prestaciones media/altas
que lo hacen apto para aplicaciones
industriales.
Fig 1 PIC18F4550
Lenguaje Ensamblador
-
2
Es un lenguaje de programacin de bajo
nivel, y constituye la representacin ms
directa del cdigo mquina especfico
para cada arquitectura de computadoras
legible por un programador. Este es el
lenguaje utilizado para crear el cdigo
utilizado en nuestra prctica.
Compilador CCS
Un compilador es un software que nos va
a permitir crear nuestro cdigo con el cual
programaremos nuestro PIC18F4550.
CCS desarroll el primer compilador de C
para microcontroladores Microchip hace
ms de 20 aos. Entre las caractersticas
importantes de este compilador se
encuentra la posibilidad de definir,
configurar y gestionar fcilmente las
interrupciones
Lenguaje C
Es tambin conocido como Lenguaje de
programa de sistemas. El lenguaje C es
del tipo lenguaje estructurado como son
Pascal, Fortran y Basic. Al ser un lenguaje
estructurado se considera como un
lenguaje de alto nivel. Para simplificar el
funcionamiento del lenguaje C tiene
incluidas libreras de funciones que
pueden ser incluidas haciendo referencia
la librera que las incluye.
La programacin en C tiene una gran
facilidad para escribir cdigos compactos
y sencillos a la vez.
Interrupciones
Una interrupcin detiene la ejecucin de
un programa y pasa a la rutina de servicio
del evento que provoca la interrupcin.
Esta es otra forma de ver lo que pasa con
las interrupciones:
Cuando estamos trabajando en la
computadora y repentina mente suena
nuestro celular, en ese momento dejamos
la computadora y atendemos la llamada
de nuestro celular, al terminar la llamada
continuamos trabajando en la
computadora.
Timer1
El PIC18F4550 cuenta con cuatro timers;
timer0, timer1, timer2 y timer3. El timer0
es de bits, y los otros tres son de 16 bits.
Para esta prctica utilizamos el timer1.
El Timer1 es un temporizador/contador
ascendente parecido al TMR0, con
algunas peculiaridades que lo hacen muy
interesante a la hora de incluir
temporizadores en nuestros programas.
Como ya lo mencionamos, el timer1 se
trata de un contador de 16 bits cuyo valor
se almacena en dos registros de 8 bits el
TMT1H y el TMR1L, ambos registros se
pueden leer y escribir su valor durante la
ejecucin del programa.
Cuando el Timer1 est habilitado, el valor
de esos registros se incrementan desde
0000h a FFFFh y una vez que llega a su
mximo valor empieza desde 0
avisndonos de ello por medio de la
bandera TMR1F.
Si est activa la interrupcin por
desbordamiento del Timer 1 al
desbordarse el contador, el programa
entra en la funcin de tratamiento a la
interrupcin por desbordamiento del
Timer1.
Como caractersticas del Timer1
podemos destacar las siguientes:
o Puede funcionar con un oscilador
externo y trabajar a una frecuencia
distinta a la del oscilador principal
del PIC.
-
3
o Al igual que el TMR0 el Timer1
puede operar en dos modos; como
temporizador y como contador. El
modo de funcionamiento est
determinado por el tipo de reloj
seleccionado (si se usa reloj
interno funcionara como
temporizador, si se usa reloj
externo funcionar como
contador).
o El tiempo que se tarda en
incrementarse el contador se
suele llamar paso, el piso del
contador depende de la frecuencia
del oscilador y el preescalar
seleccionado.
o La frmula para determinar los
tiempos del Timer1 cuando es
utilizado como temporizador (reloj
interno) es la siguiente:
1 =
65536 [tiempo que queremos/(4
Frecuencia Oscilador)]
(1.0)
Para configurar el timer1 se deben utilizar
una serie de instrucciones, estas
instrucciones sern explicadas ms
adelante en la realizacin del programa.
Proteus 8.1
Es una herramienta de software que
permite la simulacin de circuitos
electrnicos con microcontroladores.
Programador K150
Es un programador de PICS de bajo
costo. Sirve para cargar nuestro cdigo en
el PIC18F4550. Fue utilizado junto con el
software microbrn.
Fig 2 Programador de PIC K150
LCD 16x2
La pantalla de cristal lquido o LCD (por
sus siglas en ingls: Liquid Crystal
Display) es un dispositivo electrnico
micro controlado de visualizacin grfica
para la presentacin de caracteres,
smbolos y nmeros. Dispone de 2 filas y
16 caracteres en cada fila y cada carcter
dispone de una matriz de 5x7 puntos
(pixeles).
Fig 3 LCD
Desarrollo
Para la construccin de nuestro reloj
seguimos la siguiente metodologa:
1.-Realizamos el cdigo en lenguaje C
utilizando el compilador CCS.
2.-Creamos el circuito el Proteus y una
vez teniendo nuestro cdigo realizamos la
simulacin.
3.-Comprobando el circuito en la
simulacin construimos el circuito en
fsico.
-
4
Como primera parte realizamos la
programacin para nuestro reloj. El
cdigo utilizado lo mostramos a
continuacin:
Fig 4 Cabecera de nuestro cdigo
En la cabecera nosotros designamos el
PIC que utilizamos, los nombres de
nuestras variables y el puerto que
utilizamos para comunicarnos con la LCD.
Para asignar el valor que debemos cargar
a nuestro timer1 debemos usar la
ecuacin (1.1). Como un segundo es un
tiempo demasiado grande en el mundo de
los microcontroladores, usaremos un
tiempo mltiplo de 1 segundo, en este
caso, queremos obtener una interrupcin
de 10 ms. El valor que debemos cargarle
al Timer ser igual a:
65536 [0.01 seg/(4
24MHz)]= 5536 (1.1)
En la cabecera designamos un valor de
48MHz y en la frmula utilizamos una
frecuencia de 24MHz. Esto se debe a que
ms adelante configuraremos el timer
para dividir la frecuencia entre dos.
Fig 5 Interrupcin del timer1
El valor de 5536 lo convertimos a
hexadecimal para cargarlo en la
instruccin set_timer.
As que en esta parte del cdigo
designamos lo que har nuestro timer.
Aqu con ayuda de los if, creamos las
condiciones de funcionamiento para
nuestro reloj.
Es importante destacar que incluimos un
contador que estar contando hasta 100
para obtener un segundo con los 10ms de
la interrupcin del timer.
A continuacin vamos a escribir nuestro
void main, que ser nuestro cdigo
principal.
Fig 6 Configuracin de nuestro timer
En esta parte tambin habilitamos el uso
de nuestra LCD, a incluimos el mensaje
principal que se mostrar, es este caso es
RELOJ DIGITAL.
-
5
Fig 7 Condicin while
En la condicin while (en espaol significa
mientras) incluimos lo que nuestro
programa estar haciendo mientras se
ejecuta nuestra interrupcin. Como se
puede apreciar en esta seccin incluimos
las condiciones que nos van a permitir
ajustar la hora del reloj mientras el botn
SET se mantenga presionado.
Fig 8 Parte final del programa
Por ultimo mostramos la hora en la lcd con
la instruccin printf. Y procedemos a
compilar nuestro cdigo.
Una vez que compilamos con xito
nuestro cdigo, continuamos con la
prctica creando el circuito en Proteus
para realizar nuestra simulacin. El
circuito que utilizamos se muestra a
continuacin.
Fig 9 Circuito y simulacin
La simulacin que realizamos nos mostr un
buen funcionamiento de nuestro programa y
de nuestro circuito, as que continuamos con
la prctica realizando nuestro circuito en
fsico.
Para poder incluir nuestro PIC18F4550 en el
circuito en fsico primero debemos cargarle
nuestro programa. Esto lo hicimos utilizando
la tarjeta programadora K150 y el software
microbrn.
Con el programa cargado armamos el
circuito en fsico quedando como se
muestra a continuacin.
Fig 10 Circuito en fsico del reloj digital
Con el circuito correctamente armado solo
nos queda simplemente alimentar el
circuito y probarlo.
El circuito debe alimentarse con 5 volts y
es importante asegurarse que las
conexiones del pic sean las correctas
para evitar que ste se queme.
-
6
Cuando alimentamos el circuito el reloj
comienza con los segundos, minutos y
horas en ceros, entonces ajustamos el
reloj con la hora actual de ese momento.
Para ajustar la hora dejamos presionado
el botn de ajuste y nos aparecer el
siguiente mensaje en la LCD:
Fig 11 Men de configuracin
En este men pudimos modificar la hora,
utilizando los otros dos push buttons de
minutos y horas hasta lograr introducir los
nmeros de la hora correcta.
Fig 12 Ajustando hora actual
Cuando introducimos la hora adecuada
solo hace falta dejar de presionar el botn
de ajuste para terminarla configuracin
del reloj.
Fig 13 Reloj correctamente configurado
Obteniendo as un reloj preciso
correctamente configurado. El paso de la
configuracin se puede repetir las veces
que sea necesario.
Anlisis
Como se puede observar en las ltimas
tres imgenes, logramos construir un reloj
digital fcil de configurar y con una
precisin que permite dar la hora correcta.
Esa precisin que obtuvimos fue gracias a
la correcta configuracin de nuestro
timer1. Obtener un tiempo de 10ms fue de
gran importancia para a partir de ese
tiempo conseguir el cambio de segundo a
segundo
Esos 10 ms logramos comprobarlos
observndolos con el osciloscopio.
Observamos una onda cuadrada con un
periodo de 20 ms, pero esta onda tena un
ciclo de trabajo del 50% por lo que la
duracin del tiempo que se mantena en
alto era de 10 ms.
De esta manera comprobamos que el
valor que obtuvimos de la ecuacin (1.1)
y que cargamos en el temporizador, nos
servira para construir nuestro reloj digital.
Para agregar a nuestro reloj la posibilidad
de configurar la hora, fue necesario
primero detener todas las interrupciones
-
7
de nuestro programa. Al principio no lo
hicimos por lo que cuando queramos
configurar la hora, observamos que los
minutos y las horas se iban
incrementando aun cuando no
presionbamos ningn botn. Adems
agregamos una lnea en nuestro cdigo
que pone en ceros a los segundos cuando
terminamos de configurar la hora, lo que
se debe tomar en cuenta a la hora de
ajustarla.
Conclusiones
El uso de interrupciones en la
programacin de microcontroladores es
comn y ofrece una gran cantidad de
aplicaciones.
El cdigo que realizamos para sta
prctica se simplific en gran medida al
utilizar el timer1 y sus caractersticas.
Tuvimos la oportunidad de realizar una
prueba con nuestro reloj. Lo comparamos
con un reloj que produce un sonido cada
vez que la aguja de los segundos cambia
de posicin. Esta prueba fue realizada
prcticamente por error, pero nos dimos
cuenta que los segundos de nuestro reloj
cambiaban cada vez que se escuchaba el
sonido del cambio de segundo del otro
reloj.
El resultado final fue satisfactorio ya que
obtuvimos un reloj funcional, tal como
cualquier reloj convencional.
-
8
Cuestionario
1. Qu es una interrupcin?
Una interrupcin detiene la ejecucin de un programa y pasa a la rutina de servicio del
evento que provoca la interrupcin. Dicha interrupcin ocurrir cada cierto tiempo
dependiendo del valor que tenga cargado en su configuracin.
2. Calcule el valor que se debe cargar al timer1 para obtener una interrupcin de 5ms
a partir de la ecuacin (1.1), tomando en cuenta una Frecuencia de Oscilacin de
24 MHz. El valor deber darse en nmero hexadecimal.
= 65536 [tiempo que queremos/(4
Frecuencia Oscilador)]
= 65536 [0.005/(4
24MHz)]
= 65536 30000
= 35,536
Ahora lo convertiremos a hexadecimal utilizando una calculadora que realiza esta funcin.
35,536 decimal = 8AD0 Este deber ser el valor que cargaremos en el Timer1.
-
9
Bibliografa
1. http://www.ccsinfo.com/content.php?page=compilers, 12 de octubre de 2014.
2. http://www.aquihayapuntes.com/indice-practicas-pic-en-c/uso-del-tmr1-como-
temporizador.html, 12 de octubre de 2014.
3. http://www.ecured.cu/index.php/Lenguaje_de_Programaci%C3%B3n_C, 12 de
octubre de 2014.