Logo Studenta
¡Este material tiene más páginas!

Vista previa del material en texto

MICROCONTROLADOR
ATmega328P
USART
USART
Organización de 
la USART
USART
➢ La USART se compone de 3 bloques principales:
▪ Generación de reloj
▪ Transmisión de datos
▪ Recepción de datos
➢ También tiene los registros UCSRA, UCSRB y UCSRC, con
estos registros se realiza la configuración y se conoce el estado
de la USART (UCSR, USART Configuration and State
Register).
➢ Los bloques de transmisión y recepción son independientes
entre sí.
➢ El bloque generador de reloj proporciona las señales de
sincronización a los otros 2 bloques.
Generación de Reloj y Modos de Operación
➢ CLK1: reloj utilizado para transmisión/recepción asíncrona o
bien para transmisión síncrona.
➢ CLK2: es el reloj utilizado para recepción síncrona
Generación de Reloj y Modos de Operación
➢ Registro UBRR (USART Baud Rate Register): es la base para
la generación de la señal CLK1. Se compone de 2 registros de 8
bits (12 de los 16 bits son utilizados).
➢ El Generador de Baud Rate tiene un contador descendente cuyo
valor máximo está en el registro UBRR. El contador recarga su
valor máximo cuando llega a 0 o cuando se escribe en
UBRR[L]. Una señal interna es conmutada cuando el contador
es 0. La frecuencia base para CLK1 es la frecuencia del
oscilador dividida entre UBRR + 1.
➢ Dependiendo del modo de operación de la USART, esta señal
interna es dividida entre 2, 8 ó 16.
Generación de Reloj y Modos de Operación
La USART tiene cuatro modos de operación:
➢ Normal asíncrono: la frecuencia de CLK1 es la frecuencia base
entre 16.
➢ Asíncrono a doble velocidad: la frecuencia de CLK1 es la
frecuencia base entre 8, el doble del modo normal.
➢ Síncrono como maestro: La frecuencia de CLK1 es la
frecuencia base entre 2, se pueden alcanzar velocidades más
altas al transmitir la señal de reloj.
➢ Síncrono como esclavo: En este caso, el microcontrolador está
funcionando como un receptor síncrono, por lo que también
recibe la señal de reloj en XCK. La señal externa debe
sincronizarse con el oscilador interno. También se puede
configurar el flanco en el que se obtienen los datos. La señal
CLK2 queda disponible como el reloj para recepción síncrona.
Generación de Reloj y Modos de Operación
➢ La selección del modo de operación se realiza en los registros de
configuración y estado de la USART.
➢ Bit UMSEL (registro UCSRC): operación síncrona (UMSEL =
‘1’), y asíncrona (UMSEL= ‘0’).
➢ Bit U2X (bit 1 del registro UCSRA): modo normal asíncrono
(U2X = ‘0’) y el modo asíncrono a doble velocidad (U2X = ‘1’).
Generación Reloj - Cálculo del Baud Rate
Generación Reloj - Cálculo del Baud Rate
Al calcular el valor de UBRR se obtiene un número real, por ello,
al redondear a entero se produce un error en el Baud Rate. El
porcentaje de error se puede cuantificar con la expresión:
un error en el rango de ± 5 % no afecta la comunicación
Generación Reloj - Cálculo del Baud Rate
Ejemplo: Se planea una transmisión asíncrona a 9600 bps con un
oscilador de 1 MHz. Calcular el valor del registro UBRR y obtener
el porcentaje de error, para una transmisión asíncrona normal y a
doble velocidad.
Generación Reloj - Cálculo del Baud Rate
En el modo normal asíncrono se tiene que:
Redondeando UBRR a 5, se calcula el baud rate:
El porcentaje de error generado es de:
Generación Reloj - Cálculo del Baud Rate
Para el modo asíncrono a doble velocidad se tienen los siguientes
resultados:
Redondeando UBRR a 12, se tiene que:
El porcentaje de error generado es de:
El error se reduce drásticamente al usar el modo a doble velocidad.
Generación Reloj - Cálculo del Baud Rate
Algunos valores a emplear en el registro UBRR para razones de
transmisión típicas, con diferentes osciladores y sus
correspondientes porcentajes de error.
Generación Reloj - Modo Síncrono
En el modo síncrono esclavo la USART recibe la señal de reloj en
la terminal XCK, esta señal es sincronizada con el oscilador
interno, requiriendo algunos ciclos de reloj para ello. Por esta
razón, la frecuencia de la señal de reloj externa debe estar acotada
por:
Generación Reloj - Modo Síncrono
En operaciones síncronas se debe definir el flanco de reloj en el
cual son ajustados los datos (cuando se está transmitiendo) o en el
que son muestreados (cuando se está recibiendo), esto se determina
con el bit UCPOL (bit 0 del registro UCSRC). En la tabla se
muestran los flancos de activación (polaridad), dependiendo del
valor del bit UCPOL (Clock Polarity).
Transmisión de Datos
Los datos a ser transmitidos deben ser escritos en el Registro de
Datos de la USART (UDR, USART Data Register).
Con UDR realmente se hace referencia a dos registros ubicados en
la misma dirección, un registro sólo de escritura para transmitir
datos y un registro sólo de lectura para recibirlos.
Transmisión de Datos
➢ El bloque de transmisión de datos requiere de una habilitación:
bit TXEN=‘1’ (bit 3 - registro UCSRB).
➢ La transmisión de un dato inicia cuando éste se escribe en el
registro UDR. Previamente se deben configurar los parámetros:
velocidad, número de bits por dato, bit de paridad y número de
bits de paro.
➢ Un registro de desplazamiento se encarga de la conversión de
paralelo a serie.
Transmisión de Datos
➢ El fin de la transmisión de un dato se indica con la bandera
TXC=‘1’ (bit 6 - registro UCSRA).
➢ Esta bandera puede sondearse por software o se puede
configurar al recurso para que genere una interrupción. Si se
utiliza sondeo, la bandera se limpia al escribirle un 1 lógico.
➢ No es posible escribir en el registro UDR mientras hay una
transmisión en proceso. Por ello, además del uso de la bandera
TXC es posible usar la bandera UDRE (bit 5 - registro
UCSRA).
➢ UDRE: USART Data Register Empty.
Transmisión de Datos
➢ La bandera UDRE está en alto cuando el buffer transmisor
(registro de desplazamiento) está vacío, por lo tanto, indica que
es posible iniciar con una nueva transmisión.
➢ Esta bandera puede sondearse por software o configurar el
recurso para que genere una interrupción.
➢ El estado de UDRE cambia automáticamente, dependiendo de la
actividad que ocurra en el registro UDR.
➢ En la práctica se emplea TXC o UDRE. Usar ambas banderas
puede complicar la estructura de un programa, porque indican
eventos similares cuando se transmite una sucesión de datos. Al
finalizar con la transmisión de un dato, el buffer transmisor
queda vacío.
Transmisión de Datos
➢ El bit de paridad se genera por hardware conforme los datos se
van transmitiendo. Éste queda disponible para ser transmitido
después de los bits del dato.
Recepción de Datos
El bloque para la recepción de datos tiene un Registro de Datos de
la USART (UDR), el cual es usado para recibir datos seriales por
medio de la USART.
La recepción serial es llevada a cabo con un registro de
desplazamiento que realiza la conversión de serie a paralelo.
Recepción de Datos
➢ El receptor debe habilitarse para que en cualquier momento
pueda recibir un dato. La habilitación se realiza con el bit
RXEN=‘1’ (bit 4 - registro UCSRB).
➢ El dato recibido es ubicado en el registro UDR. La indicación de
que hay un dato disponible se realiza con la bandera RXC=‘1’
(Bit 7 del registro UCSRA).
➢ Esta bandera puede sondearse por software o configurar al
recurso para que genere una interrupción. La lectura del registro
UDR limpia a la bandera y libera al registro, quedando
disponible para recibir un nuevo dato.
Recepción de Datos
➢ El cálculo del bit de paridad y su validación, comparándola con
el valor del bit de paridad recibido, se realizan por hardware. Si
existe un error, la bandera UPE=‘1’ (bit 2 - registro UCSRA).
UPE: USART Parity Error.
➢ El hardware es capaz de indicar la ocurrencia de otros 2 errores
durante la recepción, con la puesta en alto de banderas.
▪ Bandera FE (bit 4 – registro UCSRA): Un error de marco
(Frame Error) se debe a la existencia de un bit de paro con
un nivel bajo y se indica con la bandera FE.
▪Bandera DOR (bit 3 - registro UCSRA. DOR, Data Over
Run): El otro error es debido a un exceso de datos por
recepción, ocurre cuando el registro UDR tiene un dato listo
para su lectura, el registro de desplazamiento contiene otro
dato y hay un nuevo bit de inicio, este error se indica con la
bandera DOR.
Registros USART
Registros UCSR
Registros UCSR
Bit 7 - RXC0: (USART Receive Complete) Indica dato disponible por recepción.
Puede generar una interrupción. Se limpia al leer al registro UDR0.
Bit 6 - TXC0: (USART Transmit Complete) Indica que se ha concluido con la
transmisión de un dato (el buffer de salida está vacío). Puede generar una
interrupción, con su atención se limpia automáticamente a la bandera. También
puede limpiarse si se reescribe un 1 lógico en TXC0.
Bit 5 - UDRE0: (USART Data Register Empty) Indica que el registro UDR0 de
transmisión está vacío (es posible transmitir un dato). También puede generar
una interrupción. Su estado se ajusta automáticamente, de acuerdo con la
actividad en el registro UDR0.
Bit 4 - FE0: (Frame Error) Esta bandera se pone en alto cuando el bit de paro en
el buffer receptor es 0, indicando un error de marco. Se mantiene con ese valor
hasta que se haga la lectura del registro UDR0.
Registros UCSR
Bit 3 - DOR0: (Data OverRun) Indica un exceso de datos por recepción, esto
significa que el registro receptor (UDR0) tiene un dato disponible, el registro de
desplazamiento contiene otro dato y se tiene un nuevo bit de inicio. Cuando la
bandera es puesta en alto, mantiene su valor hasta que se haga la lectura del
registro UDR0.
Bit 2 - PE0: (Parity Error) Se pone en alto cuando el bit de paridad generado no
coincide con el bit de paridad recibido. Se mantiene con ese valor hasta que se
haga la lectura del registro UDR0.
Bit 1 - U2X0: (Double the USART Transmission Speed) En operaciones
asíncronas, este bit debe ponerse en alto para configurar el modo asíncrono a
doble velocidad.
Bit 0 - MPCM0: (Multi-processor Communication Mode) Habilita un modo de
comunicación entre multiprocesadores, bajo un esquema maestro-esclavos y
datos de 9 bits.
Registros UCSR
Bit 7 - RXCIE0: (RX Complete Interrupt Enable) Habilita la 
interrupción por recepción de un dato (RXC0 en alto).
Bit 6 - TXCIE0: (TX Complete Interrupt Enable) Habilita la 
interrupción por finalización de transmisión de un dato (TXC0 en 
alto).
Bit 5 - UDRIE0: (USART Data Register Empty Interrupt Enable) 
Habilita interrupción cuando el buffer transmisor está vacío 
(UDRE0 en alto).
Bit 4 - RXEN0: (Receiver Enable) RXEN0=‘1’ para poder recibir 
datos a través de la USART, con esto, la terminal RXD ya no se 
puede utilizar como entrada o salida de propósito general.
Registros UCSR
Bit 3 - TXEN0: (Transmitter Enable) TXEN0=‘1’ para poder transmitir datos a
través de la USART, con esto, la terminal TXD ya no se puede utilizar como
entrada o salida de propósito general.
Bit 2 - UCSZ02: (Character Size) Junto con los bits UCSZ0[1:0]del registro
UCSR0C definen el tamaño de los datos a enviar o recibir (ver Tabla).
Bit 1 - RXB80: (Receive Data Bit 8 ) Durante la recepción de datos de 9 bits, los
8 bits menos significativos se reciben en el registro UDR0, en RXB80 se recibe
al bit más significativo.
Bit 0 - TXB80: (Transmit Data Bit 8 ) Para transmitir datos de 9 bits, los 8 bits
menos significativos deben ubicarse en el registro UDR0, en TXB80 debe
colocarse al bit más significativo.
Registros UCSR
Bits [7:6] - UMSEL0[1:0]: (USART Mode Select) Bits para 
seleccionar el modo de operación de la USART0 (ver tabla).
Bits [5:4] - UPM0[1:0]: (Parity Mode) Bits para determinar el uso 
del bit de paridad y se define su tipo (ver tabla).
Bit 3 - USBS0: (Stop Bit Select) Una trama para un dato concluye 
con el bit de paro (‘1’), si el bit USBS0 se pone en alto, serán dos 
bits de paro.
Registros UCSR
Bits [2:1] - UCSZ0[1:0]: (Character Size) Junto con el bit UCSZ02
del registro UCSR0B definen el tamaño de los datos a enviar o
recibir (ver tabla).
Bit 0 - UCPOL0: (Clock Polarity) En operaciones síncronas, el bit
UCPOL0 determina el flanco de reloj en el cual se escriben los
datos (cuando se está transmitiendo) o en el que son leídos (cuando
se está recibiendo) (ver tabla).
Registros UCSR
Registros UCSR
INTERRUPCIONES USART0
➢ USART0 puede interrumpir a la CPU por 3 eventos:
▪ Recepción completa (bandera RXC0).
▪ Transmisión completa (bandera TXC0).
▪ Buffer transmisor vacío (bandera UDRE0).
➢ Las interrupciones se deben habilitar (bits: RXCIE0, TXCIE0 y
UDRIE0).
Vectores de interrupción para la USART0
BIBLIOGRAFÍA
Los Microcontroladores AVR de ATMEL. Capítulo 6.
http://www.utm.mx/~fsantiag/Libro_Micros_AVR.htm
QEEWiki, USART
https://sites.google.com/site/qeewiki/books/avr-
guide/usart
ATmega328P 8-bit AVR Microcontroller with 32K
Bytes In-System Programmable Flash, DATASHEET
Capítulo 7. El microcontrolador ATMega328P de
Microchip. Felipe Santiago Espinosa.
http://www.utm.mx/~fsantiag/Libro_Micros_AVR.htm
https://sites.google.com/site/qeewiki/books/avr-guide/usart