Você está na página 1de 9

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

memoria (RAM y ROM), puertos de


entrada y salida y perifricos.

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.

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 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.

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.

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

Fig 1 PIC18F4550

Es un circuito integrado que en su interior


contiene una unidad central de
procesamiento (CPU), unidades de

Lenguaje Ensamblador

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.

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.

Compilador CCS

Timer1

Un compilador es un software que nos va


a permitir crear nuestro cdigo con el cual
programaremos nuestro PIC18F4550.

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.

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

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.

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.

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.

La programacin en C tiene una gran


facilidad para escribir cdigos compactos
y sencillos a la vez.

Interrupciones

Como
caractersticas
del
Timer1
podemos destacar las siguientes:

Una interrupcin detiene la ejecucin de


un programa y pasa a la rutina de servicio
del evento que provoca la interrupcin.

Puede funcionar con un oscilador


externo y trabajar a una frecuencia
distinta a la del oscilador principal
del PIC.

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).
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.
La frmula para determinar los
tiempos del Timer1 cuando es
utilizado como temporizador (reloj
interno) es la siguiente:

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).

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.
Fig 3 LCD

Proteus 8.1
Desarrollo

Es una herramienta de software que


permite la simulacin de circuitos
electrnicos con microcontroladores.

Para la construccin de nuestro reloj


seguimos la siguiente metodologa:

Programador K150

1.-Realizamos el cdigo en lenguaje C


utilizando el compilador CCS.

Es un programador de PICS de bajo


costo. Sirve para cargar nuestro cdigo en
el PIC18F4550. Fue utilizado junto con el
software microbrn.

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.

Como primera parte realizamos


programacin para nuestro reloj.
cdigo utilizado lo mostramos
continuacin:

la
El
a

Fig 5 Interrupcin del timer1

El valor de 5536 lo convertimos a


hexadecimal para cargarlo en la
instruccin set_timer.
Fig 4 Cabecera de nuestro cdigo

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.

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

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.

(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 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.

Fig 9 Circuito y simulacin


Fig 7 Condicin while

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.

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.

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 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 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.
5

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 13 Reloj correctamente configurado

Obteniendo as un reloj preciso


correctamente configurado. El paso de la
configuracin se puede repetir las veces
que sea necesario.

Fig 11 Men de configuracin

Anlisis

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.

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.

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.

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
6

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.

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.

Conclusiones

El resultado final fue satisfactorio ya que


obtuvimos un reloj funcional, tal como
cualquier reloj convencional.

El uso de interrupciones en la
programacin de microcontroladores es
comn y ofrece una gran cantidad de
aplicaciones.

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/(

= 65536 [0.005/(

4
)]
Frecuencia Oscilador

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.

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-comotemporizador.html, 12 de octubre de 2014.
3. http://www.ecured.cu/index.php/Lenguaje_de_Programaci%C3%B3n_C, 12
octubre de 2014.

de

Você também pode gostar