Autor Tema: Que sabes tu de la comunicación serial???  (Leído 8767 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Que sabes tu de la comunicación serial???
« en: 01 de Marzo de 2011, 10:15:04 »
Hola a todos, bueno empiezo este hilo por un tema de intentar de juntar la información que hay en este foro, mas los conocimientos que tiene cada uno de ustedes y experiencia con respecto a al desarrollo he implementación de la comunicación serial por software, porque yo creo que a mas de alguien le ha tocado intentar de comunicar más de una cosa por rs232 y se queda corto con las UART del PIC. Sería bueno que participasen de esto para ver que podemos sacar de todo y así dejar algo solido y confiable, y así pueda quedar a la merced de todos.

Introducción
Cuando hablamos con alguien, en primer lugar llamamos su atención y entonces se transmite el mensaje, una palabra cada vez. Cuando terminamos, realizamos una pausa para indicar que hemos concluido. Lo mismo se cumple con la lectura o la escritura, se comienza una oración con la letra mayúscula, y lee o escribe una palabra cada vez, con intervalos de cierto período. Estas formas de comunicación humanas son serie, no paralelas.
Los sistemas microprogramables basados en CPU internamente están diseñados para la transferencia de datos en buses o líneas de 8.
Por otra parte porque no implementar mejor la comunicación paralela. Si la velocidad de transferencia de datos en paralelo es mucho más rápida, ¿porqué se utiliza la transmisión de datos serie?. Algunas respuestan se dan a continuación:
1.   Para realizar la comunicación de datos en paralelo se requiere gran cantidad de hilos conductores, pues debe ser establecido un hilo para cada bit de datos, además de   las señales de control. Esto encarece notablemente la comunicación en función de la distancia. La comunicación serie requiere 2, 3 ó 4 hilos.
2.   Una entrada salida/serie puede ser transmitida a través de pares de cobre, cable coaxial, fibra óptica, vía rádio o vía satélite, lo que proporciona comunicación con equipos remotos (redes locales) o muy remotos (Internet a través de las redes telefónicas y de datos).
3.   La comunicación paralelo no posee el alto grado de estandarización que ha alcanzado la comunicación serie, lo que permite la intercominicación entre equipos, por ejemplo mediante RS232, USB o FireWire.
La comunicación serial por otra parte se encuentra protocolizado en casi toda la gama de microcontroladores ya que integran entre sus periféricos una UART. En estos casos es mucho más sencilla la comunicación con el PC o con otros periféricos, pues la UART se encarga de casi todo. El problema surge cuando el micro que usamos no tiene el hardware adecuado (por problemas de espacio, de costo, etc.). En esos casos, es posible utilizar UART's hardware externas, pero que presentan el problema de tener que usar más hardware (encarecimiento, volumen...), por lo que quizá tampoco sea una solución. Para estas situaciones (u otras que se puedan presentar) tenemos la posibilidad de diseñar nosotros mismos la UART e implementarla en software.

Consideraciones en la comunicación serie
Cuando se transmite información a través de una línea serie es necesario utilizar un sistema de codificación que permita resolver los siguientes problemas :
1.   Sincronización de bits: El receptor necesita saber donde comienza y donde termina cada bit en la señal recibida para efectuar el muestreo de la misma en el centro del intervalo de cada símbolo (bit para señales binarias).
2.   Sincronización del carácter: La información serie se transmite por definición bit a bit, pero la misma tiene sentido en palabras o bytes.
3.   Sincronización del mensaje: Es necesario conocer el inicio y fin de una cadena de caracteres por parte del receptor para, por ejemplo, detectar algún error en la comunicación de un mensaje.

Velocidad de transmisión
La velocidad de transmisión de datos es expresada en bits por segundo o baudios. El baudio es un concepto más general que bit por segundo. El primero queda definido como el número de estados de la señal por segundo, si sólo existe dos estados (que pueden ser representados por un bit, que identifica dos unidades de información) entonces baudio es equivalente a bit por segundo. Baudio y bit por segundo se diferencian cuando es necesario más de un bit para representar más de dos estados de la señal.
La velocidad de transmisión queda limitada por el ancho de banda, potencia de señal y ruido en el conductor de señal. La velocidad de transmisión queda básicamente establecida por el reloj. Su misión es examinar o muestrear continuamente la línea para detectar la presencia o ausencia de los niveles de señal ya predefinidos. El reloj sincroniza además todos los componentes internos.

La base de reloj
Cuando se establece la comunicación es necesario implementar una base de tiempo que controle la velocidad. En un microcontrolador, se utilizaría la base de tiempos del reloj del sistema, si bien, en términos genéricos se utilizaría uno de los siguientes métodos:
a.   Mediante la división de la base de reloj del sistema. por ejemplo mesiante un contador temporizador programable.
b.   A través de un oscilador TTL. Para cambiar frecuencia hay que cambiar el cristal.
c.   Generador de razón de baudios. Existen diferentes dispositivos especializados que generan diferentes frecuencias de reloj.

Modos de transmisión
Existen dos modos básicos para realizar la transmisión de datos y son:
•   Modo asíncrono.
•   Modo síncrono.
Las transmisiones asíncronas son aquellas en que los bits que constituyen el código de un caracter se emiten con la ayuda de impulsos suplementarios que permiten mantener en sincronismo los dos extremos.
En las transmisiones síncronas los caracteres se transmiten consecutivamente, no existiendo ni bit de inicio ni bit de parada entre los caracteres, estando dividida la corriente de caracteres en bloques, enviándose una secuencia de sincronización al inicio de cada bloque.

La transmisión asíncrona
Cuando se opera en modo asíncrono no existe una línea de reloj común que establezca la duración de un bit y el caracter puede ser enviado en cualquier momento. Esto conlleva que cada dispositivo tiene su propio reloj y que previamente se ha acordado que ambos dispositivos transmitirán datos a la misma velocidad.
No obstante, en un sistema digital, un reloj es normalmente utilizado para sincronizar la transferencia de datos entre las diferentes partes del sistema. El reloj definirá el inicio y fin de cada unidad de información así como la velocidad de transmisión. Si no existe reloj común, algún modo debe ser utilizado para sincronizar el mensaje.
En realidad, la frecuencia con que el reloj muestrea la línea de comunicación es mucho mayor que la cadencia con que llegan los datos. Por ejemplo, si los datos están llegando a una cadencia de 2400 bps, el reloj examinará la línea unas 19200 veces por segundo, es decir, ocho veces la cadencia binaria. La gran rapidez con que el reloj muestrea la línea, permite al dispositivo receptor detectar una transmisión de 1 a 0 o de 0 a 1 muy rápidamente, y mantener así la mejor sincronización entre los dispositivos emisor y receptor.
El tiempo por bit en una línea en que se transfiere la información a 2400 bps es de unos 416 microsegundos (1 seg/2400). Una frecuencia de muestreo de 2400 veces por segundo nos permitirá muestrear el principio o el final del bit. En ambos casos detectaremos el bit, sin embargo, no es extraño que la señal cambie ligeramente, y permanezca la línea con una duración un poco más larga o más corta de lo normal. Por todo ello, una frecuencia de muestreo lenta no sería capaz de detectar el cambio de estado de la señal a su debido tiempo, y esto daría lugar a que la estación terminal no recibiera los bits correctamente.
Bit de inicio y bit de parada
En la transmisión asíncrona un carácter a transmitir es encuadrado con un indicador de inicio y fin de carácter, de la misma forma que se separa una palabra con una letra mayúscula y un espacio en una oración. La forma estándar de encuadrar un carácter es a través de un bit de inicio y un bit de parada.
Durante el intervalo de tiempo en que no son transferidos caracteres, el canal debe poseer un "1" lógico. Al bit de parada se le asigna también un "1". Al bit de inicio del carácter a transmitir se le asigna un "0". Por todo lo anterior, un cambio de nivel de "1" a "0" lógico le indicará al receptor que un nuevo carácter será transmitido.


Reglas de transmisión asíncrona
La transmisión asíncrona que vamos a ver es la definida por la norma RS232, en la que profundizaremos más adelante y que se basa en las siguientes reglas:
a.   Cuando no se envían datos por la línea, ésta se mantiene en estado alto (1).
b.   Cuando se desea transmitir un carácter, se envía primero un bit de inicio que pone la línea a estado bajo (0) durante el tiempo de un bit.
c.   Durante la transmisión, si la línea está a nivel bajo, se envía un 0 y si está a nivel alto se envía un 1.
d.   A continuación se envían todos los bits del mensaje a transmitir con los intervalos que marca el reloj de transmisión. Por convenio se transmiten entre 5 y 8 bits.
e.   Se envía primero el bit menos significativo, siendo el más significativo el último en enviarse.
f.   A continuación del último bit del mensaje se envía el bit (o los bits) del final que hace que la línea se ponga a 1 por lo menos durante el tiempo mínimo de un bit. Estos bits pueden ser un bit de paridad para detectar errores y el bit o bits de stop, que indican el fin de la transmisión de un carácter.
Los datos codificados por esta regla, pueden ser recibidos siguiendo los pasos siguientes:
a.   Esperar la transición 1 a 0 en la señal recibida.
b.   Activar el reloj con una frecuencia igual a la del transmisor.
c.   Muestrear la señal recibida al ritmo de ese reloj para formar el mensaje.
d.   Leer un bit más de la línea y comprobar si es 1 para confirmar que no ha habido error en la sincronización.
Velocidad de transmisión
En la transmisión asíncrona por cada caracter se envía al menos 1 bit de inicio y 1 bit de parada así como opcionalmente 1 bit de paridad. Esta es la razón de que los baudios no se correspondan con el número de bits de datos que son transmitidos.


Ejemplo:
Determinar cuántos bits de datos y caracteres son transmitidos de manera asíncrona en 1 segundo si se transmite a una velocidad de 2400 baudios con 1 bit de inicio, 2 bits de parada, 1 bit de paridad y 6 bits de datos por caracter:
Para transmitir un caracter se necesitará:
1 bit inicio + 6 bits datos + 1 bit paridad + 2 bits parada =10 bits.
Como la velocidad de transmisión es 2400 baudios y cada caracter consume 10 bits, se transmitirán 240 caracteres por segundo (2400/10). Como cada caracter posee 6 bits de datos serán transmitidos 240 * 6 = 1440 bits de datos por segundo.
La característica fundamental del formato de transmisión asíncrono es su capacidad de manejar datos en tiempo real, con un intervalo de longitud arbitraria entre caracteres sucesivos. Al final de cada caracter, la línea va a 1 en el bit de parada y permanece en ese estado durante un número arbitrario de bits ociosos. El inicio del nuevo caracter estará definido por la transición a 0 del bit de inicio.

En la siguiente figura se muestra la mayor velocidad asíncrona posible con el bit de paridad.


Es un método más eficiente de comunicación en cuanto a velocidad de transmisión. Ello viene dado porque no existe ningún tipo de información adicional entre los caracteres a ser transmitidos.

Cuando se transmite de manera síncrona lo primero que se envía es un octeto de sincronismo ("sync"). El octeto de sincronismo realiza la misma función que el bit de inicio en la transmisión asíncrona, indicando al receptor que va ha ser enviado un mensaje. Este carater, además, utiliza la señal local de reloj para determinar cuándo y con qué frecuencia será muestreada la señal, es decir, permite sincronizar los relojes de los dispositivos transmisor y receptor. La mayoría de los dispositivos de comunicación llevan a cabo una resincronización contra posibles desviaciones del reloj, cada uno o dos segundos, insertando para ello caracteres del tipo "sync" periódicamente dentro del mensaje.
Los carácteres de sincronismo deben diferenciarse de los datos del usuario para permitir al receptor detectar los caracteres "sync". Por ejemplo, el código ASCII utiliza el octeto 10010110.
Existen ocasiones en que son definidos dos caracteres de sincronismo, ello puede ser necesario si, por cualquier motivo el caracter "sync" original se desvirtuara, el siguiente permitirá la reinicialización del receptor. En segundo lugar, puede ocurrir que el equipo receptor necesite un tiempo adicional para adaptarse a la señal entrante.
Cuando se transmite de forma síncrona, es necesario mantener el sincronismo entre el trasnmisor y el receptor cuando no se envían caracteres, para ello son insertados caracteres de sincronismo de manera automática por el dispositivo que realiza la comunicación.

El receptor/transmisor síncrono debe indicar además cuándo el sincronismo ha sido logrado por parte del receptor.


Cuando se escriben o se envían datos, pueden producirse errores, entre otras cosas, por ruidos inducidos en las líneas de transmisión de datos. Es por tanto necesario comprobar la integridad de los datos transmitidos mediante algún método que permita determina sis se ha producido un error.
En un caso típico, si al transmitirse un mensaje se determina que se ha producido un error, el receptor solicita de nuevo el mensaje al emisor.
Se pueden detectar errores de acuerdo a la forma de transmisión:
1.   Transmisión asíncrona:
a.   Paridad.
b.   Sobre escritura.
c.   Error de encuadre (framing).
2.   Transmisión síncrona:
a.   Paridad.
b.   Sobre escritura.
Generadores y detectores de paridad
Como un error en una transmisión serie solamente suele afectar a un bit, uno de los métodos más comunes para detectar errores es el control de la paridad.
El control de paridad consiste en añadir un bit, denominado de paridad, a los datos que se envían o escriben.

La paridad puede ser par o impar.
Paridad par
El bit de paridad será cero, cuando el número de bit "unos" que contienen los datos a transmitir sea un número par, y el bit de paridad será uno cuando los datos que se mandan contienen un número impar de unos.

    Dato             Paridad
0000 0001        1
0101 0001        1
0101 0101        0
0000 0000        0

nose como insertar una tabla  :mrgreen: espero que se entienda igual

La suma de los bits que son unos, contando datos y bit de paridad dará siempre como resultado un número par de unos.
En las siguientes figuras se muestra como se puede realizar un generador de paridad y un detector de paridad con puertas lógicas or-exclusivas (EXOR).
 

Paridad impar
   Dato             Paridad
0000 0001           0
0101 0001    0
0101 0101    1
0000 0000    1

En el sistema de paridad impar, el número de unos (datos + paridad) siempre debe ser impar.
Ejemplo:
Se quieren transmitir los datos C3H y 43H con paridad impar.
•   C3H = 1100 0011
•   43H = 0100 0011
C3H tiene un número par de unos, por lo que el bit de paridad a insertar debe ser 1 para que se cumpla que el número de unos (datos + paridad) siempre debe ser impar:
D0       D1       D2       D3       D4       D5       D6       D7       BIT DE PARIDAD    
1        1        0          0        0        0        1        1                    1               5 "unos"

43H tiene un número impar de unos, por lo que el bit de paridad a insertar debe ser 0 para que se cumpla que el número de unos (datos + paridad) siempre debe ser impar:

D0      D1      D2      D3      D4      D5      D6       D7      BIT DE PARIDAD   
1      1      0      0      0      0      1      0                  0             3 "unos"

La secuencia de transmisión se muestra en la figura siguiente.


Supongamos que se comete un error en la recepción de 43H en la posición más significativa (D7). Esto significa que se ha recibido el caracter C3H (bit MSB complementado), el receptor discrimina este error al recibir un número par de unos (bit D0, D1, D6, D7 y paridad):
D0       D1       D2       D3       D4       D5       D6       D7       BIT DE PARIDAD    
1       1       0       0       0       0       1       "1"                0                4 "unos"

Como fue definida paridad impar, se detecta el error pues deberia haber un número impar de unos y hay cuatro. Como respuesta a la detección el sistema podría solicitar la transmisión de este caracter nuevamente.

Por último, y considerándo lo anterior, indicar que el método de detección de errores mediante paridad sólo es válido cuando falla un bit, si por ejemplo fallan dos, no se detectará el error.

Método checksum
Puede existir el caso en que, por ejemplo, se alteren dos bits en un caracter transmitido y si se ha implementado la comprobación de paridad, el error no será detectado.
Existen otros métodos de detección de errores como son la comprobación de redundancia cíclica (CRC) y la comprobación de suma (checksum). Por su simplicidad, será abordado el método checksum.
El método checksum puede ser utilizado tanto en la transmisión síncrona como en la asíncrona. Se basa en la transmisión, al final del mensaje, de un byte (o bytes) cuyo valor sea el complemento a dos de la suma de todos los carácteres que han sido transmitidos en el mensaje. El receptor implementará una rutina que suma todos los bytes de datos recibidos y al resultado se le sumará el último byte (que posee la información en complemento a dos de la suma de los caracteres transmitidos) y si la recepción del mensaje ha sido correcta, el resultado debe ser cero.
Ejemplo:
Indicar el último caracter a transmitir cuando se implementa el método de checksum. Los datos a transmitir serán 40H, 35H y 0EH.
Se realiza la suma:
      40H + 35H + 0EH = 83H
Ahora se determina el complemento a dos del resultado:
      83H = 1000 0011
            0111 1100
            +       1
            -------------
            0111 1101 = 7DH
El último carácter a transmitir será 7DH.
Descripción de terminales en RS232
Para ilustrar mejor el significado de cada terminal, consideremos a modo de ejemplo que el DTE podría ser un PC y el DCE un ratón.

•   TXD (Transmit Data, transmisión de datos, salida, pat. 2): Señales de datos que se transmiten del DTE al DCE. En principio, los datos no se pueden transmitir si alguno de los terminales RTS, CTS, DSR ó DTR está desactivado.
•   RXD (Receive Data, recepción de datos, entrada, pat. 3): Señales de datos transmitidos desde el DCE al DTE.
•   DTR (Data Terminal Ready, terminal de datos preparado, salida, pat. 20): Señal del DTE que indica que está conectado, generalmente en "0" indica que el DTE está listo para transmitir o recibir.
•   DSR (Data Set Ready, dispositivo preparado, entrada, pat. 6): Señal del DCE que indica que el dispositivo está en modo de transmisión de datos.
•   RTS (Request To Send, petición de envío, salida, pat. 4): Señal del DTE al DCE, notifica al DCE que el DTE dispone de datos para enviar. Se emplea en líneas semiduplex para controlar la dirección de transmisión. Una transición de 1 a 0 avisa al DCE que tome las medidas necesarias para prepararse para la transmisión.
•   CTS (Clear To Send, preparado para transmitir, entrada, pat. 5): Señal del DCE al DTE indicando que puede transmitirle datos.
•   CD (Carrier Detect, detección de portadora, entrada, pat. 8): Señal del DCE que ha detectado la señal portadora enviado por un modem remoto o que la línea telefónica está abierta.
•   RI (Ring Indicator, timbre o indicador de llamada entrante, entrada, pat. 22): Señal del DCE indicando que está recibiendo una llamada por un canal conmutado.
•   SG (GND) (System Ground ó Signal Ground, masa de señal, pat. 7): Masa común para todos las líneas.
•   FG (GND) (Shield ó Protective Ground, tierra de protección, pat. 1): El conductor esta eléctricamente conectado al equipo.
Una secuencia normal, a través de la RS232, es la siguiente:
1.   Ambos dispositivos son alimentados, indicando encendido (si ha sido establecido en el equipo). El DTE activa el terminal DTR y el DCE activa el terminal DSR. Una interfase RS232 bien diseñada no comunicará hasta que estos dos terminales estén activos. El DTE esperará la activación del terminal DSR y el DTE la activación del terminal DTR. Aunque DTR y DSR algunas veces pueden ser utilizados para el control del flujo, estos terminales solo indican que los dispositivos están conectados.
2.   El DTE pregunta al DCE si este está listo. El DTE activa la línea RTS. El DCE si está listo, responde activando la línea CTS. Puestos de acuerdo ambos equipos, se puede entrar a comunicar.
3.   Los datos son transferidos en ambos sentidos. El DTE envía información al DCE a través del terminal TXD. El DCE envía información al DTE a través del terminal RXD.

Interfaz TTL-RS232
Para una comunicación full duplex desde la UART de un microprocesador o microcontrolador deben conectarse un mínimo número de señales, concretamente TXD y RXD así como la masa (GND, SG o Signal Ground). Sin embargo una interfaz típica RS232 requiere al menos 7 señales.


Las líneas adicionales se utilizan para la puesta de acuerdo entre el DTE (por ejemplo un PC) y el DCE (por ejemplo un ratón).
El terminal para transmitir datos (TXD) es utilizado para transferir datos del DTE al DCE, por lo que debe ser conectado a la línea receptora serie del periférico. De manera idéntica la línea receptora de datos (RXD) debe ser conectada a la línea transmisora del periférico.
Para convertir TTL a RS232 se pueden usar circuítos típicos de transistores y diodos discretos o los circuitos integrados MC1488 y MC1489, sin embargo, existe un circuíto integrado muy popular que permiten esta conversión. El MAX232 es un conversor de nivel TTL/RS232. Sólo es necesario este circuito integrado y 4 condensadores. La interfaz mínima con el MAX232 entre un dispositivo con salida serie TTL o CMOS y el conector RS232 se muestra en la siguiente figura.


El MAX232
Descripción:
El MAX232 dispone internamente de 4 conversores de niveles TTL al estandar RS232 y viceversa, para comunicación serie como los usados en los ordenadores, el COM1 y el COM2.
 

Funcionamiento: El circuito integrado lleva internamente 2 conversores de nivel de TTL a RS232 y otros 2 de RS232 a TTL con lo que en total podremos manejar 4 señales del puerto serie del PC, por lo general las mas usadas son; TXD, RXD, RTS, CTS, estas dos últimas son las usadas para el protocolo handshaking pero no es imprescindible su uso. Para que el MAX232 funcione correctamente debemos poner unos condensadores externos, todo esto lo podemos ver en la siguiente figura en la que solo se han cableado las lineas TXD y RXD que son las mas usualmente usadas para casi cualquier aplicacion.


En el MAX232 todos los condensadores deben ser de 1 microfaradio para llegar hasta 120 Kbps o de 100 nanofaradios para llegar hasta 64 Kbps. Para el MAX232A los condensadores han de ser de 100 nanofaradios y se consiguen hasta 200 Kbps.
Usos: Este integrado es usado para comunicar un microcontrolador o sistema digital con un PC o sistema basado en el estándar RS232.
Características a +5v, condensadores de 100 nF:
•   Vcc: de 4,5v a 5,5v.
•   Consumo: 4 mA (15 mA con carga a la salida de 3 Kohm).
•   Entradas compatibles TTL y CMOS.
•   Tensión de entrada máxima RS232: +/- 30v.
•   Tensión de Salida RS232: +/- 15v.
o   Tensión de salida típica de +/-8v con carga nominal de 5 Kohm en RS232.
•   Resistencia entrada RS232: 5 Kohm (a masa).
•   Resistencia entrada TTL/CMOS: 400 Kohm (a positivo).
•   Las entradas se pueden dejar al aire.
o   Entrada TTL al aire, se considera un "0" al invertirse en la salida.
o   Entrada RS232 al aire, se considera un "1" al invertirse en la salida.
•   Salidas cortocircuitables contínuamente:
o   Salida RS232: +/- 22 mA.
o   Salida TTL/CMOS: a masa -10 mA, a positivo +30 mA.
•   Data Rate: 200 Kbps (mín 116 Kbps).

Interfaz TTL-RS232 sin MAX232
Hemos visto que para conseguir un interfaz TTL-RS232, utilizar el MAX232 es lo más sencillo pues además del integrado sólo se necesitan cinco condensadores. No obstante, si se va a utilizar con un PC, se puede realizar un interfaz mediante componentes discretos, 5 resistencias, 2 transistores y 1 diodo. El circuito aprovecha la propia corriente del puerto COM del PC para generar las señales del RS232.
   

Los terminales marcados como TxD, RxD y Gnd corresponden al conector RS232 del PC mientras que los terminales marcados como RD y TD van directamente a sistema con las señales TTL.
Este tipo de interfaz puede verse en ratones o elementos de control de puntero del PC. Los puntos de alimentación son de +5V.

RS232 en el PC
El puerto serie de un ordenador trabaja en modo asíncronico. En puerto serie recibe y envía información fuera del ordenador mediante un determinado software de comunicación o un driver del puerto serie. La información se envía al puerto carácter a carácter. Cuando se ha recibido un carácter, el puerto serie envía una señal por medio de una interrupción indicando que el carácter está listo. Cuando el ordenador ve la señal, los servicios del puerto serie leen el carácter.
Existen dos tipos de interfaces RS232 puesto que la norma fue diseñada para dos tipos de equipos, el DTE (Equipo Terminal de Datos) y el DCE (Equipo de Comunicación de Datos). Existen entonces dos tipos de interfaz RS232, la DTE (conector macho) y la DCE (conector hembra):
•   Interfaz DTE (macho) en el PC.
•   Interfaz DCE (hembra) en los modem, ratones y otros dispositivos.
Por tanto en un PC se utilizan conectores DB9 macho, de 9 patillas, por los que se conectan los dispositivos al puerto serie. Los conectores hembra que se enchufan tienen una colocación de patillas diferente, de manera que se conectan la patilla 1 del macho con la patilla 1 del hembra, la patilla 2 con el 2, etc...

 

RS232 no admite comunicaciones a más de 15 metros y 20 Kbps (se puede utilizar mayor distancia y velocidad, pero no es el estándar). La comunicación es efectuada con 25 terminales diferentes, cada uno con su función. RS232 está definida tanto para la comunicación síncrona como asíncrona, pero cuando se utiliza esta última sólo se utiliza un conjunto de los 25 terminales.
Normalmente, las comunicaciones serie en el PC tienen los siguientes parámetros: 9.600 baudios, 1 bit de Start, 8 bits de Datos, 1 bit de Stop y sin paridad.
En la figura siguiente se puede ver un ejemplo de la transmisión en TTL del dato binario 01011001. La línea en reposo está a nivel lógico alto (+5 voltios).


En la figura siguiente se puede ver un ejemplo de la transmisión en RS232 del dato binario 01011001. La línea en reposo está a nivel lógico alto (-15 voltios).


Direcciones e IRQ de los puertos serie
El puerto serie utiliza direcciones I/O y una interrupción para llamar la atención del procesador. Además el software de control debe conocer la dirección.
La mayoría de los puertos series utilizan direcciones estandar predefinidas. Éstas están descritas normalmente en base hexadecimal. Las direcciones I/O e IRQ pueden seleccionarse en la BIOS o bajo Windows.
Las señales son:
Puerto   Dir. I/O   IRQ
COM1   3F8-3FF   4
COM2   2F8-2FF   3
COM3   3E8-3EF   4
COM4   2E8-2EF   3
Las direcciones e IRQ usadas por los puertos serie fueron definidas al diseñar el PC, sin embargo, las del COM3 y COM4 no se han definido oficialmente, aunque están aceptadas por convenios.
El IBM-PC utilizaba la UART 8250, siendo la 16550A una de las últimas que se utilizan.
Uff me alargue más de la cuenta.
En resumen:
Serie nos indica uno detrás de otro, y en efecto, cuando transmitimos algo en serie, lo hacemos bit a bit. En el caso del PIC, si queremos transmitir algo, hemos de usar uno de los pines configurado como salida. Para transmitir un '1' lógico, ponemos el pin en nivel alto (+5V por ejemplo) y si queremos enviar un '0', ponemos el pin en nivel bajo (cerca del nivel GND). Así, variando en el tiempo el estado del pin, podemos enviar todos los datos que queramos. La pregunta que surge es: ¿cuánto tiempo mantenemos el nivel? La respuesta es obvia: dependiendo de la velocidad con que estemos transmitiendo. En el RS232 mediremos la velocidad en bps (bits por segundo).
Así pues, tenemos diferentes velocidades 'estándar': 600, 1200, 2400... En nuestro ejemplo usaremos 9600 bps, pero si es necesario podríamos llegar a velocidades de casi 1 Mbps. Luego veremos cuanto ha de durar cada bit para enviar a esa velocidad.
Vemos que si cada bit tiene una duración fija, constante, no es necesario un reloj que marque los cambios de bit. Cierto, no es necesario, es implícito. Pero esto implica que si se comete un error en la transmisión de un bit, el resto de la comunicación sería basura. Existen por tanto ciertos métodos y bits bandera para que esto no ocurra.
En primer lugar, el estado del pin de envio mientras no se está enviando es fijo (deber ser '1'). Así, cuando se empieza la transmisión, enviamos un bit de inicio (que es un '0'). Después, se acuerda entre emisor y receptor cuantos bits van a conformar los datos: 5, 6, 7 u 8. Lo normal es 8 (un byte). Se envían respetando los tiempos de cada bit. Una vez enviados los datos, el siguiente bit es opcional y se usa como mecanismo para evitar errores: la paridad. Consiste en un bit que indicar si el número de unos o ceros en los datos es par o impar. Aquí no lo usaremos.
Para terminar, enviamos uno o dos bits de parada, de forma que el pin de transmisión se quede en el nivel lógico '1'. Así, se termina la transmisión de nuestro dato. Nos quedamos con la velocidad (9600 bps), los bits de datos (8bits), la paridad (N) y el bit de stop (1): 9600 8N1
Podemos verlo todo un poco más claro en el siguiente cronograma:



bueno espero que les sirva y como tambien puedan comentar sus experiencias de esto. saludos a todos

« Última modificación: 03 de Marzo de 2011, 12:16:57 por japifer_22 »

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #1 en: 01 de Marzo de 2011, 19:37:00 »
muy currao la verdad... chincheta fijo...
un saludo y gracias por la informacion
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #2 en: 02 de Marzo de 2011, 06:09:38 »
Muy bien explicado y con muchas imagenes.

Gracias.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #3 en: 02 de Marzo de 2011, 09:18:12 »
Buen trabajo amigo.

Saludos.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #4 en: 02 de Marzo de 2011, 11:21:34 »
gracias, pero a mi me gustaria que pudiecen aportar mas todavia, como bien digo y sobretodo en el tema de como nosotros poder crear una UART, mejor dicho un soft para poder tener una opcion de recepcion serial.

saludos espero sus comentarios :mrgreen: :mrgreen:

lo quepuedo decir, es que para empesar el programa tenemos que declarar 2 uses:

Código: [Seleccionar]
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, stream=COM1)
#use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_B0, stream=COM2)

