24
CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA VENTANA INFORMÁTICA No. 11 – Universidad de Manizales, enero – junio / 2004 – pp 69-91 IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN SERIAL VIRTUAL EN UN MICROCONTROLADOR PIC 16F84 Recibido: noviembre 18 de 2003 – Revisado: Noviembre 25 de 2003 – Aceptado: Diciembre 10 de 2003 WILDER RAMÍREZ DELGADO 1 Resumen En el presente trabajo se muestra la manera de como agregar posibilidades de comunicación serial a un microcontrolador Pic16f84. Inicialmente se describen, para una comunicación serial estándar, los intervalos de muestreo necesarios para obtener los caracteres transmitidos o recibidos, basándose en este intervalo de tiempo se configura la interrupción del timer 0 de micro para ejecutar la rutina de supervisión periódicamente en asocio con todo el código necesario para la implementación del protocolo RS232, el único hardware adicional es una interfaz MAX 232 cuya función es acondicionar los niveles de voltaje pero no toma ningún tipo de papel activo dentro de la transmisión Abstract This work shows the way of adding possibilities of serial communication to a microcontroller Pic16f84. At the begining, sampling intervals are described for a standard serial communication to obtain the transmitted and received characters. Based on these intervals, the timer0 interruption of the microcontroller is configured to execute the supervision routine periodically with the code for implementing of protocol RS232, the only additional hardware is an interface MAX232 whose function is to prepare the voltage levels, but it does not take any type from active function inside the transmission. Introducción 1 Docente Facultad de Ingeniería, Universidad de Manizales. E-mail: [email protected]

IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

VENTANA INFORMÁTICA No. 11 – Universidad de Manizales, enero – junio / 2004 – pp 69-91

IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN SERIAL VIRTUAL EN UN MICROCONTROLADOR PIC 16F84

Recibido: noviembre 18 de 2003 – Revisado: Noviembre 25 de 2003 – Aceptado: Diciembre 10 de

2003

WILDER RAMÍREZ DELGADO1

Resumen

En el presente trabajo se muestra la manera de como agregar posibilidades de comunicación serial a un microcontrolador Pic16f84. Inicialmente se describen, para una comunicación serial estándar, los intervalos de muestreo necesarios para obtener los caracteres transmitidos o recibidos, basándose en este intervalo de tiempo se configura la interrupción del timer 0 de micro para ejecutar la rutina de supervisión periódicamente en asocio con todo el código necesario para la implementación del protocolo RS232, el único hardware adicional es una interfaz MAX 232 cuya función es acondicionar los niveles de voltaje pero no toma ningún tipo de papel activo dentro de la transmisión

Abstract

This work shows the way of adding possibilities of serial communication to a microcontroller Pic16f84. At the begining, sampling intervals are described for a standard serial communication to obtain the transmitted and received characters. Based on these intervals, the timer0 interruption of the microcontroller is configured to execute the supervision routine periodically with the code for implementing of protocol RS232, the only additional hardware is an interface MAX232 whose function is to prepare the voltage levels, but it does not take any type from active function inside the transmission.

Introducción 1 Docente Facultad de Ingeniería, Universidad de Manizales. E-mail: [email protected]

Page 2: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

2

El intercambio de información entre dispositivos electrónicos es un aspecto que día a día toma mayor trascendencia, ya que, entre otras cosas, permite crear aplicaciones muy robustas con grandes prestaciones, basadas en módulos independientes con funciones propias muy especializadas, trabajando en conjunto. En los sistemas embebidos actuales se tienen dispositivos con grandes prestaciones que pueden llegar, inclusive a permitir supervisión y monitoreo de cualquier tipo de señal desde cualquier lugar del mundo utilizando la red TCP/IP Existen muchas maneras de clasificar las comunicaciones basada cada una en diferentes aspectos, como son velocidades, tipos de medio, entre otros; desde un punto de vista muy general se puede clasificar el intercambio de información entre equipos, en dos tipos diferentes: Las comunicaciones paralelas y las comunicaciones seriales. Teniendo en cuenta que la información a transmitir normalmente está contenida en bytes o palabras, cuando se establece una comunicación paralela entre dos equipos, se llevan todos los bits de este byte o palabra al mismo tiempo, esto redunda en transferencia de información a grandes velocidades pero, se tiene como condición, que la interfaz física debe tener un medio de transferencia de datos por cada bit de los datos a transmitir, normalmente se tienen interfaces de 8 y 16 bits, esta característica de la transmisión paralela hace que sea muy utilizada para intercambio de información entre equipos que estén muy cerca (p. Ej. Impresora, scanner), pero hace muy difícil su implementación cuando las distancias aumentan, tanto desde el punto de vista económico debido a el número tan grande de conductores, como desde el punto de vista físico al aumentar de manera directa efectos capacitivos y de interferencias parásitas entre los diferentes conductores; otro aspecto a tener en cuenta es que se deben agregar mas conductores al enlace para efectos de sincronización incrementando aun más las limitantes mencionadas Otra opción para intercambio de información son las interfaces seriales, en las cuales la información es transmitida bit a bit sobre una sola línea de comunicación, esta técnica es mucho más lenta que los enlaces paralelos, pero tiene la gran ventaja que únicamente se necesitan dos medios de comunicación, uno para enviar información (TX) y otro para recibir información (RX), una de las ventajas de tener únicamente dos líneas, además de la gran reducción de costos, es que para aumentar las distancias simplemente se deben modificar las técnicas de transmisión, por ejemplo se pueden utilizar módems o algún otro tipo de técnica para manejo de datos logrando alcanzar mayores distancias, sin embargo en el fondo se tiene que en la comunicación simplemente se está llevando de un extremo al otro un bit, independiente de la manera en que sea transportado Debido a esto las transmisiones seriales han tenido gran aceptación entre los fabricantes de sistemas electrónicos, razón por la cual se vio la necesidad de

Page 3: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 3

crear un estándar que unificara este tipo de protocolo, este estándar fue desarrollado y publicado por la Electronic Industries Association EIA y se denominó como la recomendación RS-232C, fue diseñada inicialmente para realizar conexiones entre terminales y módems, aunque hoy en día sea utilizada en multitud de aplicaciones, es común encontrar equipos electrónicos que incluyen interfaces seriales bajo este estándar. Debido a esto es importante al desarrollar software para aplicaciones embebidas, tener en cuenta que se hace casi indispensable tener previstas las opciones de comunicación con otros dispositivos, ya sean de diseño propio o de terceros,

Estándar RS-232c Existen dos tipos de comunicación serial, la asincrónica y la sincrónica, estos términos se refieren a la existencia o no de una línea adicional que lleve señales que sincronicen todo el sistema, cuando la línea existe, se habla de comunicaciones Sincrónicas; cuando no existe línea alguna y se tiene solo la línea de datos, se habla de comunicaciones Asíncronas, es muy importante tener en cuenta que así no exista un camino específico de pulsos de sincronía, de todas maneras existen señales que ayudan a coordinar el intercambio de información entre los dispositivos. Para el caso del presente trabajo se centra en los sistemas asincrónicos, buscando dar una descripción clara acerca del funcionamiento y las reglas que rigen este tipo de protocolo de comunicaciones. La sincronización de los datos en una transmisión serial asíncrona, se logra teniendo el ancho de cada bit, como un valor constante, el receptor solo debe leer los bits entrantes a intervalos fijos de tiempo, y con esto obtendrá la información adecuada, la línea de transmisión normalmente debe encontrase un valor de voltaje alto (IDLE). Cuando se inicia la transmisión se debe enviar un bit inicial (en realidad se envía un 0), llamado el bit de arranque o StarBit, después de recibir este bit se procede a la recepción del resto de bits de la palabra entrante, al cabo de dicha operación el transmisor envía 1 o 2 Bits de Parada o Stop bits, que le indican la finalización de la transmisión del byte, y prepara el sistema para la recepción del próximo carácter. En la figura 1 se observa la estructura de un byte transfiriéndose serialmente

Page 4: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

4

Figura 1. Comunicación Serial, Ejemplo de Transmisión

Se tienen entonces los primeros parámetros que se deben tener en cuenta al configurar un enlace serial, el primer valor importante es el ancho de cada bit, este valor se obtiene al fijar la velocidad de transmisión, son valores normales 1200 bps, 2400 bps, 9600 bps, etc. Suponiendo una velocidad de 2400 bps se tiene que la duración de cada pulso es de:

Segµ4162400

1≅

Otros dos parámetro importantes son el número de bits de datos (normalmente se habla de valores de 7 u 8 bits) y el número de bits de parada (1 o 2), se tienen otros valores que pueden configurarse como son bits de paridad y control de flujo, entre otros, que brindan cierto tipo de corrección de errores, pero que no son obligatorios.

MAX232 Cuando se habla de dispositivos ubicados muy cerca, es posible manejar señales con niveles de voltaje reducido, normalmente se manejan niveles de voltaje TTL, sin embargo cuando las distancias aumentan estos voltajes sufren atenuaciones considerables, para solucionar este problema la norma RS-232 fija valores de voltaje más grandes que tienen menos problemas de atenuación y alcanzan distancias considerablemente mayores, para RS-232 se tiene que:

1. En el transmisor un 1 lógico es un valor de voltajes comprendido entre -15 y -5 voltios

2. En el transmisor un 0 lógico es un valor de voltajes comprendido entre +5 y +15 voltios

3. En el receptor un 1 lógico es un valor de voltajes comprendido entre -25 y -3 voltios

4. En el receptor un 0 lógico es un valor de voltajes comprendido entre

Page 5: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 5

+3 y +25 voltios En la figura 2 se observan los diferentes valores de voltajes para este estándar

Figura 2. Niveles de voltaje RS-232 Se observa que para implementar enlaces seriales se debe contar con fuentes de alimentación duales, que brinden los niveles de voltaje negativos que se necesitan, como se mencionó anteriormente RS-232 se diseño inicialmente para enlazar PC’s y módems, en estos equipos los voltajes negativos son necesarios para el funcionamiento de diferentes dispositivos internos, y se utilizaban además para el enlace de comunicaciones sin problemas, sin embargo cuando se diseñan aplicaciones embebidas el factor espacio es vital y la implementación de circuitos que generen los voltajes exigidos por la norma se hace bastante complicada, para solucionar este problema aparecen circuitos que permiten hacer la conversión de voltajes TTL a voltajes RS232 teniendo como única fuente de alimentación los 5 voltios que alimentan todo el circuito, un ejemplo de este tipo de dispositivos son los chip MAX232 fabricado por MAXIM, el funcionamiento interno de este circuito no es objetivo del presente trabajo, pero a manera general el MAX232 está compuesto por un elevador de voltaje el cual se encarga de multiplicar los niveles TTL (0-5) obtener los voltajes RS232 (+/- 12), basándose en un par de condensadores externos Una aplicación típica es mostrada en la figura 3, se conecta un dispositivo emisor (en este caso un microcontrolador) con un dispositivo receptor (un computador). Es importante tener en cuenta que utilizando la configuración adecuada del protocolo es posible tener comunicación bidireccional.

Page 6: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

6

Figura 3. Circuito de comunicación entre Microcontrolador y PC

Desarrollo de la Aplicación El presente software permite la comunicación de dispositivos con el Microcontrolador 16f84 utilizando el protocolo de comunicación serial RS232, es importante anotar que este microcontrolador no tiene internamente ningún componente de hardware (UART) que le permita tener estas características de comunicación, debido a esto es necesario desarrollar el software que permita establecer la comunicación serial, asíncrona con 8 bit de datos, sin paridad; es por esta razón que este software esta basado en el manejo de la interrupción del TMR0 la cual es generada 3 veces en el intervalo correspondiente a cada bit durante la transmisión, podemos definir el periodo de disparo del TMR0 como

bNVT

1=

Donde T= periodo de disparo del TMR0 V= velocidad de transmisión en baudios Nb = Número de muestreos de cada bit Para V=2400 bps se tiene T=1/2400/3 = 138 µs (si se toman tres muestras por bit) Se debe entonces configurar el TMR0 para interrumpirse cada 138 µs, para realizar variaciones de la velocidad de transmisión es posible cambiar el valor T o modificar el valor del cristal de oscilación externo del PIC, (para el funcionamiento propuesto se maneja un cristal de 4 Mhz) si duplica el valor del cristal (8Mhz) se duplica la taza de transmisión (4800 Mhz), para el desarrollo del presente prototipo se implementó una taza de transmisión de 2400 baudios (cristal 4Mhz) por consideraciones de estabilidad y consumo de potencia

Page 7: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 7

Como se mencionó anteriormente, cuando se tienen comunicaciones asíncronas, se manejan pulsos de señal con intervalos de duración constantes, debido a esto la función básica del software es la lectura del puerto de recepción a intervalos constantes y exactos de tiempo. Teniendo en cuenta lo anterior, existen varias maneras de realizar el enlace, la primera y la mas obvia es configurar un microcontrolador que contenga Uart lo cual no es el objetivo de este trabajo; una segunda manera es utilizando rutinas de retardo y realizar escaneos sobre los puertos, este tipo de estrategia presenta una gran simplicidad de implementación, pero se tiene la desventaja de no manejar altos niveles de exactitud. Una tercera manera de realizar la comunicación es utilizando rutinas de interrupción generadas desde un timer del microcontrolador, en estas rutinas se encuentran todas las funciones necesarias para cumplir con las exigencias del protocolo, esta tercera forma de realizar el enlace fue la seleccionada para el desarrollo del presente montaje, debido a que, desde el punto de vista didáctico pretende aclarar conceptos teóricos que van desde la misma implementación del protocolo hasta manejo de conceptos en lo referente a timers y microcontroladores; también es importante aclarar que en algunas secciones del programa se sacrificó en cierta medida la eficiencia de código en búsqueda de la facilidad de comprensión del mismo.

Uart.asm Para obtener estos intervalos de 138 µs es necesario llevar al timer el número de ciclos que debe manejar para esto se debe tener en cuenta que. NroCiclos = 256+T1+T2-F Donde NroCiclos: Valor necesario para interrumpirse cada 138µs T1= 2, Ciclos, durante los cuales el timer es deshabilitado al estar reiniciándose T2= 7, Valor del timer al momento de la recarga F= 138µs, frecuencia deseada Entonces NroCiclos = 256+2+7-138=127 Se tiene entonces que configurando el timer con un valor de 127, se generan interrupciones constantes cada 138 µs

Page 8: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

8

El funcionamiento básico del programa se centra en dos rutinas y un registro de control, las rutinas son el MAIN o programa principal y la rutina de la Interrupción o INTERRUPT, el registro de control es Palabra232, estos tres componentes trabajan de manera coordenada en el manejo de la transmisión, la recepción y los indicadores de funcionamiento El registro Palabra232 maneja 4 bits que indican 4 funciones básicas, estos bits se observan en la Figura 4

Figura 4. Palabra232 Donde: Iniciotrans: Es el bit que indica que se puede dar inicio a la transmisión MemobitAnt: Utilizado para tener la información del último bit recibido Transmitiendo: Le indica a la rutina de la interrupción que se está llevando a cabo una Transmisión CaracterListo: Indica al programa que ya se recibió un carácter valido Estos bits se unificaron en un solo registro, pero pudieron también haberse trabajado desde registros individuales pasibilidad que no afecta en gran medida el desempeño del sistema pero no es muy eficiente desde el punto de vista del manejo de recursos. Cada bit es modificado en las diferentes subrutinas, indicándole a cada una de las otras el estado actual de la comunicación y permitiéndole a las rutinas principales (MAIN, INTERRUPT) la selección de la subrutina adecuada. La rutina principal MAIN, así como los procesos de inicialización del microcontrolador, se muestran en la Figura 5, esta rutina básicamente realiza dos funciones: detectar que ya se haya recibido un carácter valido para dar la respuesta programada y manejar un led externo que oscila indicando el funcionamiento del sistema

Page 9: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 9

Figura 5. Rutinas MAIN e inicio Las subrutinas principales de MAIN son PreparaResp y EnviaResp, en la primera el usuario define cual es el dato que va a transmitir, en este caso y para fines de prueba del sistema, se envía el carácter recibido en mayúscula, en esta rutina se podría manejar cualquier tipo de necesidad especifica del usuario, una vez listo el carácter a transmitir se verifica que no exista una transmisión en proceso y se configura el bit iniciotrans del registro Palabra232 para dar inicio a la transmisión, ver figura 6.

Page 10: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

10

Figura 6. Subrutinas de MAIN La rutina INTERRUPT, es realizada cada 130µs independiente del MAIN, en enlace entre estas dos rutinas se realiza desde el registro Palabra232 de allí la importancia de este registro, esta rutina básicamente esta conformada por 4 etapas (ver figura 7) las cuales son:

1) Rutinas de Backup y Reinicio 2) Muestreo 3) Transmisión 4) Recepción

Las rutinas de Backup y recarga buscan almacenar los valores de los registros de sistema (W, STATUS, PCLATH) durante la atención a la interrupción, para después ser reubicados y garantizar el adecuado funcionamiento del programa en general; los datos son almacenados en la subrutina GuardaVector y son restaurados en la subrutina RecuperaVector al final de la rutina INTERRUPT. La rutina de muestreo busca garantizar que los datos recibidos no sean productos de ruidos en el canal de comunicación, por tal razón cada vez que se tiene la necesidad de capturar un bit se toman 3 muestras sucesivas, descartando de esa manera posibles oscilaciones de la línea. Una vez terminado el proceso de muestreo se debe detectar si se está transmitiendo, si se debe iniciar la transmisión o si se va a realizar la recepción; esta decisión se toma en la rutina transmisión, analizando el estado de los bits Iniciotrans y transmitiendo del Registro Palabra232. El proceso de transmisión esta conformado por 3 subrutinas estas son IniciaTransmision, EnviarBit y FinTransmision en la figura 7 se observa la estructura de estas tres subrutinas. El proceso se dispara en la subrutina IniciaTransmision donde en primera instancia se inicializa la variable ContadorTx con el valor 10, este valor se debe a que son 8 bits de datos 1 bit de inicio y un bit de parada, a continuación se inicializa la bandera Transmitiendo para indicarle al resto de subrutinas que se dio inicio a la transmisión, a continuación y debido a que la interrupción esta configurada para activarse cada 138 µs, es decir un tercio del periodo de cada bit, (esto para tomar tres muestras de cada dato recibido) se maneja la variable TempoTx, la cual permite esperar 3 interrupciones para enviar el siguiente bit. Todo el proceso se ejecuta hasta que se envían los 10 bits, a continuación se limpia la bandera transmisión y finaliza el proceso de envío de datos.

Page 11: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 11

Page 12: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

12

Figura 7. INTERRUPT La sección de recepción está conformada por 7 subrutinas las cuales son

1. DeteccionInicio 2. BitInicioOk 3. IniciaRecepcion 4. Espera 5. RecibirBit 6. DetectaUltimoBit 7. StopBitOk

Page 13: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 13

Figura 8. Rutinas de Recepción La subrutina BitInicioOk se ejecuta 138 µs después para verificar que todavía esté presente el StartBit, si no está presente es porque existió un falso disparo y se procede a reiniciar el proceso de recepción llevando el

Page 14: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

14

valor de EstadoRx a cero, en caso de que aun este presente el StartBit se procede a iniciar el proceso de recepción a través de la rutina IniciaRecepcion, cuya función es preparar todo para recibir 8 bits a través de la variable CuentaByte, luego incrementa EstadoRx y finaliza la interrupción, observe que desde que dio inicio el proceso de recepción se han utilizado dos ciclos, es necesario utilizar un tercer retardo, dado por la rutina Espera con la cual se completan los tres ciclos, en la figura 9 se observan estas subrutinas.

Figura 9. Subrutinas de Recepción I Las rutinas recibirBit y DetectaUltimoBit (ver figura 10) se encargan de recibir el bit que llega y analizar si se tiene un bit intermedio o es el último bit, si se da el primer caso se retorna a las rutinas anteriores para seguir capturando más bits. Si se tiene que es el último bit se espera una interrupción más para detectar el bit de parada utilizando la rutina StopBitOk, en esta se verifica que no exista un falso fin, si todo está correcto se recupera el carácter recibido y se almacena en las posiciones de memoria correspondientes, además se esto a través del registro Palabra232 se indica que ya se tiene un carácter listo llevando a uno el valor de la bandera correspondiente

Es importante aclarar que las 7 rutinas mencionadas se ejecutan de de manera independiente en cada interrupción y siguiendo el orden dado por EstadoRx, en cada interrupción se ejecutan dos rutinas mas:

Page 15: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 15

END_INTERRUPT y RecuperaVector, la primera almacena los valores de banderas para la próxima interrupción y actualiza el valor para el led indicador, la rutina RecuperaVector restaura los valores almacenados en GuardaVector. Estos valores son analizados por la rutina MAIN donde se toma la decisión sobre la respuesta que debe ser generada desde el Microcontrolador, el listado completo con todas las subrutinas se muestra a continuación, este fue compilado utilizando las herramientas del Mplab.

Figura 10. Subrutinas de Recepción II

Listado del Programa

Page 16: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

16

; Implementación de una UART virtual ; Wilder Ramírez D. ; Universidad de Manizales ; [email protected] LIST P=16F84 INCLUDE "P16F84.INC" ; Librería estándar de declaraciones para 16F64 ; Configuración Inicial: Code Protection=off ; WathDog: no, Power On Timer=yes, Oscilador: cristal __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;***************************** ;* DECLARACION DE CONSTANTES * ;***************************** DEFINET equ d'127' ; dato necesario para un intervalo de muestreo de 138us ;********************************************** ;* DECLARACION DE BANDERAS PROPOSITO GENERAL * ;********************************************** SalidaBits equ 0x00 ; Bit a través del cual se efectúa la transmisión EntradaBits equ 0x00 ; Bit a través del cual se efectúa la recepción. Activo equ 0x05 ; una señal que permita verificar que el sistema esta funcionando ; es este caso se tiene un led conectado ;************************************************** ;* DECLARACION DE BANDERAS PARA EL PROTOCOLO 232 * ;************************************************** InicioTrans equ 0x00 ; bandera que indica que se empieza a transmitir. MemoBitAnt equ 0x01 ; Guarda el ultimo BIT recibido Transmitiendo equ 0x02 ; indica que hay una transmisión en proceso CaracterListo equ 0x03 ; se recibió ya un carácter valido ;***************************** ;* DECLARACION DE REGISTROS * ;*****************************

