Está en la página 1de 39

Comunicación serial

2018A
Sistemas de Comunicación
Comunicación Serial y Paralela
• Comunicación paralela consiste en enviar datos en forma simultánea por
varios canales (hilos).

• Comunicación serial (también llamados RS-232, por el nombre del estándar


al que hacen referencia). El término serial se refiere a los datos
enviados mediante un solo hilo: los bits se envían uno detrás del otro.

Uso de registros
de desplazmiento
Sistemas de Comunicación
Formas de transmisión
Transmisión simplex: solo permite la transmisión de información en un único sentido.
(comunicación Unidireccional)

Transmisión (half duplex): permite la transmisión de información en los dos sentidos


pero no de forma simultanea. (maestro esclavo)

Transmisión dúplex (full duplex): permite la transmisión de información en los dos


sentidos de forma simultanea. la mayoría de los sistemas de telecomunicación modernos
funciona en modo dúplex, por ejemplo las llamadas telefónicas
Sistemas de Comunicación
Métodos Comunicación Serial:
En la transmisión sincrónica los datos se envían uno a continuación del otro desde la línea
TXD a la RXD. Tanto el transmisor como el receptor son sincronizados con una línea
adicional que transmite los pulsos de reloj. (I2C, SPI)

En la transmisión asincrónica: no se emplea una señal de reloj, pero para que los
dispositivos se entiendan se encapsulan los datos con un bit de inicio y uno o dos bits de
parada, y se tiene un acuerdo en la velocidad de transferencia de los datos.
Sistemas de Comunicación
Conexiones balanceada y desbalanceadas
Al transmitir los datos estos deben estar referidos a tierra del TX y RX. Y se
los puede enviar de manera diferencial o balanceada, en cuyo caso las tierras
del TX y RX no están unidas y se envía dos líneas de datos (de manera
diferencial), Inmune a problemas que tiene que ver con la tierra, inmune al
ruido (interfaz RS-485)

desbalanceada cuando las tierras de ambos se unen y se coloca una sola línea
de datos. practico para distancias cortas, susceptible al ruido Interfaz RS-232.
Comunicación serial
Interfaz RS-232

Este estándar fue diseñado en los 60s para comunicar un equipo Terminal de
datos o DTE (Data Terminal Equipment, PC) y un equipo de comunicación
de datos o DCE (Data Communication Equipment, modem).

Para realizar comunicacion:

• Especificar Protocolo (bits de inicio, paridad, numero de datos, bits de


parada y velocidad.)
• Voltaje mas utilizado +/-12v

Logica Invertida
Comunicación serial
Niveles de Voltaje
Comunicación serial
USART: universal synchronous/asynchronous receiver/transmitter

Características:

• Operación full dúplex.


• Generador Baud Rate (Tasa de Baudios) de alta resolución.
• Soporta tramas con 5, 6, 7, 8 o 9 Bits de Datos y 1 o 2 Bits de parada.
• Generación de Paridad Par o Impar y Soporte por Hardware de
Chequeo de Paridad.
• Tres Interrupciones separadas para: TX Completa, TX Registro de
Datos vacío y RX Completa.
Comunicación serial
Frame: Trama de comunicación (en tensión)
Comunicación serial
• Bit Start. Es la transición de 1 a 0 e indica el inicio de una
transferencia.

• Bits de Datos. Forman los datos en sí que se desean


transmitir. Cada dato puede ser de 5, 6, 7 u 8 bits. El primer
bit a transmitir es el menos significativo o LSbit (Least
Significant Bit).

• Bit de Paridad. Sirve para ayudar a detectar posibles errores


en las transferencias de datos. solo podría detectar errores,
no corregirlos.

• Bits Stop. Los bits de Stop son estados de 1 lógico. El


Estándar dice que puede haber 1 ó 2 bits de Stop al final de
los datos (o del bit de paridad si lo hubiera).
Comunicación serial
Velocidad de Transmisión (Baud Rate)

El Baud Rate es el número de bits que se transmiten por


segundo.
Por tratarse de una transmisión asíncrona, no existe una
señal de reloj que sincronice los bits de datos. Para que los
dispositivos transmisor y receptor se entiendan
correctamente también es necesario que operen con el
mismo baud rate. Los valores más comunes que fija el
Estándar RS-232 son: 1200, 2400, 4800, 9600, 19200, 38400,
56000, 57600, 115200, 128000, 256000

La longitud del cable y la interferencia presente en el


ambiente son factores a considerar a la hora de escoger el
baud rate.
Comunicación serial
Diferentes Niveles de voltaje
Comunicación serial
Conexión Microcontrolador - Computador
Comunicación Serial Atmega164p
Vectores de Interrupción
Comunicación serial
Velocidad de transmisión:

La base de tiempo de Transmisión-Recepción tiene dos modos


asincrónicos de funcionamiento: Modo Normal Asincrónico y
modo de doble velocidad. Esta elección se lleva a cabo con el
Bit U2X del registro UCSRA.