donde esto equivale a la configuracion de 2 puertos seriales, donde el primero es con la UART interna del PIC y la segunda es la que crearemo nosotrs, ademas de esto, y com se ve explisitamente existe diferencia y es el stram, que es para darle un nombre al puerto en el momento que queramos usarlo, para asi identificar en que puerto estoy trabajando, ya sea para enviar o resivir datos, como digo esto se tiene que declarar para ambos caso.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #5 en: 02 de Marzo de 2011, 13:05:45 »
Yo en alguna oportunidad utilicé el puerto bidireccional (un solo pin para RX/TX), me funcionó perfecto, algo que si me sucedió es que cuando se filtra ruido en el cable se pueden generar falsos "start", esto bloquea los PIC, configurando un "Time Out" resolví el problema (si pasados 4ms no hay una trama correcta de datos se sale de la rutina gectc)
Como tenía que utilizar le RA4 configuré interrupción por desbordamiento en TMR0 y mantengo cargado el TMR0 con 255, para que con el siguiente pulso se genere la interrupción y al salir de esta borro la interrupción y cargo nuevamente el TMR0 con 255

Código: [Seleccionar]
#use rs232(baud=4800, xmit=pin_a4,rcv=pin_a4,timeout=4)saludos.
« Última modificación: 02 de Marzo de 2011, 13:07:51 por Diego E. »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #6 en: 02 de Marzo de 2011, 13:29:29 »
Buen Artículo

Te felicito japifer_22 y se agradece tu aporte.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: Que sabes tu de la comunicación serial por soft ???
« Respuesta #7 en: 02 de Marzo de 2011, 20:13:20 »
que bueno que les aya gustado


 

anything