Page 17: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 17

Wtemp equ 0x0c ; Copia del aculumador STATUStemp equ 0x0D ; Copia del registro STATUS PCLATHTemp equ 0x0E ; Copia de los datos del PCLATH Palabra232 equ 0x0F ; Aquí se reúnen todas las banderas del protocolo DatosTx equ 0x11 ; Configuración y estado de la TX ContadorTx equ 0x12 ; Coordina la detección del ultimo bit TempoTx equ 0x13 ; Contador de los tres muestreos UltimoCar equ 0x14 ; Ultimo carácter recibido DatosRx equ 0x15 ; Configuración y estado de la Rx CuentaByte equ 0x16 ; Lleva la cuenta de los 8 bits que llegan EstadoRx equ 0x17 ; Controla el estado de la recepción Promedio equ 0x18 ; Ayuda a prevenir falsos bits Microseg equ 0x19 ; Cuenta los intervalos de 138useg (muestreo) Milis equ 0x20 ; Cuenta los intervalos de 0.01 sec (Indicador) ;*********************************** ;* DECLARACION DE otros REGISTROS * ;*********************************** RespuestaMicro equ 0x21 ; carácter a transmitir ;*********************************** ;* INICIO CODIGO * ;*********************************** ORG 0x0000 ; Primera operación: goto PIC_POWER_ON ; salto a la rutina de arranque ;***************************** ;* INTERRUPCION * ;***************************** ORG 0x0004 ; Posmem de las rutinas de interrupción INTERRUPT ;-------------------------------------------------- ;Se salvan los valores de los registros del sistema ;-------------------------------------------------- GuardaVector movwf Wtemp swapf STATUS, W movwf STATUStemp movf PCLATH, W movwf PCLATHTemp

Page 18: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

18

;-------------------------------------------------- ;Se reinicia el conteo ;-------------------------------------------------- movlw DEFINET ; Recargar el TMR0 para otros movwf TMR0 ; 138 microsegundos bcf INTCON, T0IF ; Borrar banderas de interrupción ;---------------------------------------------------------------- ;Tomar tres muestras de los datos de entrada para descartar oscilación ;---------------------------------------------------------------- MuestreaBit clrf Promedio btfsc PORTB, EntradaBits incf Promedio, F btfsc PORTB, EntradaBits incf Promedio, F btfsc PORTB, EntradaBits incf Promedio, F ; En esta bandera se almacena el promedio de ; los datos de entrada ;---------------------------------------------------------------- ; Rutinas de transmisión ;---------------------------------------------------------------- transmisión btfsc Palabra232, InicioTrans ; Si la bandera es verdadera goto IniciaTransmision ; inicie la transmison btfss Palabra232, Transmitiendo ; si no se está en proceso de goto recepción ; transmisión ir a recepción. decfsz TempoTx, F ; Transmisión en proceso, si no estan goto recepción ; las tres muestras, ir a recepción ; si ya estan enviar el siguiente bit ;---------------------------------------------------------------- ;enviar el siguiente bit ;---------------------------------------------------------------- EnviarBit movf DatosTx, W ; Lleva el valor de DatoTx,0 a SalidaBits, xorwf PORTA, W andlw b'00000001' xorwf PORTA, F bsf STATUS, C ; C=1, al rotar DatosRx ingresa como el rrf DatosTx, F ; Bit de parada movlw 0x03 ; Se envia un bit cada tres llamados movwf TempoTx ; a la interrupción decfsz ContadorTx, F ; ya se enviaron los 10 bits? goto recepción ; no, ir a recepción; si, finalizar TX

Page 19: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 19

