ATmega16 – UART

Conocido también como transmisor y receptor síncrono/asíncrono universal. Este tipo de protocolo de comunicación es usado para comunicarse con la interfaz RS232 pero también podemos usarlo para la comunicación entre uC.

Características:

  • Operación Full Duplex (Transmisión y Recepción al mismo tiempo)
  • Operación Síncrona y Asíncrona.
  • Operación Síncrona Maestro-Esclavo.
  • Generador de alta resolución de Baud rate.
  • Soporte de frames (datos) con 5,6,7,8 o 9 bits de datos.
  • 1 o 2 bits de stop.
  • Generación de paridad Par o Impar y chequeo soportado por hardware.
  • Detección de datos OverRun. (No termina de recibir dos datos y llega un tercer dato lo cual causa pérdida)
  • Detección de framing de error.
  • Filtrado de ruido incluido, detección de bit de inicio falso y filtro pasa-bajo ideal.
  • 3 interrupciones separadas: Finalización de Tx, Registro de datos vacío Tx, Recepción completa Rx.
  • Modo de comunicación Multiprocesador.
  • Modo de comunicación de doble velocidad Asíncrona.

Esquema Descriptivo:

Entre los bloques que más destacan tenemos el Clock Generator que es el encargado de generar el baudiaje (velocidad de transmisión y recepción de datos), mediante XCK se genera la señal de reloj para trabajar en modo síncrono.

Hay que prestar especial atención en el registro UDR que como vemos en el esquema descriptivo es usado tanto para la transmisión como para la recepción, es decir, es un buffer de transmisión y recepción de datos (aquí se coloca el dato). Este registro tiene la misma dirección y el mismo nombre pero son físicamente diferentes, entonces discriminamos para una transmisión o una recepción mediante instrucciones.

Los registros que intervienen en la configuración del USART son:
UCSRA: En este registro se encuentran los flags de interrupción RXC, TXC, UDRE.

RXC: Recepción completa del USART.
TXC: Transmisión completa del USART.
UDRE: Registro de datos vacío del USART.
FE: Error de frame.
DOR: Datos sobre-escritos.
PE: Error de paridad.
U2X: Velocidad de transmisión doble.
MPCM: Modo de comunicación multiprocesador.

UCSRB:

RXCIE: Habilitación de interrupción de RX Completa.
TXCIE: Habilitación de interrupción de TX Completa.
UDRIE: Habilitación de interrupción de Registro de Datos Vacío del USART.
RXEN: Habilitación de Receptor.
TXEN: Habilitación de Transmisor.
UCSZ2: Tamaño del carácter.
RXB8: Bit 8 de datos de Recepción (En el caso que haya sido configurado a 9 bits).
TXB8: Bit 8 de datos de Transmisión (En el caso que haya sido configurado a 9 bits).

UCSRC:

URSEL: Registro de Selección. Con 1 se escribe en UCSRC y con 0 en UBRRH (UCSRC y UBRRH tienen la misma dirección).
UMSEL: Selección del modo USART, 1 síncrona y 0 asíncrona.
UPM1:0. Modo de paridad.

USBS: Selección del bit de Stop, 1 dos bits y 0 un bit.

Seleccionando tamaño del carácter:

UCPOL: Polaridad del reloj (Obviamente solo en modo síncrono), 1 flanco ascendente y 0 flanco descendente.

UBRRL y UBRRH: Registros encargados de configurar el baudiaje.

En el datasheet de nuestro uC se encuentran diferentes valores de configuración para el baudiaje deseado, generalmente yo uso un Xtal de 8MHz y los valores son los siguientes:

Ejemplo:

Descargas: