Anda di halaman 1dari 8

E.P.S.

de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

Prctica 9 Mdulo CCP en modo Captura Fechas: 14 y 21 de Abril de 2005 Se trata de realizar el programa encargado de medir el periodo de una seal de niveles TTL y mostrarlo expresado en microsegundos, en un LCD de caracteres. La seal proceder de un generador de funciones que permitir variar la frecuencia de la seal, la medida se efectuar mediante el empleo del mdulo CCP1 de un microcontrolador PIC16F877 trabajando en modo CAPTURA. El valor mnimo del periodo ser de 100 s (frecuencia mxima 10kHz) y el valor mximo ser el correspondiente a la medida en 16 bits (65535 s que corresponden a una frecuencia mnima de 15,25 Hz). El LCD se gestionar con 3 lneas de control procedentes del PORTA y 4 lneas de datos del PORTD (las lneas de conexin dependen de la placa utilizada). La seal peridica se introducir en la lnea 2 del PORTC, asegurndonos de que la salida seleccionada en el generador de funciones sea la de nivel TTL y verificando la polaridad de la misma. El microcontrolador presente en la placa de entrenamiento ser un PIC16F877 (o versin PIC16F877A) que dispone de un oscilador de 4MHz
E R/W RS

13780 us

LCD HD44780

RDm

RDn

RDp RDq

RAx RAy RAz

4MHz

PIC16F877
RC2/CCP1 Vss + Generador de funciones Salida TTL

Esquema del Conexionado

1 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin dependen de la placa de

Las CONEXIONES al microcontrolador entrenamiento que se vaya a utilizar

! Si se utiliza la placa de entrenamiento PICDEM2: Datos LCD Control LCD Entrada TTL Puertos DB7 DB6 DB5 DB4 E RS R/W Generador PORTA: RA3 RA1 RA2 PORTC: RC2 PORTD: RD7 RD6 RD5 RD4 ! Si se utiliza la placa de entrenamiento PICDEM2 plus: Datos LCD Control LCD Entrada TTL Puertos DB7 DB6 DB5 DB4 E RS R/W Generador PORTA: RA1 RA3 RA2 PORTC: RC2 PORTD: RD3 RD2 RD5 RD0 El algoritmo y programa correspondiente que se adjunta a continuacin corresponde a un interface de 8 bits empleando la placa PICDEM2 y con las siguientes conexiones:
Datos LCD Puertos PORTA: PORTC: PORTD: DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Control LCD E RA3 RS RA1 R/W RA2 Entrada TTL Generador RC2 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0

2 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

UNA SOLUCIN INICIAL Posible planteamiento: Se utiliza el mdulo CCP1 en modo captura para detectar los flancos de bajada en la seal peridica de entrada. Se configura el TMR1 para que se incremente cada microsegundo y sta sea por tanto la unidad de medida del periodo de la seal de entrada. El valor mximo del periodo sin que desborde el TMR1 sera de 65535s, si se supera este valor se advertir con un mensaje en el LCD: Fuera de Rango Se pondr a cero el TMR1 y se buscar la aparicin de un flanco de bajada en RC2 para poner en marcha la cuenta de TMR1, se programar una interrupcin para que en el momento en que se detecte el siguiente flanco de bajada en RC2, se capture el valor presente en el TMR1 (TMR1H y TMR1L) con los registros de CCPR1 (CCPR1H y CCPR1L). Ese valor capturado en binario, se convertir a un formato de representacin decimal para nuestra interpretacin y lectura directa en el LCD, por tal motivo, se descompondrn los dos bytes obtenidos en sus correspondientes dgitos BCD y se enviarn al LCD los caracteres ASCII asociados a cada dgito. Para vigilar el posible desbordamiento de TMR1, se programa tambin la interrupcin de este temporizador y en el supuesto de que se produzca tal desbordamiento antes de que se detecte la aparicin del siguiente flanco, se mostrar un mensaje que indique Fuera de Rango en la pantalla del LCD. Para la gestin del LCD se han empleado de nuevo los subprogramas presentes en el fichero s2_lcd8b.asm (interface de 8 lneas). Para el interface de 4 lneas se debern emplear los subprogramas presentes en s2_lcd4b.asm (si se conectan 4 lneas altas del puerto de datos) s2_lcd4b_p2p.asm (4 lneas bajas del puerto de datos) suministrados con la anterior prctica.

3 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005 Algoritmo utilizado: INICIALIZACIN

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

Puertos: PORTD inicialmente de salida para enviar datos y comandos al LCD, las lneas sern de entrada en algunos intervalos para poder leer el estado del LCD (flag de ocupado BF del LCD) PORTA sern permanentemente de salida en sus 3 bits asociados a las lneas de control del LCD (RS,R/W y E) y el resto entradas. Se configuran las lneas como digitales en ADCON1 PORTC ser de entrada para recibir la seal externa del generador de funciones Configuramos el TMR0 como temporizador y prescaler de 256 para realizar temporizaciones auxiliares del orden de ms Configuracin del mdulo CCP1 en modo captura de flancos de bajada. Activamos la mscara particular de interrupciones por captura en PIE1 Configuracin de TMR1 en modo temporizador, prescaler a 1 para que se incremente cada microsegundo y parado al principio. Activamos tambin su mscara de interrupciones por desbordamiento para detectar la salida del rango de medida Ponemos a cero el TMR1 (TMR1H y TMR1L) Reseteamos e inicializamos el LCD: tras esperar el arranque (15ms de temporizacin software) definimos interface de 8 bits ( 4) y 2 ( 1) lneas de pantalla, desactivamos pantalla al principio Ponemos a cero el flag de CCP1 y esperamos por la primera captura de flanco de bajada explorando el mismo flag (CCP1IF) Al alcanzar el primer flanco, ponemos en marcha el TMR1 Ponemos a cero los flags de TMR1 y CCP1 (TMR1IF y CCP1IF) Activamos la mscara global y la de perifricos en INTCON

BUCLE PRINCIPAL Se trata de una espera continua hasta que entre una interrupcin que puede ser debida a CCP1 (se dio un flanco de bajada en RC2) al TMR1 (desbord en su cuenta mxima)

4 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

PROGRAMA DE TRATAMIENTO DE LA INTERRUPCIN Salvaguarda del contexto (W, STATUS y PCLATH) aunque en este ejemplo no sera necesario ya que en el bucle principal no se utiliza ninguno de los 3 registros anteriores Exploramos el flag de CCP1, si est a 1 nos vamos al tratamiento para CCP1 (porque se detect un flanco de bajada en RC2) Si el flag CCP1IF est a 0, entonces exploramos el flag de TMR1, si est a 1 nos vamos al tratamiento para TMR1 (porque desbord TMR1 antes de que apareciera un flanco de bajada en RC2) Si no es por ninguno de los dos motivos anteriores, salimos del programa de tratamiento de la interrupcin

TRATAMIENTO PARA TMR1: desbord el TMR1 sin haber capturado un flanco de bajada con lo que nos hemos salido de rango en la medida del periodo de la seal (es superior a 65535 s) Sacamos un mensaje por el LCD que advierta del hecho (subprograma MENSAJE) Nos vamos a esperar por un nuevo flanco de bajada en RC2 para poder reiniciar el proceso

TRATAMIENTO PARA CCP1: se debe mostrar en el LCD la cuenta capturada y presente en CCPR1H-CCPR1L pero en decimal Se toman los valores capturados en CCPR1 (CCPR1H y CCPR1L) y se cargan en dos posiciones BIN_ALTO y BIN_BAJO para conversin a formato BCD Llamada a un subprograma de conversin de Binario (16 bits) a 5 dgitos BCD. Vanse los ejemplos de conversin de Binario a BCD en la Web de la asignatura Llamada a un subprograma denominado SACA_TIEMPO que toma los valores almacenados en BCD procedentes de la conversin anterior y enva al LCD los cdigos ASCII correspondientes para ser visualizados Llamada a ESPERA (aprox. 65ms) para no refrescar demasiado frecuentemente la pantalla y evitar el posible baile del dgito menos significativo del periodo (podra eliminarse esta espera) Detenemos TMR1 Ponemos a 0 el TMR1 (TMR1L y TMR1H por este orden) Ponemos a cero el flag de CCP1 (CCP1IF)