FinTransmision bcf Palabra232, Transmitiendo ; fin de la transmisión goto recepción ; ir a recibir otro bit ;---------------------------------------------------------------- ;Transmitir un dato ;---------------------------------------------------------------- IniciaTransmision movlw d'10' ; se tienen que enviar diez bits: movwf ContadorTx ; 8 bits + 1 stop bit + 1 bit para separación bsf Palabra232, Transmitiendo ; Activar transmisión bcf Palabra232, InicioTrans ; desactivar Iniciar transmisión movlw 0x03 ; hay que contar tres interrupciones movwf TempoTx bcf PORTA, SalidaBits ; Enviar start bit ;---------------------------------------------------------------- ;Rutinas de recepción ;---------------------------------------------------------------- recepción clrf PCLATH ; Segun el valor que traiga el registro movf EstadoRx, W ; EstadoRx de las otras rutinas se selecciona addwf PCL, F ; la rutina actual goto DeteccionInicio ; EstadoRx=0, Verfificar si hay Start Bit goto BitInicioOk ; EstadoRx=1, Comprobar que no sea falso start goto Iniciarecepcion ; EstadoRx=2, Empieza a capturar el Byte goto Espera ; EstadoRx=3, Espera la próxima INT goto RecibirBit ; EstadoRx=4, Capturar el bit que sigue goto DetectaUltimoBit ; EstadoRx=5, Ver si ya es el bit 7 goto Espera ; EstadoRx=6, Espera la próxima INT goto StopBitOk ; EstadoRx=7, Recupera el byte completo DeteccionInicio btfss Palabra232, MemoBitAnt ; la linea estaba en 1? goto END_INTERRUPT ; no, entonces no es Start Bit btfsc Promedio, 1 ; si, pero, el dato actual es 0? goto END_INTERRUPT ; no, falso arranque, esperar a otra INT incf EstadoRx, F ; si, entonces si es el Start bit, comenzar goto END_INTERRUPT ; recepción, esperar el próximo ciclo BitInicioOk incf EstadoRx, F ; entró otro bit? no, entonces fue un

Page 20: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

20

btfsc Promedio, 1 ; falso arranque, empezar de nuevo clrf EstadoRx ; si, empezar recepción goto END_INTERRUPT Iniciarecepcion movlw 0x08 ; hay que capturar un byte movwf CuentaByte incf EstadoRx, F ; EstadoRx = 3 goto END_INTERRUPT Espera incf EstadoRx, F ; esperar otro ciclo goto END_INTERRUPT RecibirBit rrf Promedio, F rrf Promedio, F rrf DatosRx, F ; se captura el bit actual incf EstadoRx, F ; ir a "DetectaUltimoBit" a ver ; si es el ultimo goto END_INTERRUPT DetectaUltimoBit movlw 0x06 ; sin es el ultimo espera la ultima vez decfsz CuentaByte, F ; cuantos bits van? movlw 0x03 ; todavía faltan bits ir a leer otro movwf EstadoRx goto END_INTERRUPT StopBitOk clrf EstadoRx ; Inicializar registro para otra lectura btfss Promedio, 1 goto FalsoFin bsf Palabra232, CaracterListo ; Indica que se tiene el carácter movf DatosRx, W ; Salvar movwf UltimoCar goto END_INTERRUPT FalsoFin clrf EstadoRx ; empezar de nuevo ;---------------------------------------------------------------- ;Fin de Rutinas de recepción ;---------------------------------------------------------------- END_INTERRUPT

Page 21: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 21

bcf Palabra232, MemoBitAnt ; salvar valores de las banderas btfsc Promedio, 1 ; para la próxima interrupción bsf Palabra232, MemoBitAnt ; decfsz Microseg, F ; registros utilizados para el led goto RecuperaVector ; indicador movlw d'72' ; se decrementa durante 72 INT movwf Microseg ; aproximadamente 10 milisegundos incf Milis, F RecuperaVector movf PCLATHTemp, W ; Recupera los registros movwf PCLATH swapf STATUStemp, W movwf STATUS swapf Wtemp, F swapf Wtemp, W RETFIE ;***************************** ;* FIN DE INTERRUPCION * ;***************************** ;***************************** ;* INICIALIZAR REGISTROS * ;***************************** PIC_POWER_ON clrwdt ; No se usa el watch dog timer clrf INTCON ; ni el resto de las interrupciones bsf STATUS, RP0 ; configurar los puertos movlw b'00000000' movwf TRISA movlw b'00000001' movwf TRISB movlw b'00001000' ; Configurar las interrupciones movwf OPTION_REG bcf STATUS, RP0 clrf PORTB movlw b'00000001' ; La linea de comunicaiones debe movwf PORTA ; permanecer en 1 ;--------------------------------------------------- ; Borrar todas las posiciones de memoria ;--------------------------------------------------- movlw 0x0C ; hay que borrar 50 posiciones

