Transmisi n de Datos a Trav s de un PIC
Introduccin Tal como lo dice MICROCHIP en sus pginas Web, y segn lo que hemos podido experimentar, los microcontroladores PIC16CXXX son de alto rendimiento y estn basados en EPROM de 8-bit. Algunos de los miembros de esta serie (como PIC16C71 y PIC16C84) no tienen un port (puerto) serie asincrnico. Este captulo describe la implementacin del software que permite la comunicacin con el exterior por medio de las interrupciones de la I/O Serie Asincrnicas (Half Duplex RS-232 Communications). Los PICs pueden operar a altas velocidades con un mnimo de 250ns de tiempo de ciclo (con una frecuencia de reloj de entrada de 16MHz).
Para probar las rutinas de comunicaciones RS-232, utilizamos la implementacin de un Voltmetro Digital simple (DVM) que es un sistema de Adquisicin de Datos Analgico usando un PIC16C71 que publica Microchips en una de sus Notas de Aplicacin. Cabe aclarar que el sistema montado ha respondido satisfactoriamente, siendo la intencin del autor, que el lector conozca las posibilidades de estos componentes "a modo infor mativo" , quedando para ms adelante, la descripcin de la forma de operacin de estos componentes para que puedan armar sus propios sistemas, dado que ya hemos explicado la forma de programarlos e, incluso, dimos algunas aplicaciones para programar PICs desde una PC con muy pocas exigencias.
Figura 1
Todo sobre PICs
53
TRANSMISIN
DE
DATOS
A TRAVS DE UN
PIC
realiza en el archivo de encabezado rs232.h. Se pueden obtener transmisiones de muy alta velocidad si se realiza con "demoras de software" en lugar de ser conducida "a cada interrupcin"; de cualquier modo, el procesador se dedicar totalmente a cumplir con este trabajo. La transmisin de un byte se realiza apelando a la funcin PutChar y luego se transmite el byte de datos en el TxReg. Antes de apelar a esta funcin (PutChar), los datos deben cargarse en TxReg, y debe asegurarse que el puerto serie est libre. El puerto serie est libre cuando los bits _txmtProgress y _rcvOver se encuentran despejados. La funcin PutChar permite lo siguiente: 1. Asegurarse que los bits _txmtProgress & _rcvOver estn despejados. 2. Cargar TxReg con datos a ser transmitidos. 3. Llamar a la funcin PutChar.
Implementacin No es nuestra intencin describir en detalles la implementacin del softwar e half duplex (comunicacin en un solo sentido por cable conductor), simplemente queremos informarlo sobre cmo hacerlo. El pin de transmisin usado en el cdigo de ejemplo es RB7, y el pin de recepcin est conectado al pin RA4/T0CKI (figura 1). Estos pines estn debidamente conectados con la traslacin de tensin adecuada a/desde niveles CMOS en el patrn RS-232. NOTA: Este captulo est dirigido a quienes conocen el manejo de los PICs y difcilmente podr ser comprendido por principiantes.
Transmisin de Datos RS-232 desde el PIC El modo de transmisin se puede implementar en forma directa a travs del software. Una vez que se conocen la frecuencia de reloj de entrada y el promedio de informacin a transmitir (baud), se puede calcular la cantidad de ciclos de reloj por bit. El cronmetro del chip Timer0, con su preescalmetro, puede ser usado para generar una interrupcin en el desbordamiento de TMR0. Esta interrupcin del desbordamiento TMR0 puede ser usada como regulacin de tiempo para enviar cada bit. La frecuencia de reloj de entrada (_ClkIn) y el Promedio Baud (_BaudRate) pueden ser programados por el usuario y el valor de tiempo lmite de TMR0 (el perodo para cada bit) es calculado en el tiempo de ensamble. En el tiempo de ensamble tambin se determina si debe asignarse o no el pre-escalmetro a Timer0. Este clculo se
Recepcion de Datos RS-232 por el PIC La implementacin del modo de recepcin difiere poco del modo de transmisin. A diferencia del pin de transmisin (TX en el cdigo del ejemplo es RB7, pero podra ser cualquier pin I/O), el pin de recepcin (RX) debe conectarse al pin RA4/T0CKI. Esto se debe a que en la recepcin, el Bit de Inicio, que es asincrnico por naturaleza, debe ser detectado. Para detectar el bit de Inicio, cuando se coloca en el modo Recepcin, el mdulo Timer0 es configurado en el modo Contador. El registro OPTION es configurado de modo que el mdulo Timer0 sea colocado en el modo Contador (incremento en el reloj externo del Pin RA4/T0CKI) y ajustado
54
Todo sobre PICs
TRANSMISIN
DE
DATOS
A TRAVS DE UN
PIC
Figura 2
Generacin del bit de Paridad
Se puede activar la paridad en el tiempo de ensamble, si se configura la seal "_PARITYENABLE" a TRUE. Si se activa, la paridad puede confipara que aumente en el extremo de cagurarse en paridad PAR o IMPAR. En el moda del pin RA4/T0CKI sin asignarle el predo de transmisin, si se activa la paridad, escalmetro. Luego de realizar esta confiel bit de paridad es calculado y transmitiguracin, TMR0 (Archivo Reg 1) es cargado como el noveno bit. En recepcin, la do con 0xFF. Un cambio de nivel en T0CKI paridad es calculada y comparada con el hace que TMR0 gire desde 0xFF hasta 0x00, noveno bit recibido. Si no son iguales, se as genera una interrupcin que produce debe ajustar el bit de error de paridad en un Bit de Inicio. el Registro de Status/Control del RS-232 (el El pin RA4/T0CKI es probado nuevamen- bit _ParityErr del SerialStatus reg). El bit de te para asegurar que la transicin en TMR0 paridad se calcula usando el algoritmo sea la correcta. Luego de detectar el bit mostrado en la figura 2. Este algoritmo es de inicio, se reconfigura el mdulo Timer0 altamente eficiente usando las instrucciopara que se incremente en el reloj interno nes SWAPF y XORWF del PIC16CXXX (con y se le asigna un pre-escalmetro de capacidad de llevar al destino, como as acuerdo a la frecuencia de reloj y al pro- tambin al mismo registro de archivo o al medio del "baud" (configurados de la mis- registro W). La sub-rutina (llamada GenPama manera que en el modo transmisin). rity) se encuentra en el archivo txmtr.asm. El puerto serie de software es colocado en el modo recepcin cuando se hace un llamado a la funcin GetChar. Opciones de Antes de llamar a esta funcin, asegreTiempo de Ensamble se que el puerto serie est libre (por ejemplo, los bits de status _txmtProgress y _rcEl "firmware" est escrito como una rutivOver deben estar en "0"). Para concluir la na de propsito general, y el usuario debe recepcin de un byte, deben guardarse especificar los parmetros que se mueslos datos en RxREg y despejarse el bit_rctran en la Tabla 1 antes de ensamblar el vOver. programa. El registro Status/Control se desResumen de la funcin GetChar: cribe en la Tabla 2. 1. Asegurarse que los bits _txmtProgress & _rcvOver estn despejados. 2. Llamar a la funcin GetChar. 3. El Byte recibido debe estar en TxReg luego de despejarse el bit _rcvOver.
Hardware El hardware est primariamente relacionado con la transmisin de tensiones se-
Todo sobre PICs
55
TRANSMISIN
DE
DATOS
A TRAVS DE UN
PIC
TABLA 1: LISTA DE OPCIONES DE TIEMPO DE ENSAMBLE _ClkIn: Frecuencia de reloj de entrada del procesador _Baud Rate: Promedio de informacin a transmitir (baud) deseado. Puede usar cualquier valor vlido. El mximo promedio "baud" posible depender de la frecuencia de reloj de entrada. Se debe probar de 600 a 4800 Baud cuando se usa un Reloj de Entrada de 4MHz. Se puede emplear un valor entre 600 a 19.200 Baud cuando la frecuencia del reloj de entrada es de 10MHz. Se pueden emplear promedios ms altos usando frecuencias de reloj de entrada ms altas. Luego de especificar _BaudRate & _ClKin, el programa seleccionar automticamente todos los registros de tiempo apropiados. _DataBits: Puede especificar de 1 a 8 bits de datos. _StopBits: Limitado a 1 Bit de Detencin. Debe ser configurado. _PARITY_ENABLE: Seal de activacin de paridad. Configrela en VERDADERA o FALSA. Si usa PARIDAD, configrela a VERDADERA, de otro modo en FALSA. Vea la descripcin siguiente de la seal "_IMPAR_PARIDAD". _ODD_PARITY: Configrela en VERDADERA o FALSA. Si lo hace en VERDADERA, entonces usar la PARIDAD IMPAR, de otro modo usar el Esquema de Paridad PAR. Esta seal se omitir si _PARITY_ENABLE se configura en FALSA. _USE_RTSCTS: Seales de Hardware RTS & CTS. Si las configura en FALSO, no usar hardware. Si las configura en VERDADERO, RTS & CTS usarn hasta 2 Pins I/O del PORTB.
TABLA 2: ASIGNACION DE BITS DE STATUS SERIE / REGISTRO DE CONTROL Bit #: 0 Nombre: _txmtProgress Descripcin: 1 = Transmisin en progreso - 0 = Transmisin por lnea libre Bit #: 1 Nombre: _txmtEnable Descripcin: Configure este bit en inicializacin para permitir la transmisin. Este bit se usa para abortar la transmisin. Se debe abortar la transmisin si en medio de ella (por ejemplo, cuando el bit _txmtProgress es "1") el bit _txmtEnable se encuentra despejado. Este bit se ajusta automticamente cuando se llama a la funcin PutChar. Bit #: 2 Nombre: _rcvProgress Descripcin: 1 = Mitad de una recepcin de byte; 0 = Se ha completado la recepcin de un byte (en RxReg) y se ajusta cuando se detecta un bit de inicio vlido en el modo recepcin. Bit #: 3 Nombre: _rcvOver Descripcin: 0 = Culminacin de la recepcin de un byte. El cdigo del usuario puede registrar este bit luego de llamar a la funcin GetChar y verificar su configuracin. Luego de hacerlo, el byte recibido estar en RxReg. Otros bits de status tambin deberan revisarse por si aparecen errores en la recepcin. Bit #: 4 Nombre: _ParityErr Descripcin: 1 = Error de paridad en la recepcin (no relacionado con el tipo de paridad elegido). No es aplicable si no usa la Paridad.
56
Todo sobre PICs
TRANSMISIN
Bit #: 5 Nombre: _FrameErr Descripcin: 1 = Error de composicin en la recepcin. Bit #: 6 : No se usa. Bit #: 7 Nombre: _parityBit Descripcin: El noveno bit de transmisin o recepcin. En el modo transmisin, el bit de paridad del byte a ser transmitido se guarda en el mismo bit. En el modo recepcin, el noveno bit (o bit de paridad) recibido se guarda en el mismo bit. No es aplicable si no usa la Paridad.
DE
DATOS
A TRAVS DE UN
PIC
La Figura 4 muestra una interfase muy econmica RS-232 que permite la comunicacin con una PC-AT sin requerimientos de potencia externa. El circuito se alimenta desde una lnea RS-232 (DTR) y requiere una corriente menor que 5mA. De este modo, para comunicarse, el anfitrin deber mantener la lnea DTR alta y la RTS baja. La tensin se obtiene de la lnea DTR, y se requiere que la DTR se mantenga alta y sea de por lo menos 7V. La negativa -5 a -10V requerida por LM301 se obtiene desde la lnea RTS y, por consiguiente, el anfitrin debe mantener la RTS baja. Este circuito es posible por el bajo consumo de corriente del PIC16C71 (tpicamente 2mA).
gn el protocolo RS-232 con niveles CMOS y viceversa. Microchip sugiere tres circuitos entre los cuales el usuario puede elegir el que mejor se aplique a su equipamiento. La diferencia fundamental entre cada solucin es el costo en relacin a la cantidad de componentes. Los circuitos de las figuras 3 y 4 son ms econmicos pero tienen ms componentes que el circuito de la figura 1. Este circuito transmite y recibe datos por medio de una lnea RS-232, que usa un chip simple (MAX-232A) alimentado con una tensin simple de +5V. El circuito de la Figura 3 es una interfase RS-232 de bajo costo pero requiere dos chips y una fuente de tensin simple de +5V.
Programa de Prueba Obviamente reiteramos que cualquier entendido puede comprender cmo es posible "interpretar" los datos de un PIC y establecer una comunicacin a travs de una interfase RS232, pero los que no estn "duchos" en el tema podrn encontrarse un poco "perdidos" con esta explicacin. Para probar los mdulos de transmisin y recepcin, se ha escrito un programa principal en el cual el PIC16C71 espera la recepcin de un comando de un anfitrin a travs de RS-232. En la recepcin de un byte (los comandos vlidos son 0x00, 0x01, 0x02 & Figura 3 0x03), el byte recibido se considera como el nmero de canal A/D del PIC16C71, y se selecciona el canal requerido. Se inicia entonces una conversin
Todo sobre PICs
57
TRANSMISIN
DE
DATOS
A TRAVS DE UN
PIC
Ensamblador Universal de Microchip. El cdigo no puede ensamblarse usando viejos ensambladores sin modificaciones significativas. Al usuario que no tenga el nuevo ensamblador MPASM, se le sugiere cambiar a la nueva versin. El Programa de MS Windows (DVM.EXE) se ejecuta bajo MS Windows 3.1 o ms alto. El programa no tiene mens y aparece como una pequea ventana que muestra Datos A/D y se ejecuta como un trabajo de fondo. Hay algunas opciones de lnea de comando que describimos a continuacin.
Figura 4
A/D, y cuando se completa la conversin (en aproximadamente 20ms), los datos digitales (8-bits) son transmitidos de vuelta al anfitrin. Se escribi un programa que se ejecut en una IBM PC/AT para que acte como un anfitrin y recoja datos A/D desde el PIC16C71 a travs de un puerto RS-232. El programa de Windows (DVM.EXE) se ejecuta como un trabajo de fondo y muestra datos A/D en una pequea ventana (similar a la del programa RELOJ que viene con Windows MS). El programa de Windows y el PIC16C71 actan juntos como un sistema de adquisicin de datos del cual nos ocuparemos en futuros artculos. El cdigo de fuente PIC16CXXX, junto con el Programa DVM de Microsoft Windows (ejecutable en una PC/AT bajo Windows MS 3.1 o ms alto) estn disponibles en BBS de Microchip. El cdigo de ensamble para el PIC16CXXX debe introducirse usando un
-Px: x es el nmero de puerto comm (por ejemplo, - P2 selecciona COM2). El puerto por defecto es COM1. -Cy: y es el nmero de canales A/D a mostrar. La configuracin por defecto es un canal (canal #1). -Sz: z es el nmero de punto flotante que representa el factor de la escala (por ejemplo - S5.5 debera mostrar los datos como 5.5*<8bit A/D>/256). El valor por defecto es 5.0 volts. -S0: mostrar los datos en formato natural sin escalamientos. *****
58
Todo sobre PICs