5 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

Esperamos a que aparezca un flanco de bajada en RC2 por captura con CCP1 y lo detectamos con CCP1IF a uno Ponemos en marcha TMR1 Borramos el flag de TMR1 por si acaso haba desbordado antes Borramos el flag de CCP1 Recuperamos contexto Retorno del Programa de Tratamiento

SUBPROGRAMA SACA_TIEMPO Se encarga de tomar los valores almacenados en BCD2, BCD1 y BCD0 y se envan al LCD en formato ASCII. Para realizar una representacin ms vistosa, se centra la magnitud, se eliminan los posibles ceros a la izquierda y se indican las unidades en el LCD (aparece us) Se borra la pantalla (subprograma LCDCLEAR) Contabilizamos el nmero de ceros a la izquierda (de BCD2, BCD1 y BD0) y lo almacenamos en una variable denominada AUX2 Para centrar la medida en el LCD enviamos 4 espacios en blanco ms el nmero de ceros a la izquierda que hayamos contado A continuacin enviamos los caracteres ASCII de las correspondientes cifras decimales (Decenas de mil, Unidades de mil, Centenas, Decenas y Unidades) saltndonos las posiciones correspondientes a los ceros a la izquierda existentes Finalmente enviamos cdigo ASCII de u (presentacin del prefijo micro) y de s (unidades segundo) Retorno de subprograma

SUBPROGRAMA MENSAJE Se encarga de enviar los cdigos ASCII almacenados en una tabla en memoria de programa para mostrar un determinado mensaje Borra la pantalla del LCD Pone a cero una variable auxiliar que se utiliza como ndice de la tabla Nos vamos a la tabla para traer el cdigo ASCII correspondiente al ndice actual Llamamos al subprograma que enva el cdigo ASCII a la memoria de pantalla del LCD (LCDPUTCHAR) Incrementamos el ndice de la tabla

6 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

Lo comparamos con la longitud del mensaje Si no hemos alcanzado la longitud total del mensaje volvemos a la tabla (llamar a Tira de Caracteres) Si ya hemos llegado al tamao total, salimos del subprograma

SUBPROGRAMA DE ESPERA Realiza una espera de 65,535 ms, dentro del programa de tratamiento para impedir un cambio frecuente de los dgitos menos significativos de la medida Se pone a 0 el temporizador TMR0 Se pone a 0 el flag Esperamos a que desborde TMR0 Retornamos

7 de 8

E.P.S. de Ingeniera de Gijn Curso 2004-2005

Prcticas de Sistemas Electrnicos Digitales curso 3 Ingeniera de Telecomunicacin

TRABAJO COMPLEMENTARIO A DESARROLLAR POR LOS ALUMNOS


La versin suministrada para el programa de medida del periodo de la seal deber ser modificado por los alumnos con las siguientes especificaciones: ! La conexin se realizar con 4 lneas de datos del LCD (las lneas utilizadas dependern de la placa de entrenamiento que se emplee) ! Durante el funcionamiento del sistema, si no aparecieran flancos en la patilla RC2 durante un tiempo superior a 2 segundos, se considerar que no hay una seal peridica conectada en tal terminal y aparecer en pantalla un mensaje que advierta de tal circunstancia:

Sin conexion externa

En cuanto se vuelva a detectar la aparicin de flancos en el pin RC2, se retornara al estado normal de medida:

12345 us

Si hay flancos, pero el periodo de la seal es superior al mximo de 65535 s, deber aparecer el mensaje que indica que la medida est fuera de rango como sucede en el ejemplo que se ha suministrado:

Fuera de Rango

8 de 8

Anda mungkin juga menyukai