TRANSMISION DE DATOS RS-232 DESDE EL PIC
El modo de transmisión se puede implementar en forma directa a través del software.
Una vez que se conocen la fre- cuencia de reloj de entrada y el pro- medio de información a transmitir (baud), se puede calcular la cantidad de ciclos de reloj por bit. El cronóme- tro del chip Timer0, con su pre-esca- límetro, puede ser usado para gene- rar una interrupción en el desborda- miento de TMR0. Esta interrupción del desbordamiento TMR0 puede ser usada como regulación de tiempo pa- ra enviar cada bit. La frecuencia de reloj de entrada (_ClkIn) y el Prome- dio Baud (_BaudRate) pueden ser programados por el usuario y el valor de tiempo límite de TMR0 (el perío- do para cada bit) es calculado en el tiempo de ensamble. En el tiempo de ensamble también se determina si de- be asignarse o no el pre-escalímetro a
Timer0. Este cálculo se 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 interrupción"; de cualquier modo, el procesador se
dedicará totalmente a cumplir con es- te trabajo.
La transmisión de un byte se reali- za apelando a la función PutChar y luego se transmite el byte de datos en el TxReg. Antes de apelar a esta función (PutChar), los datos deben cargarse en TxReg, y debe asegurar- se que el puerto serie esté libre. El puerto serie está libre cuando los bits
_txmtProgress y _rcvOver se en-
cuentran despejados.
La función PutChar permite lo si- guiente:
1. Asegurarse que los bits _txmt- Progress & _rcvOver estén despejados.
2. Cargar TxReg con datos a ser transmitidos.
3. Llamar a la función PutChar.
RECEPCION DE DATOS RS-232 POR EL PIC
La implementación del modo de recepción difiere poco del modo de transmisión.
A diferencia del pin de transmi- sión (TX en el código del ejemplo es RB7, pero podría ser cualquier pin I/O), el pin de recepción (RX) debe
conectarse al pin RA4/T0C-
KI. Esto se debe a que en la
recepción, el Bit de Inicio, que es asincrónico por natu- raleza, debe ser detectado. Para detectar el bit de Inicio, cuando se coloca en el mo- do Recepción, el módulo Ti-
mer0 es configurado en el
modo Contador.
El registro OPTION es confi- gurado de modo que el mó- dulo Timer0 sea colocado en el modo Contador (incre- mento en el reloj externo del Pin RA4/T0CKI) y ajustado para que aumente en el extermo de caída del pin RA4/T0CKI sin asignarle el pre- escalímetro. Luego de realizar esta configuración, TMR0 (Archivo Reg 1) es cargado con 0xFF. Un cambio de nivel en T0CKI hace que TMR0 gire desde 0xFF hasta 0x00, así genera una interrupción que produce un Bit de Inicio.
El pin RA4/T0CKI es probado nuevamente para asegurar que la transición en TMR0 sea la correcta. Luego de detectar el bit de inicio, se reconfigura el módulo Timer0 para que se incremente en el reloj interno y se le asigna un pre-escalímetro de acuerdo a la frecuencia de reloj y al promedio del "baud" (configurados de la misma manera que en el modo transmisión).
El puerto serie de software es co- locado en el modo recepción cuando se hace un llamdo a la función Get-
Char.
Antes de llamar a esta función, asegúrese que el puerto serie esté li- bre (por ejemplo, los bits de status
_txmtProgress y _rcvOver deben
estar en "0"). Para concluir la recep- ción de un byte, deben guardarse los datos en RxREg y despejarse el
bit_rcvOver.
C
O M O S EC
O M U N I C A U NP I C
1
Resumen de la función GetChar:
1. Asegurarse que los bits _txmt- Progress & _rcvOver estén despejados.
2. Llamar a la función GetChar. 3. El Byte recibido debe estar en TxReg luego de despejarse el bit _rc- vOver.
GENERACION DEL BIT DE PARIDAD
Se puede activar la paridad en el tiempo de ensamble, si se configura la señal "_PARITY-ENABLE" a TRUE. Si se activa, la paridad puede confi- gurarse en paridad PAR o IMPAR. En el modo de transmisión, si se activa la paridad, el bit de paridad es calcu- lado y transmitido como el noveno bit. En recepción, la paridad es calcu- lada y comparada con el noveno bit recibido. Si no son iguales, se debe ajustar el bit de error de paridad en el Registro de Status/Control del RS- 232 (el bit _ParityErr del SerialSta-
tus reg). El bit de paridad se calcula
usando el algoritmo mostrado en la Figura 2. Este algoritmo es altamente eficiente usando las instrucciones
SWAPF y XORWF del PIC16CXXX
(con capacidad de llevar al destino, como así tambíen al mismo registro de archivo o al registro W). La sub- rutina (llamada GenParity) se en- cuentra en el archivo txmtr.asm.
OPCIONES DE
TIEMPO DE ENSAMBLE
El "firmware" está escrito como una rutina de propósito general, y el usuario debe especificar los paráme- tros que se muestran en la Tabla 1 antes de ensamblar el programa. El registro Status/Control se describe en la Tabla 2.
_______________________________ TABLA 1: LISTA DE OPCIONES DE TIEMPO DE ENSAMBLE
_ClkIn: Frecuencia de reloj de entrada
del procesador
_Baud Rate: Promedio de información
a transmitir (baud) deseado. Puede usar cualquier valor válido. El máximo prome- dio "baud" posible dependerá de la fre- cuencia de reloj de entrada. Se debe pro- bar de 600 a 4800 Baud cuando se usa un Reloj de Entrada de 4MHz. Se puede em- plear un valor entre 600 a 19.200 Baud cuando la frecuencia del reloj de entrada es de 10MHz. Se pueden emplear prome- dios más altos usando frecuencias de reloj de entrada más altas.
Luego de especificar _BaudRate & _Cl- Kin, el programa seleccionará automática- mente todos los registros de tiempo apro- piados.
_DataBits: Puede especificar de 1 a 8
bits de datos.
_StopBits: Limitado a 1 Bit de Deten-
ción. Debe ser configurado.
_PARITY_ENABLE: Señal de activa-
ción de paridad. Configúrela en VERDA- DERA o FALSA. Si usa PARIDAD, configú- rela a VERDADERA, de otro modo en FAL- SA. Vea la descripción siguiente de la señal "_IMPAR_PARIDAD".
_ODD_PARITY: Configúrela en VER-
DADERA o FALSA. Si lo hace en VERDA- DERA, entonces usará la PARIDAD IMPAR, de otro modo usará el Esquema de Paridad PAR.
Esta señal se omitirá si _PARITY_ENA- BLE se configura en FALSA.
_USE_RTSCTS: Señales de Hardware
RTS & CTS. Si las configura en FALSO, no usará hardware. Si las configura en VER- DADERO, RTS & CTS usarán hasta 2 Pins I/O del PORTB.
_______________________________ _______________________________ TABLA 2: ASIGNACION DE BITS DE STATUS SERIE / REGISTRO DE CONTROL
Bit #: 0
Nombre: _txmtProgress
Descripción: 1 = Transmisión en pro- greso - 0 = Transmisión por línea libre
Bit #: 1
Nombre: _txmtEnable
Descripción: Configure este bit en ini- cialización para permitir la transmisión. Es- te bit se usa para abortar la transmisión. Se debe abortar la transmisión si en medio de ella (por ejemplo, cuando el bit _txmtPro- gress es "1") el bit _txmtEnable se encuen- tra despejado. Este bit se ajusta automáti- camente cuando se llama a la función Put- Char.
Bit #: 2
Nombre: _rcvProgress
Descripción: 1 = Mitad de una recep- ción de byte; 0 = Se ha completado la re- cepción de un byte (en RxReg) y se ajusta cuando se detecta un bit de inicio válido en el modo recepción. Bit #: 3 Nombre: _rcvOver
C
O M O S EC
O M U N I C A U NP I C
2
2
Descripción: 0 = Culminación de la re- cepción de un byte. El código del usuario puede registrar este bit luego de llamar a la función GetChar y verificar su configu- ración. Luego de hacerlo, el byte recibido estará en RxReg. Otros bits de status tam- bién deberían revisarse por si aparecen errores en la recepción.
Bit #: 4
Nombre: _ParityErr
Descripción: 1 = Error de paridad en la recepción (no relacionado con el tipo de paridad elegido). No es aplicable si no usa la Paridad.
Bit #: 5
Nombre: _FrameErr
Descripción: 1 = Error de composición en la recepción.
Bit #: 6 : No se usa. Bit #: 7
Nombre: _parityBit
Descripción: El noveno bit de transmi- sión o recepción. En el modo transmi- sión, el bit de paridad del byte a ser transmitido se guarda en el mismo bit. En el modo recepción, el nove-
no bit (o bit de paridad) re- cibido se guarda en el mis- mo bit. No es aplicable si no usa la Paridad.
HARDWARE
El hardware está pri- mariamente relacionado con la transmisión de ten- siones según 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 funda- mental entre cada solu-
ción es el costo en relación a la canti- dad de componentes. Los circuitos de las Figuras 3 y 4 son más económicos pero tienen más componentes que el circuito de la Figura 1. Este circuito transmite y recibe datos por medio de una línea RS-232, que usa un chip simple (MAX-232A) alimentado con una tensión 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 tensión simple de +5V.
La Figura 4 muestra una interfase muy económica RS-232 que permite
la comunicación con una PC-AT sin requerimientos de potencia externa. El circuito se alimenta desde una lí- nea RS-232 (DTR) y requiere una co- rriente menor que 5mA. De este mo- do, para comunicarse, el anfitrión de- berá mantener la línea DTR alta y la RTS baja. La tensión se obtiene de la línea DTR, y se requiere que la DTR se mantenga alta y sea de por lo me- nos 7V.
La negativa -5 a -10V requerida por LM301 se obtiene desde la línea RTS y, por consiguiente, el anfitrión debe mantener la RTS baja. Este cir-
C
O M O S EC
O M U N I C A U NP I C
3
3
4
cuito es posible por el bajo consumo de corriente del PIC16C71 (típicamen- te 2mA).
PROGRAMA DE PRUEBA
Obviamente reiteramos que cual- quier entendido puede comprender cómo es posible "interpretar" los da- tros de un PIC y establecer una co- municación a través de una interfase RS232, pero los que no estén "du- chos" en el tema podrán encontrarse un poco "perdidos" con esta explica- ción.
Para probar los módulos de trans- misión y recepción, se ha escrito un programa principal en el cual el PIC16C71 espera la recepción de un comando de un anfitrión a través de RS-232.
En la recepción de un byte (los comandos válidos son 0x00, 0x01, 0x02 & 0x03), el byte recibido se considera como el número de canal A/D del PIC16C71, y se selecciona el canal requerido.
Se inicia entonces una conversión A/D, y cuando se completa la conver- sión (en aproximadamente 20ms), los datos digitales (8-bits) son transmiti-
dos de vuelta al anfitrión.
Se escribió un programa que se ejecutó en una IBM PC/AT para que actúe como un anfitrión y recoja da- tos A/D desde el PIC16C71 a través de un puerto RS-232.
El programa de Windows (DVM.E- XE) se ejecuta como un trabajo de fondo y muestra datos A/D en una pequeña ventana (similar a la del programa RELOJ que viene con Win- dows MS). El programa de Windows y el PIC16C71 actúan juntos como un sistema de adquisición de datos del cual nos ocuparemos en futuros artí- culos.
El código de fuente PIC16CXXX, junto con el Programa DVM de Mi- crosoft Windows (ejecutable en una PC/AT bajo Windows MS 3.1 o más alto) están disponibles en BBS de Mi- crochip.
El código de ensamble para el PIC16CXXX debe introducirse usando un Ensamblador Universal de Micro- chip.
El código no puede ensamblarse usando viejos ensambladores sin mo- dificaciones significativas. Al usuario que no tenga el nuevo ensamblador MPASM, se le sugiere cambiar a la nueva versión.
El Programa de MS Windows (DV- M.EXE) se ejecuta bajo MS Windows 3.1 o más alto. El programa no tiene menús y aparece como una pequeña ventana que muestra Datos A/D y se ejecuta como un trabajo de fondo. Hay algunas opciones de línea de co- mando que describimos a continua- ción.
-Px:x es el número de puerto comm (por ejemplo, - P2 selecciona COM2). El puerto por defecto es COM1.
-Cy: y es el número de canales A/D a mostrar. La configuración por defecto es un canal (canal #1).
-Sz:z es el número de punto flo- tante que representa el factor de la escala (por ejemplo - S5.5 debería 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. ✪
Bibliografía:Nota de Aplicación AN555 de Microchip (Amar Palacher- la, Scott Fink).