Comunicación Serie
Organización de la clase
Introducción Teórica Cuestiones básicas de comunicación Serie
Uart Módulo (Hardware del periférico)
CMSIS Acceso a hardware
Configuración Aplicación
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
Codificación/
Anexo
Funciones útiles
Introducción Teórica Cuestiones básicas de comunicación Serie
LA idea básica de la comunicación serie es transmitir bits uno detrás de
otro.
Introducción Teórica Cuestiones básicas de comunicación Serie
La comunicación Serie Puede ser
Síncrona Asíncrona
Existe además de la transmisión de datos o
información, la transmisión de un tren de
La llegada de cada nuevo bit no está
pulsos de clock encargados de sincronizar
sincronizada por una señal de clock, por lo
los bits enviados.
que el Dispositivo transmisor y receptor
Es decir, el momento exacto en que un bit
deben ponerse de acuerdo en varios
nuevo está disponible está coordinado por
aspectos para que la comunicación pueda
una señal eléctrica
llevarse a cabo..
Introducción Teórica Cuestiones básicas de comunicación Serie
Introducción Teórica Cuestiones básicas de comunicación Serie
La comunicación serie puede ser de las siguientes formas
SIMPLEX
Podemos recibir o enviar, solo una de las 2 opciones
HALF DUPLEX FULL DUPLEX
Podemos enviar o recibir datos Podemos enviar o recibir datos
Pero no simultáneamente simultáneamente
Introducción Teórica Cuestiones básicas de comunicación Serie
Trama serie
Al no existir un clock de sincronización, tanto el receptor como el transmisor deben conocer la velocidad de
transmisión.
Además de la velocidad deben detectar el momento en que se produce el inicio de la comunicación. El fin de la
misma y cuántos Bits se estás comunicando.
Como puede verse, en la trama de n bits se incluyen un bit de start y un bit de stop. La señal de stop pueden ser 1 o 2 bits.
El bit de start y el de stop no intervienen en la interpretación del dato. La UART se encarga de agregarlos al momento de enviar el
dato y de quitarlos al momento de recibirlo.
Tener en cuenta la velocidad de la información.
También puede estar presente un bit de paridad si lo configuramos para que exista.
Introducción Teórica Cuestiones básicas de comunicación Serie
La frecuencia d clock de la UART es 16 veces mayor que la velocidad de transmisión.
Por lo tanto, la UART se posicionará en medio de cada bit y contará 16 ciclos entre bit y bit para determinar si es
“1” o “0”
Introducción Teórica Cuestiones básicas de comunicación Serie
Además de los bits de datos, stop y start, contamos con un bit de paridad que puede ser útil en la
detección de errores.
El Bit de paridad nos indica si la cantidad de “1” contenidos en el carácter enviado es par o impar de
acuerdo a la configuración que le demos.
UART0 Electrónica Digital III 9
Introducción Teórica Cuestiones básicas de comunicación Serie
Oscilograma de una comunicación
serie
UART0 Electrónica Digital III 10
Uart Módulo (Hardware del periférico)
Registro de Salida (WO) Donde
cargamos el valor a transmitir
TX Shift Register TSR (no accesible)
Una vez que escribimos THR este
dato pasa a TSR para transmitirse bit
a bit
Baud Rate Generator
Contiene los Registros DLL y DLM
que son los encargados de generar
la división de la base de tiempo para
conseguir la velocidad de
transmisión deseada
Registros para control de
interrupciones y estado del módulo
UART
RX Shift Register TSR (no accesible)
Cuando estamos recibiendo los bits
de un dato se cargan en este
registro uno a uno.
Registro de Recepción (RO) Donde
se cargan los bytes recibidos por la
uart luego de completarse todos los
bits en el RSR
Uart Módulo (Hardware del periférico)
Registros asociados al módulo UART
Contiene el dato recibido
Reg. Donde escribimos el dato que quremos transmitir
Divisor Latch LSB
Divisor Latch MSB
Habilita las Fuentes de interrupción del módulo UART
Interrupt ID Register
Habilita la FIFO Por defesto desabilitada
Controla La trama
Estado de transmisión y recepción y estados de error
Lo dejamos por defecto
No usamos autobaud lo dejamos por defecto
Por defecto
No usamos un Baud Rate Fraccional
Para desabilitar la transmisión para gestionar flujo de
datos por software
Uart Módulo (Hardware del periférico)
Divisor Latch LSB
Divisor Latch MSB
Baud rate Fraccional
Para entender cómo funcionan estos registros tenemos la siguiente expresión
Cálculo de BAUDRATE
El Pclk es dividido por DLM y el DLL para conseguir la velocidad de transmisión Baudrate. A los registros DLL y DLM
tenemos acceso poniendo a “1” el bit DLAB del registro LCR.
El 16 que puede verse en el denominador aparece por el hecho de que la UART debe tener un clock 16 veces más
rápido que la velocidad de transmisión
Uart Módulo (Hardware del periférico)
Uart Módulo (Hardware del periférico)
Uart Módulo (Hardware del periférico)
Uart Módulo (Hardware del periférico)
LCR Controla La trama
Uart Módulo (Hardware del periférico)
LSR Estado de
transmisión y recepción
y estados de error
Bits
0- si hay un dato para leer
1- error de sobre-escritura
2- error de paridad
3- error de encuadre
5-indica si el THR está libre
6- indica si el THR y el TSR
están libres
CMSIS Acceso a hardware
CMSIS es un conjunto de bibliotecas estándar, la idea es generar una capa de abstracción del hardware de
manera que sea posible abstraerse del dispositivo que estemos programando.
Así contamos con varios archivos, todos parte de este estandar tales como
cr_startup_lpc175x_6x.c definiciones de
handlers
CMSIS Acceso a hardware
Core_cm3.h
Tiene las definiciones de funciones del core, además de funciones propias que facilitan el uso de
los periféricos del core. Tales como
void NVIC_EnableIRQ(IRQn_Type IRQn)
NVIC_DisableIRQ(IRQn_Type IRQn)
NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
SysTick_Config(uint32_t ticks)
CMSIS Acceso a hardware
LPC17xx.h también define punteros a estructuras de datos propias de cada periférico
Uart Módulo (Hardware del periférico)
Pines (Configuración)
PINSEL0 P0.0->Tx y P0.1->Rx
Nota Importante:
La hoja de datos del fabricante nos advierte que no configuremos el PIN
RX con pull down.
Configuración de Interrupciones
IER Habilita las Fuentes de interrupción del
módulo UART
IIR Interrupt ID Register
Configuración Aplicación
Configuración Aplicación
Configuración Aplicación
Configuración NVIC
Configuración Aplicación
Configuración Aplicación
Definición de los handler
Definición de variables y funciones
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
Para entrar en esta parte del tema tenemos que tener en cuenta que existen varios Protocolos, cada uno con sus
especificaciones:
Velocidades máximas
Alcance en metros
Niveles de tensión
etc
Consideraremos a continuación los diferentes protocolos, características principales y hardware para estar dentro de las
especificaciones de esa norma
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
La norma RS232 determina las tensiones correspondientes a los niveles lógicos “0” y “1” además de las distancias máximas a las que
pueden transmitirse datos.
Se establece que la longitud máxima del cable no debe ser superior a los 15 metros y la velocidad máxima de transmisión es, en principio,
128.000 bps. Comunicación Full Duplex. Los niveles lógicos no son compatibles TTL, considerando:
1 lógico entre -3V y -15V
0 lógico entre +3V y +15V
La idea de usar estos niveles es:
Aumentar el nivel de tensión para
conseguir mayores distancias
Usar como “1” y “0” valores de
tensión diferentes de 0V para
detectar posibles cortes en la línea.
Velocidades Estandarizadas según
RS232
75
110
150
300
600
1200
2400
4800
9600
19200
Fuera de la norma:
38400
57600
76800
115200
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
Como pudimos ver RS232 no es Compatible con TTL por lo tanto necesitamos utilizar un Level Shifter en nuestro caso
consideraremos el MAX3232 que es una variante del MAX232 que puede alimentarse con 3.3V a continuación el esquema de
conexionado. También podría ser un SP3232, etc.
Una vez que contamos con los niveles de
tensión apropiados solo basta agregar un
conector DB9 y con eso podemos
conectarnos a cualquier dispositivo que
cuente con una conexión RS232C
De todos estos pines solo utilizamos
Receive Data, Transmit Data y GND
(muy importante)
Tener en cuenta cuando se trate de
conector DB9 Macho o hembra, dado
que los pines Tx y Rx están cruzados
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
RS485
Niveles de tensión:
+-7V - +12V
Velocidad/Distancia máxima:
10Mbps hasta 10m, 100kbps hasta 1200m
Tipo de señal: Diferencial (balanceada) sobre un par trenzado.
Tipo de comunicación:
Half Duplex. Aunque existen versiones de 2 pares trenzados para conseguir comunicaciones Full Duplex
Puede usarse un MAX485 para adaptar las señales.
La señal se transmite en forma directa (A) e
invertida (B).
El ruido aditivo ataca tanto a la señal A como a la B.
Al llegar ambas al final de la línea se restan y el
ruido aditivo se elimina a sí mismo.
Supongamos S(t): señal, N(t): Ruido
Lo que hacemos es, enviamos A=S(t) y B=-S(t).
Al final de la línea A y B se verán ambas afectadas
por el ruido. O sea que al final de la línea tenemos
A=S(t)+N(t) y B=-S(t)+N(t)
El circuito receptor se encarga de hacer la diferencia
entre ambas señales
Con lo que la señal recibida será:
A-B=S(t)+N(t)-(-S(t)+N(t))=2S(t)
Y el ruido se elimina a sí mismo.
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
RS485
Diagrama explicativo de un Driver para comunicación RS485 de texas
instruments
Mediante este tipo de comunicación
tenemos la posibilidad de conectar
más de 2 dispositivos, con la
capacidad de enviar una dirección y
luego de detectado el dispositivo
enviar los datos
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
USB-Uart Bridge
Existe la posibilidad de conectar el módulo Uart a un puente USB/UART de modo que tenemos un chip dedicado que
se encarga de convertir los datos de la trama UART(0V-5V) a protocolo USB, sin embargo, el fabricante de estos chips
nos proporciona drivers, aplicaciones que reciben los datos en la PC y los muestran como si se tratara de un puerto
serie(COM), no un usb.
De modo que tenemos la versatilidad o comodidad del USB con la simplicidad de configurar una UART
El más popular es el FT232 de la empresa FTDI.
Es popular debido a que es el chip que se encuentra en las placas arduino y en particular en las placas
LPCXPRESSOBaseBoard. Por lo que para utilizar el USB UART bridge de la placa LPCXPRESSO baseboard debemos
descargarnos el driver de este chip
MCP2200 es otro adaptador USB/UART pero del fabricante MICROCHIP. Por supuesto contará con su driver para la
PC
USB-RS232 Bridge
Si Combinamos un Max3232 y un USB-UART Bridge tenemos un adaptador USB-RS232
Eso se compra en forma de cable (Manhattan USB-RS232) o en forma de placa adaptadora (MCP2200 USB to RS232
Board)
De esta manera podemos conectar dispositivos que cuentan con conexión RS232 con dispositivos que cuentan con
USB host
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
La placa LPCXPRESSO Baseboard
cuenta con un puente USB/UART con
el cual nos podemos conectar entre
el uart y el USB de una PC.
- Para esto debemos descargar el
driver para el Puente FT232 para que
la PC reconozca el puente.
Debemos configurar los Jumpers
como indica la Documentación de la
placa LPCXPRESSO baseboard
Luego tener la placa LPCXPRESSO
con un programa que use el puerto
UART.
Configurar La velocidad en Baudios
de la PC Host.
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
Otra posibilidad de conexión es la de un módulo bluetooth el cual se accede
mediante un puerto UART a nivel TTL y nos permite, conectarnos con dispositivos
que tengan este tipo de conectividad.
Un ejemplo es el HC06
Level Shifter
Conexión con otros equipos USB/UART Bridge
Bluetooth/UART
Lo importante de estos últimos items es tener en cuenta que la configuración
del Periférico en el microcontrolador puede ser la misma pero el hardware
externo al microcontrolador variará dependiendo del protocolo que estemos
teniendo en cuenta
Anexo Codificaión ascii
Ventajas y desventajas
Anexo Codificaión ascii
Definición de string
Char str[20];
Char str[20]={“hola mundo”};
Char str[20]={‘h’, ’o’, ’l’, ’a’,’ ‘,’m’, ’u’, ’n’, ’d’, ’o’, ‘\0’}
Anexo Codificaión ascii
Definamos una función capaz de mandar una cadena de caracteres
Anexo Funciones utiles
Int valor=100;
char valorChar[5];
itoa(valor,valorChar,10);
Definamos una función capaz de mandar una cadena de caracteres
Anexo Funciones utiles
int atoi(const char *str);
Int valor;
char valorChar[5]={“100”};
valor = atoi(valorChar);
Definamos una función capaz de mandar una cadena de caracteres