Page 22: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

22

movwf FSR ; partiendo desde 0x0c BorraMem clrf INDF incf FSR, F movlw 0x50 ; Ciclo repetido 50 veces subwf FSR, W btfss STATUS, C goto BorraMem ;--------------------------------------------------- ; Habilitar el TMR0 ;--------------------------------------------------- clrf TMR0 bsf INTCON, T0IE ; Solo se habilita el TMR0 bsf INTCON, GIE ;***************************** ;* RUTINA PRINCIPAL * ;***************************** MAIN clrf Milis EsperaLedActivo btfsc Palabra232, CaracterListo ; ya se tiene el carácter? call PreparaResp ; responder movlw d'50' subwf Milis, W ; si ya pasaron 500 milisegundos btfss STATUS, C ; cambiar el estado de led piloto goto EsperaLedActivo ; si no esperar (la variable Milis call CambiaPiloto ; se actualiza en las INT goto MAIN ;***************************** ;* FIN DE RUTINA PRINCIPAL * ;***************************** ;--------------------------------------------------- ; Parpadeo del led piloto ;--------------------------------------------------- CambiaPiloto movlw b'00100000' ; Invertir el estado del xorwf PORTB, F ; Led Return ;---------------------------------------------------

Page 23: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

CENTRO DE INVESTIGACIONES Y DESARROLLO – FACULTAD DE INGENIERÍA

Implementación de una interfaz … - Ramírez Delgado Wilder (2003) – pp 69-91 23

; Definir el dato que se va a responder ;--------------------------------------------------- PreparaResp bcf UltimoCar,5 ;Convertir mayúscula bcf Palabra232, CaracterListo call EnviaResp Return ;--------------------------------------------------- ; Enviar la respuesta ;--------------------------------------------------- EnviaResp btfsc Palabra232, Transmitiendo ; esperar hasta que se detenga goto EnviaResp ; una posible transmisión movwf DatosTx ; Llevar al dato a transmitir ; al registro DatosTx bsf Palabra232, InicioTrans ; inicia transmisión Return END ;*********************************** ;* FIN CODIGO * ;***********************************

Perspectivas de Desarrollo El circuito descrito anteriormente presenta una manera simple de realizar intercambio de información entre diferentes elementos y un microcontrolador 16F84, característica muy importante y que debe ser tenida en cuenta en el momento de diseñar e implementar aplicaciones embebidas o cualquier otro tipo de aplicación Este tipo de comunicación es apenas el paso inicial en el desarrollo de aplicaciones que tengan posibilidades de comunicación más poderosas, si se quieren diseñar aplicaciones con características de comunicación mucho más robustas debe tenerse en cuenta, que como consecuencia de las tendencias actuales en el manejo de la información, esta ya no es un componente estrictamente local si no que debe tenerse la posibilidad de ser accedida desde cualquier lugar, característica no debe ser ajena a las aplicaciones embebidas, las cuales deben encaminarse hacia la interconectividad a un nivel más alto Protocolos como PPP y TCP/IP permiten la interconexión hacia redes de mucho mayor tamaño, algunos elementos en el mercado permiten adicionar en aplicaciones basadas en microprocesadores y microcontroladores, la utilización de estos elementos o la implementación directa de algunas

Page 24: IMPLEMENTACIÓN DE UNA INTERFAZ DE COMUNICACIÓN …centro de investigaciones y desarrollo – facultad de ingenierÍa ventana informÁtica no. 11 – universidad de manizales, enero

Universidad de Manizales, enero – junio / 2004

24

características de estos protocolos permitirán diseñar aplicaciones que irían desde simple supervisión y monitoreo hasta sistemas muchos más robustas como procesamiento distribuido, la implementación de estos protocolos y su aplicación práctica está actualmente en curso y será presentado a la comunidad académica a través de este medio más adelante.

Bibliografía BENTHAM, Jeremy. TCP/IP Lean, Web Servers For Embedded Systems, 2002, CMP Books DUQUE Edison, Curso Avanzado de microcontroladores pic, 1998, ed. CEKIT HINTZ, Kenneth y TABAK, Daniel. Microcontrollers. Architecture, implementation & Programming. Singapur, 1992, McGraw Hill. LAVARELLO, Alejandro. Proyectos con Microcontroladores, Uruguay, e-mail: [email protected] www.maxim.com www.microchip.com