Sei sulla pagina 1di 6

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",
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

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

54

Todo sobre PICs

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.

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

TRANSMISIN

DE

DATOS

Figura 2

A TRAVS DE UN

PIC

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.

56

Todo sobre PICs

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.

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.

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.

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).

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

58

Todo sobre PICs

-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. *****

Potrebbero piacerti anche