9
  1 PRÁCTICA 2, RELOJ DIGITAL CON LCD BASADO EN TIMERS R esumen:  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 código se basa en el uso de las interrupciones, específicamente utilizamos el timer1 y sus características para obtener la funcionalidad del reloj. Para poder ajustar la hora en nuestro reloj incluimos tres push buttons; un botón que habilita el ajuste, un botón que permite ajustar los minutos y el último botón que permite ajustar las horas. La hora y el menú de ajuste son mostrados en la LCD, obteniendo final mente un reloj preciso y fácil de usar para cualquier usuario. Introducción En este reporte presentamos la metodología que utilizamos para construir nuestro reloj digital, abarcando desde la parte de programación hasta la parte de montaje del circuito. Es importante resaltar que asumimos que el lector tiene nociones básicas de programación en lenguaje C, uso de interrupciones y circuitos electrónicos. El objetivo principal de la práctica es utilizar el microcontrolador PIC18F4550 para construir un reloj digital ajustable, realizando un código en lenguaje C basado en el uso de interrupciones y usando una LCD para mostrar la hora del reloj. Para facilitar la comprensión de la práctica presentamos en la siguiente sección una serie de conceptos básicos que serán de utilidad para el lector. Marco Teórico 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 periféricos. Este circuito integrado programable, es capaz de ejecutar las órdenes grabadas en su memoria. Las órdenes a ejecutar se pueden describir en un código creado en diferentes lenguajes de programación compatib les 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

Reloj Digital Con Pic

  • Upload
    ivanmcx

  • View
    610

  • Download
    30

Embed Size (px)

DESCRIPTION

reporte de practica 1, reloj digital con interrupciones, en ccs.

Citation preview

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