0% encontró este documento útil (0 votos)
120 vistas43 páginas

Configuración y Velocidad en UART

Este documento describe los conceptos básicos de la comunicación serie y cómo funciona el módulo UART. Explica que la comunicación serie transmite bits de forma secuencial y puede ser síncrona o asíncrona. También cubre temas como la trama serie, el cálculo de la velocidad de transmisión, y los registros asociados al módulo UART. Por último, detalla los aspectos de configuración del UART como los pines, interrupciones y la integración con CMSIS.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
120 vistas43 páginas

Configuración y Velocidad en UART

Este documento describe los conceptos básicos de la comunicación serie y cómo funciona el módulo UART. Explica que la comunicación serie transmite bits de forma secuencial y puede ser síncrona o asíncrona. También cubre temas como la trama serie, el cálculo de la velocidad de transmisión, y los registros asociados al módulo UART. Por último, detalla los aspectos de configuración del UART como los pines, interrupciones y la integración con CMSIS.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

También podría gustarte