El cálculo del Baud Rate se realiza de la siguiente forma:

(Registro Baute Rate)


Comunicación serial (pag 227)
Comunicación serial
Velocidad de Transmisión:
Comunicación serial
(pag 241)
Comunicación serial
Comunicación serial
• MPCM0. Multi-processor Communication Mode.
Habilita el modo de Comunicación Multiprocesador.
Cuando se escribe uno en el bit MPCM0, serán
ignorados todos los frames recibidos por el USART que
no contengan información de dirección. El módulo
Transmisor no queda afectado por la configuración de
los bits MPCM0.

• U2X0. Double the USART Transmission Speed. Tiene


efecto en el modo de operación asíncrono. Se debe
escribir cero en este bit cuando se usa el modo de
operación síncrono. En las comunicaciones asíncronas,
si se escribe uno en este bit se reducirá el divisor del
generador de baud rate de 16 a 8, dando como
resultado la multiplicación por dos de la velocidad de
transferencia de datos.
Comunicación serial
• UPE0. USART Parity Error. Este se pone a uno al
detectarse un Error de Paridad en el buffer de
recepción, uando están habilitados la recepción del bit
de Paridad. Este bit será válido hasta que se lea el buffer
UDR0.

• DOR0. Data OverRun. Este bit se pone a uno cuando se


detecta una condición de desbordamiento de dato.
Ocurre un desbordamiento de dato (Data OverRun)
cuando el buffer de recepción está lleno (con dos
caracteres), contiene un nuevo carácter esperando en
su Registro de Desplazamiento, y se detecta un nuevo
bit Start. Este bit es válido hasta que se lea el buffer
UDR0.
Comunicación serial
• FE0. Frame Error. Este bit se pone a uno si el siguiente
carácter en el buffer de recepción tuvo un error de
frame en la recepción del dato. Esto es, cuando el primer
bit Stop del siguiente carácter en el buffer de recepción
es cero. Este bit será válido hasta que se lea el buffer de
recepción UDR0. El bit FE0 vale cero cuando el bit Stop
del dato recibido es uno.

• UDRE0. USART Data Register Empty. Indica si el buffer


de transmisión (UDR0) está listo para recibir un nuevo
dato. Si el bit UDRE0 vale uno, el buffer está vacío, y por
tanto está listo para ser escrito. El flag UDRE0 puede
generar una Interrupción de Registro de Dato Vacío.
Comunicación serial
• TXC0. USART Transmit Complete Se pone a uno cuando
un dato completo ha terminado de salir del Registro de
Desplazamiento de Transmisión y no hay ningún dato
presente en el registro UDR0. El bit TXC0 se limpia
automáticamente cuando se ejecuta la función de
interrupción, o se puede limpiar por software
escribiendo uno sobre él. El flag TXC0 puede generar la
Interrupción de Transmisión Completada.

• USART. Receive Complete. vale uno cuando hay datos


no leídos en el buffer de recepción y vale cero cuando
el buffer de recepción está vacío (esto es, no contiene
datos por leer). El flag RXC0 se puede usar para generar
una Interrupción de Recepción Completada.
Comunicación serial
Comunicación serial
• TXB80. Transmit Data Bit 8. Es el noveno bit del dato a
transmitir cuando se trabaja con datos de 9 bits. Se debe
escribir antes de escribir los bits bajos del registro UDR0.

• RXB80. Receive Data Bit 8. Es el noveno bit del dato


recibido cuando se trabaja con datos seriales de 9 bits.
Se debe leer antes de leer los bits bajos del registro
UDR0.

• TXEN0. Transmitter Enable. Al escribir uno en este bit se


habilita el módulo Transmisor del USART. El transmisor
tomará el control del pin TXD0. La des-habilitación del
transmisor (escribiendo 0 en TXEN0) no se hará efectiva
hasta que se completen las transmisiones en marcha y las
pendientes, esto es, cuando el registro UDR0 y el registro de
desplazamiento estén vacíos.
Comunicación serial
• RXEN0. Receiver Enable. Al escribir uno en este bit se
habilita el módulo Receptor del USART. El receptor
tomará el control del pin RXD0. Al deshabilitar el
receptor se liberará el buffer de recepción invalidando
los flags FE0, DOR0 y UPE0.

• UDRIE0. USART Data Register Empty Interrupt Enable.


Al escribir uno en este bit se habilita la interrupción al
activarse el flag UDRE0. Se generará una Interrupción
de Dato de Registro Vacío solo si valen uno el bit
UDRIE0, el flag de Global de Interrupciones en el
registro SREG y el bit UDRE0 en el registro SREG.
Comunicación serial
• TXCIE0. TX Complete Interrupt Enable. Al escribir uno
en este bit se habilita la Interrupción de Transmisión
Completada cada vez que se active el flag TXC0. Para
que se genere la interrupción será necesario que
también el bit de interrupciones globales.

