informe glcd

14
Implementacion de un cronometro con alarma utilizando lenguajes MikroC y Ensamblador Escuela de Electrónica y Telecomunicaciones, Facultad de Ingeniería, Universidad Nacional de Chimborazo, Riobamba, Ecuador. Samaniego Tello Raúl Arturo [email protected] Resumen: En el siguiente informe se describre el uso de temporizadores específicamente el TMR0 para crear un cronometro, el cual cuente con con 3 botones, mismos que tienen las funciones de inicio, pausa y alarma respectivamente. I. INTRODUCCIÓN: El Timer0 es un temporizador/contador ascendente de 8 bits, cuando trabaja con el reloj del PIC se le suele llama temporizador y cundo los pulsos los recibe de una fuente externa a través de la patilla RA4/TOCKI se le llama contador, pero digamos que es el mismo perro con dos collares diferentes. Para no liarnos con las patillas y el nombre de los registros voy a mostrar los registros y patillas implicadas solo en el TMR0 utilizando el PIC16f84, aunque podría ser otro cualquiera ya que este temporizador viene incorporado en todos los PIC. Patillaje: RA4/TOCKI: cuando el temporizador trabaje como contador, los pulsos externos los recibirá a través de esta patilla. OSC1/CLKIN y OSC2/CLKOUT: son para conectar el oscilador que nos determinará a la frecuencia que va a trabajar nuestro PIC, los dos tipos de osciladores más usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador). Nota: cuando las patillas traen más de una función separadas por la barra del siete quiere decir que según la configuración de los

Upload: raul-arturo-samaniego-tello

Post on 21-Nov-2015

23 views

Category:

Documents


2 download

DESCRIPTION

INFORME GLCD

TRANSCRIPT

Implementacion de un cronometro con alarma utilizando lenguajes MikroC y Ensamblador Escuela de Electrnica y Telecomunicaciones, Facultad de Ingeniera, Universidad Nacional de Chimborazo,Riobamba, Ecuador.Samaniego Tello Ral [email protected]

Resumen: En el siguiente informe se describre el uso de temporizadores especficamente el TMR0 para crear un cronometro, el cual cuente con con 3 botones, mismos que tienen las funciones de inicio, pausa y alarma respectivamente.

I. INTRODUCCIN:

El Timer0 es un temporizador/contador ascendente de 8 bits, cuando trabaja con el reloj del PIC se le suele llama temporizador y cundo los pulsos los recibe de una fuente externa a travs de la patilla RA4/TOCKI se le llama contador, pero digamos que es el mismo perro con dos collares diferentes. Para no liarnos con las patillas y el nombre de los registros voy a mostrar los registros y patillas implicadas solo en el TMR0 utilizando el PIC16f84, aunque podra ser otro cualquiera ya que este temporizador viene incorporado en todos los PIC.

Patillaje:

RA4/TOCKI: cuando el temporizador trabaje como contador, los pulsos externos los recibir a travs de esta patilla.OSC1/CLKIN y OSC2/CLKOUT: son para conectar el oscilador que nos determinar a la frecuencia que va a trabajar nuestro PIC, los dos tipos de osciladores ms usados son el XT (cristal de cuarzo) y el RC (resistencia y condensador).

Nota: cuando las patillas traen ms de una funcin separadas por la barra del siete quiere decir que segn la configuracin de los registros SFR que se muestran ms abajo se utilizarn de una manera o de otra.Banco de registros especficos (SFR) del PIC 16f84A:

Como podemos ver solo estn marcados de un color diferente los que estn implicados en el funcionamiento del TMR0, vamos a ver la funcin que tienen:

TMR0: es un registro del que podemos leer el valor del contador en tiempo real, pero tambin podemos escribir en l y alterar el valor de conteo.

