Con este módulo vamos a poder comunicarnos con otros sistemas, usando las normas de comunicación serie más habituales que existen en el entorno industrial. Estas normas son la RS-232 y RS-485, para las cuales se desarrollará un circuito que podrá funcionar con una u otra norma con pocos cambios.
Todo microcontrolador de la familia 80x51 incluye un puerto serie que, mediante un sencillo hardware de adaptación de niveles de tensión, permite implementar un interfaz RS-232 y RS-485 Esto permitirá al micro que se comunique fácilmente con otros equipos y, en especial, con los PCs.
Señales de un interfaz RS-232C. Conexión DTE-DCE.
La figura muestra el uso para el que fue pensado y
desarrollado el estándar. Un aspecto a destacar en la figura es la existencia de
dos señales de tierra tal como define el estándar. Una de ellas es la señal de tierra
conectada al chasis del sistema y que debe estar interconectada entre todos los sistemas
que se relacionen. Esta línea se debe conectar siempre que la conexión entre los chasis
sea segura y no aparezcan problemas de bucles de
tierra. La otra señal ejerce de referencia digital para el resto de señales que se
intercambian y es obligatoria.
El estándar tiene amplio uso en distancias cortas, cuando éstas se hacen grandes se convierte en algo menos aconsejable y es más complejo conseguir un correcto funcionamiento. Se recomienda, en general, que los cables que interconectan los dispositivos no excedan de 15 metros. Para distancias mayores se recomiendan otros sistemas de interconexión, por ejemplo un RS-485.
El estándar RS-232-C describe 21 señales en un conector de 25 líneas tipo DB-25, pero ha degenerado y es normal encontrarlo con conectores de 9 patillas tipo DB-9 y con menos señales.
Las líneas que más interesan en este capítulo son
TRANSMIT y RECEIVE (líneas 2 y 3). Estas líneas son compatibles (entre el computador o
terminal y el módem) porque TRANSMIT es una señal de entrada al módem y de salida para
el computador/terminal. Lo mismo ocurre con la señal RECEIVE.
El resto de líneas permiten conocer cuando se produce una llamada, manejar una
comunicación full-duplex
o half-duplex,
evitar perdidas de datos cuando uno de los dos elementos no puede absorber más datos,
etc.
En cuanto a los niveles de tensión, la norma RS-232-C define una tensión simétrica
respecto a la referencia, y al menos 3 V para un nivel lógico 0 y -3 V. para un nivel
lógico 1. En la práctica los niveles de tensión son de +12V y -12V.
El interfaz RS-232 utiliza una transmisión no
balanceada, por lo que no es adecuada en ambientes industriales (ruido en modo común) y
en longitudes de conexión largas (efecto crosstalk).
Las velocidades de transmisión más utilizadas son: 300, 1200, 2400, 4800, 9600 y
19200 bps. En la práctica se logran alcanzar hasta 115.200 bps.
Las limitaciones de la norma RS-232C se pueden superar con las mejoras que aportó
posteriormente la norma RS-485 (hay normas previas como la RS-423 y RS-422). Su ventaja es
que se trata de una transmisión balanceada o diferencial que aporta como beneficios
inmediatos una mayor velocidad de transmisión, una gran longitud de línea del orden del
kilómetro y una buena inmunidad al ruido.
El medio físico de transmisión es un par trenzado, con las ventajas de rechazo de ruido
que aporta. Si al par trenzado se le añade un apantallamiento se estará en condiciones
de tener un red de comunicaciones industriales bastante inmune al ruido (incluso sin el
apantallamiento), por ello, la mayoría de buses de campo (redes industriales de control)
emplean este tipo de cableado. La Figura 6-10 muestra el esquema de un sistema con RS-485,
téngase en cuenta que se admiten hasta 32 estaciones en un sólo hilo y la comunicación
es half-duplex. Será necesario poner una resistencia terminadora en cada extremo de 120
Ohms.
Esquema de una RS-485
En un RS-485 se transmite exactamente lo mismo que para un RS-232 así que suele haber en el mercado adaptadores entre las dos normas que capacitan, por ejemplo, a un PC para comunicarse con sensores y actuadores industriales.
En el esquema se presenta un hardware que permite al
microcontrolador conectarse con un sistema RS-232 y con un sistema RS-485. Para la
interfaz RS-232 se usará un clásico MAX232 que
incorpora un bomba de tensión que permite obtener +/-10 voltios a partir de una única
alimentación de +5V. Las únicas señales del estándar RS-232 disponibles serán la masa
lógica (línea 5), la señal TxD (línea 3) y la señal RxD (línea 2), todo ello en un
conector DB-9 según suele ser habitual últimamente. Para conectar el micro a un PC
bastaría con implementar un NULL-MODEM
cruzando las líneas 2 y 3.
Para la interfaz RS-485 se puede usar un SN75176 o un
LTC485. En el sistema propuesto se selecciona si se
desea usar la interfaz 232 o la 485 mediante unos jumpers y si se quiere conectar una
resistencia de 120 Ohms si está en un extremo del par trenzado.
PCB:
COMPONENTES:
Los componentes necesarios para el montaje de este sistema son:
COMPONENTES | CANTIDAD |
C.I. MAX232 | 1 |
C.I. SN75176 ó LTC485 | 1 |
Condensadores Electroliticos 10uF/ 63V | 4 |
Condensadores 2.2 nF | 2 |
Conector Molex 2 x 5 Pines | 1 |
Conector Sub-D 9 pines acodado para pcb hembra | 1 |
Regleta Circuito Impreso Atronillable 2 Conductores | 1 |
Resistencias 47 1/4W | 2 |
Resistencias 120 1/4W | 1 |
Resistencias 1K5 1/4W | 2 |
Resistencias 4K7 1/4W | 2 |
Resistencias 15K 1/4W | 2 |
Tira Jumpers | 1 |
Torretetas Separadoras 10mm | 4 |
Transistor BC547 | 1 |
Placa PCB 1 cara (80 x 72)mm | 1 |
Zócalo DIP-8 | 1 |
Zócalo DIP-16 | 1 |
EJEMPLO:
Se puede usar un PC como terminal RS-232 para enviar órdenes al micro o recibir
información. El hardware mostrado en este apartado lo permite fácilmente, recuérdese
que basta con cruzar las líneas 2 y 3. Sólo falta establecer el mimo protocolo en los
extremos.
El siguiente listado muestra una aplicación que configura el puerto
serie a 2400 bps, 8 bits, sin paridad (cristal de 12 Mhz) y envía continuamente un
mensaje al puerto serie aprovechando la función printf.
/* serie3.c */
#include <stdio.h>
#include <io51.h>
sfr ADCON = 0xD8; /* solo ALTAIR 535 */
#define DELAY 30000
void delay(int i);
void main(void)
{
unsigned char i;
/* en los ALTAIR hay que quitar el control del serie
al S.O.*/
EA = 0; /* SOLO ALTAIR535, deshabilitar
interrupciones*/
PSW.5 = 1; /* SOLO ALTAIR535, deshabilitar captura
serie*/
/* generador baudios con timer 1, modo autorrecarga
*/
TMOD &= 0x0F;
TMOD |= 0x20;
PCON |= 0x80; /* SMOD=1 */
TH1= 0xE6; /* 2400 baudios, 12Mhz */
SCON=0x70; /* MODO 1 */
ADCON.7 = 0; /* solo ALTAIR535, desconectar
generador dedicado */
TR1=1;
TI = 1;
while(1)
{
for (i=32;i<255;i++)
{
delay(DELAY);
printf(">>> Codigo: %c\n",i);
}
}
}
void delay(int i)
{
while (i--);
}
Conectando la salida serie al PC como se ha indicado, se puede recibir la información
desde cualquier software capacitado para leer los puertos serie del PC.