• RXCIE0. RX Complete Interrupt Enable. Al escribir


uno en este bit se habilita la Interrupción de
Recepción Completada cada vez que se active el flag
RXC0. Para que se genere la interrupción será
necesario que también el bit de interrupciones
globales.
Comunicación serial
Comunicación serial
• UCPOL0 . Clock Polarity. Este bit solo se usa en el modo
de operación Síncrono. En el modo Asíncrono debe
permanecer en cero. El bit UCPOL0 establece la
relación entre el cambio de los datos de salida y la
señal de reloj XCK0.

• UCSZ01. Character Size. Estos bits se combinan con el


bit UCSZ02 del registro UCSR0B para establecer el
número de bits de los datos (tamaño de carácter) que
utilizarán el Transmisor y el Receptor.

• USBS0. Stop Bit Select. Este bit selecciona el número de


bits Stop que utilizará el Transmisor.
Comunicación serial
• UPM01-00: Parity Mode. Estos bits habilitan y
configuran la generación y comprobación del bit de
paridad. Si está habilitado, el Transmisor generará y
enviará automáticamente el bit de paridad de cada
dato. El Receptor calculará el bit de paridad de cada
dato recibido y lo comparará con la configuración del
bit UPM00. Si se detecta una discordancia, se seteará el
flag UPE0 del registro UCSR0A.

• UMSEL01-00. USART Mode Select. Estos bits


seleccionan el modo de operación del USART
Comunicación serial
Comunicación serial - Transmisión
El dato que el USART0 transmitirá debe ser:
• Previamente cargado en el registro UDR0.
• Con ello el dato pasará al Registro de Desplazamiento de Transmisión si
es que está vacío.
• Luego el dato saldrá serialmente bit a bit por el pin TXD0.
• Pero si el Registro de deslazamiento se encuentra transmitiendo un dato
previo, el nuevo dato permanecerá en UDR0 hasta que el registro de
desplazamiento quede disponible.
• En ese lapso de tiempo el registro UDR0 no podrá aceptar un nuevo
dato.
Comunicación serial - Recepción
• Los datos seriales que llegan ingresan bit a bit por el pin RXD0 y se van
depositando en el Registro de Desplazamiento de Recepción. Cuando el
dato esté completo (cuando llegue su bit Stop) pasará paralelamente al
registro UDR0. Luego podremos leer el dato del registro UDR0. Pero si el
registro UDR0 está ocupado con datos previos que no han sido leídos por el
procesador, el nuevo dato permanecerá en el registro de desplazamiento
hasta que haya espacio en UDR0.
Comunicación serial - Recepción

• Apenas haya un dato en UDR0 se seteará el flag RXC0 (del registro


UCSR0A). Así que para saber si hay un dato allí pendiente de ser
leído debemos comprobar el bit RXC0. Esté flag es de solo lectura y
se limpiará automáticamente cuando hayamos terminado de leer
todos los datos del buffer UDR0.

• No debemos confundir el UDR0 de recepción con el UDR0 de


transmisión. Aunque tengan el mismo nombre, corresponden a dos
registros diferentes. Es más, el UDR0 de recepción en realidad es un
buffer de dos niveles (puede almacenar hasta dos datos).
Ejercicio: comunicación entre 2 microprocesadores
.include "m164pdef.inc"

.equ F_crystal=8000000
.equ bauds=9600
.cseg
.org 0x00
rjmp inicio
.org 0x28 ;interrupción recepción
rjmp dato

inicio:
; configuro puertos
clr r16
out DDRA,r16 ;puerto como entrada
out PORTC,r16
com r16
out PORTA,r16 ;puerto como salida
out DDRC,r16
ldi r16,(1<<1) ;salida tx
out DDRD,r16
; memoria ram
ldi r16,low(ramend)
out spl,r16
ldi r16,high(ramend)
out sph,r16
; cargo velocidad
ldi r16, high((F_crystal/(16*bauds))-1)
sts ubrr0h,r16
ldi r16, low((F_crystal/(16*bauds))-1)
sts ubrr0l,r16

ldi r16,0b1001_1000 ; habilito interrupción por recepción, habilito


transmisión y recepción
sts ucsr0b,r16

;ldir16,0b0011_1110 ; 8bits paridad impar modo asincronico 2 bits de


parada
ldi r16,0b0000_0110 ; 8bits sin paridad modo asincrónico
sts ucsr0c,r16
sei
primer_dato:
lds r16,ucsr0a
sbrs r16,5 ; revisa si esta limpio el buffer para envío
rjmp primer_dato
in r16,PINA ; leo lo del puerto A
sts udr0,r16 ; envio dato del puerto

; programa principal
lazo:
nop
rjmp lazo

// interrupción por recepcion


dato:
lds r16,udr0 ; leo el el Rx
out PORTC,r16 ; muestro en portC
in r16,PINA ; envío dato de puerto
sts udr0,r16
reti

También podría gustarte