OPTION: los bits que estn en color verde son los que estn implicados en la configuracin del TIMER0 PS0, PS1 y PS2: Configuracin del preescaler. El preescaler es un divisor de pulsos que est a la entrada del Timer-contador. El prescaler divide el nmero de pulsos que le entran al timer-contador o al Wachtdog. El factor de divisin es el siguiente (segn los valores de PS2, PS1 y PS0 respectivamente

PSA: Bit de asignacin de prescaler. Si est a "1" el prescaler se asigna a WDT (Wachtdog), si est a "0" se asigna al TMR0. TOSE: Bit de seleccin del tipo de flanco para el TMR0. A "1" se incrementa TMR0 por flanco descendente de RA4, a "0" se incrementa TMR0 por flanco ascendente de RA4. TOCS: Selecciona la entrada de reloj de TMR0. A "1" la entrada de reloj de TMR0 es por flanco de la patilla RA4, a "0" la entrada de reloj de TMR0 es por ciclo de reloj interno.Pero el PIC tambin permite que se produzca una interrupcin por desbordamiento del TMR0.Cuando se produce una interrupcin el programa abandona temporalmente lo que estaba haciendo para atender la subrutina de interrupcin, pero antes guarda en una regin especial de la memoria llamada pila la direccin de la siguiente instruccin de programa, para que cuando acabe la subrutina de interrupcin pueda seguir ejecutando el programa por donde se haba quedado.

El registro que configura todas las interrupciones es el INTCON, como veis est mapeado en los dos bancos, una cosa muy til cuando se trabaja en ensamblador para no tener que cambiar de banco constantemente para su configuracin, pero que en C no es necesario saber ya que es el compilador el que se encarga de gestionar esto de una manera transparente para el programador.Pues bien vamos a ver lo que significa cada uno de los bits que estn implicados en la interrupcin por el TMR0: TOIF: solo se puede leer su valor, es un Flag o bandera que se pone a 1 cuando se produce un desbordamiento del TMR0, (este o no este configurado para producir una interrupcin). Cuando se trabaja en Ensamblador, este bit hay que ponerlo a "0" por programa, con CCS no tenemos que preocuparnos por ello. (je, je,.. otra cosa que nos ahorramos) TOIE (Habilita la interrupcin por desbordamiento de TMR0). Si este bit esta a "1" la interrupcin por desbordamiento de TMR0 es posible. GIE (Habilita las interrupciones globalmente). Este bit permite que cualquier interrupcin sea posible. Para poder usar cualquier interrupcin hay que habilitarla globalmente e individualmente.Bueno como veis hay varias variables que podemos utilizar a nuestro antojo para utilizar este recurso del PIC, la frmula que las relaciona es la siguiente:

Y para ver como funciona todo esto con el compilador CCS vamos hacer el siguiente ejemplo:Se trata de usar el Timer0 para generar una interrupcin cada 32 ms utilizando el reloj interno del microcontrolador. La funcin de interrupcin se utilizar para hacer parpadear un Led en la patilla RB7 del PIC.Para ello vamos a utilizar en el circuito un cristal de cuarzo de 4 MHz.Si nos fijamos en la formula anterior tenemos Interrupt_TMR0= 32 ms que es el valor que nos da el ejemplo, tambin tenemos F.Oscilador = 4 MHz y nos quedan dos valores para tener resueltas todas las variables de la ecuacin el valor TMR0 que ya hemos dicho que se puede sobrescribir su valor en cualquier momento durante la ejecucin del programa y el Prescaler, pues le damos el valor que queramos al Prescaler por ejemplo 256 y calculamos en la frmula el valor que tenemos que escribir en el registro TMR0 para obtener los 32 ms:

II. OBJETIVOS

Objetivo General: Disear e implementar un cronometro utilizando la interrupcin tmr0. Objetivos Especficos: Implementar el contador timer 0 utilizando lenguaje C. Implementar el contador timer 0 utilizando lenguaje ensamblador.

Hacer la implementacin fsica y demostracin del funcionamiento del programa.

III. MARCO TERICO

PIC 16F877A

Figura 2. Imagen Microcontrolador 16F877A

El 16F877A es uno de los microcontroladores PIC ms populares y es fcil ver por qu - se trata de una DIP pinout de 40 pines y tiene muchos perifricos internos. La nica desventaja que podra nivelar en ella es que no tiene una fuente de reloj interno como la mayora de la otra ms moderna PIC. Hay una parte 16F887 / Una alternativa que tiene casi la misma funcionalidad que el 16F887A pero tambin incluye un reloj interno como el 16F88 y 18F4550 adems de que tiene la tecnologa nanovatio.MIKROC

Figura 3. Programacin de un Pic en MikroC

Este lenguaje es muy similar al C estndar, no obstante en determinados aspectos difiere del ANSI estndar en algunas caractersticas. Algunas de estas diferencias se refieren a las mejoras, destinadas a facilitar la programacin de los microcontroladores PIC, mientras que las dems son la consecuencia de la limitacin de la arquitectura del hardware de los PIC. Aqu vamos a presentar caractersticas especficas del lenguaje mikroC en la programacin de los microcontroladores PIC. El trmino C se utilizar para referirse a las caractersticas comunes de los lenguajes C y mikroC.

GLCD

Unapantalla grfica de cristal lquidooGLCD(acrnimo delinglsGraphic Liquid Crystal Display) es unapantalla planaformada por una matriz depxelesmonocromos colocados delante de una fuente de luz o reflectora. A menudo se utiliza en dispositivos electrnicos de pilas, ya que utiliza cantidades muy pequeas de energa elctrica, hay versiones de pantallas con diferentes controladores embebidos, como el Samsung KS0107, Samsung KS0108 o el Toshiba T6963.Dispone de unamemoria RAMinterna del mismo tamao de la capacidad que dispone la pantalla, por ejemplo si una pantalla tiene un tamao de 128 pixeles de largo por 64 pixeles de alto (128x64) tiene una memoria RAM interna de la misma capacidad (128x64).Por lo general son manejados pormicrocontroladorespara la configuracin y utilizacin de la misma. Caractersticas nformado por una matriz de puntos de visualizacin de 128 pixeles de largo por 64 pixeles de alto. Fcil manejo con microprocesadores de 8-Bits. Bajo consumo. Contiene dos controladores internos un KS0108B y KS0107B.IV. METODOLOGA

Diagrama de bloques:Figura 5. Diagrama de Bloque Metodolgico

PROGRAMACINLenguaje MikroCunsigned cnt;int seg;int minu;int mind;int inicio;int pausa;int alarma;int tempu;int tempd;int alarmu;int alarmd;void interrupt() { if (TMR0IF_bit) { cnt++; // increment counter TMR0IF_bit = 0; // clear TMR0IF TMR0 = 96;

}}

void main() { seg=0; minu=0; mind=0; OPTION_REG = 0x84; // Assign prescaler to TMR0 TRISB = 00000111; // PORTB is output TRISD = 0; // PORTB is output PORTD = 0xFF; // Initialize PORTB TRISC = 0; // PORTB is output PORTC = 0xFF; // Initialize PORTB TMR0 = 96; // Timer0 initial value INTCON = 0xA0; // Enable TMRO interrupt cnt = 0; // Initialize cnt PORTD=minu; PORTC=mind; while(1){ if ( PORTB.B2 == 1){ alarma=1; Delay_ms(500); } if (alarma==1){ alarma=0; while (alarma==0){ if ( PORTB.B1 == 1){ minu++; Delay_ms(200); } if ( PORTB.B2 == 1){ alarma=1; } if (minu>=10){ mind++; minu=0; } if (mind>=6){ minu=0; mind=0; } PORTD=minu; PORTC=mind; } alarmu=minu; alarmd=mind; minu=0; mind=0; PORTD=0; PORTC=0; alarma=0; Delay_ms(500); } if ( PORTB.B0 == 1){ inicio=1; } if (inicio==1) { do { if (cnt >= 400) { seg++; cnt = 0; // Reset cnt } if ( PORTB.B1 == 1){ pausa=1; } if (pausa ==1){ RB6_bit=1; pausa=0; Delay_ms(200); tempu=minu; tempd=mind; while(pausa==0){ PORTD=minu; PORTC=mind; if ( PORTB.B1 == 1){ pausa=1; } Delay_ms(500); PORTD=15; PORTC=15; if ( PORTB.B1 == 1){ pausa=1; } Delay_ms(500); } PORTD=minu; PORTC=mind; pausa=0; } if (cnt>200){ RB4_bit=1; } if (cnt=5){ minu++; seg=0; } if (minu>=10){ mind++; minu=0; } if (mind>=6){ minu=0; mind=0; } PORTD=minu; PORTC=mind; } while(1); } }}Lenguaje Ensambradorlist p=16f877a #include __CONFIG h'3FBA';Variables para el DELAY#define Led PORTB, 4#define Ledp PORTB, 6valor1 equ h'21'inicia equ h'22'pause equ h'23'tempd equ h'24'tempu equ h'25'CONTA EQU 0x20;Variable CONTA en direccin 0x20 hexadecimal

CERO EQU 0x00 ;0 UNO EQU 0x01 ;1 DOS EQU 0x02 ;2 TRES EQU 0x03 ;3 CUATRO EQU 0x04 ;4CINCO EQU 0x05 ;5 SEIS EQU 0x06 ;6 SIETE EQU 0x07 ;7 OCHO EQU 0x08 ;8 NUEVE EQU 0x09 ;9

;Variable contadorcontador equ h'24'

org 0h goto INICIO org 05h

INICIO clrf inicia clrf pause BSF STATUS,RP0;Ir banco 1 BCF STATUS,RP1 CLRF TRISA;PORTA salida MOVLW b'11000111';Configuracin del modulo TMR0 MOVWF OPTION_REG;Preescaler = 128 clrf PORTB ;Limpia los posibles valores actuales de PORTB movlw 0x0F ;Entradas y Salidas para PORTB movwf TRISB ;Configura TRISB