Paso 4: USART como un puerto serie
El periférico USART que viene con muchos micros AVR es un puerto flexible que puede actuar como muchos protocolos diferentes.
Algunos micros tienen un UART que mientras que es similar, sólo puede realizar como un puerto serial estándar.
Mientras que puede actuar como muchos tipos de puerto serie, sólo vamos a utilizar como un puerto serie básico, que nos permitirá utilizar fácilmente la radio XBee posteriormente.
También puede usar este puerto serial para conectar a un ordenador antiguo, o a través de un chip FTDI para darle una conexión USB Serial a una computadora nueva.
Es en realidad cuántos arduinos trabajar, utilizan un chip FTDI para proporcionar una conexión USB Serial con el microcontrolador.
Para este ejemplo vamos a micros de ATtimy2313 programa dos para enviar caracteres en serie entre sí.
Construir la placa como se muestra en la imagen.
Llamemos a la izquierda A micro y la segunda B.
Conectar el pin 2 de la A la clavija 3 de B.
Conectar el pin 3 de la A la clavija 2 del B.
El pin 2 es el RXD (recibir) y el pin 3 es TXD (transmitir).
Conecte un LED a B en el pin 11 (PD6) y un botón en una al pin 19 (PB7).
Utilice el código adjunto para programar los dos chips.
El reloj de cada uno de 1MHz
En Chip A descomentar esta línea:
#define transmitir
y comente esta línea:
#define recibir
En el chip B hace lo contrario:
#define transmitir
#define recibir
Ahora, cuando usted presiona el botón en el A, B el LED se encenderá!
Al principio no parece muy impresionante, pero usted podría utilizar esto para hablar a las virutas lejos sobre una radio XBee, o a un ordenador que puede ser útil para ayudar a depurar su código.
Así que, ¿cómo funciona?
Veamos las líneas interesantes:
UBRRH = 0;
UBRRL = 12;
Échale un vistazo a la hoja de datos para el registro UBRR.
Esto es un poco 12 registro, así como el 2313 es una micro de 8 bits, este se divide en dos bytes, alta (UBRRH) y bajo (UBRRL).
El registro agudo no es un registro completo, con la mitad superior (4 bits) reservado (no usado, pero no debe ser tocado para futura compatibilidad).
Si se desplaza hasta la siguiente página, verá una tabla útil de diferentes velocidades dependiendo del reloj de tu micro.
Para este ejemplo queremos 9600 baudios (útil más tarde para el XBee).
Buscando en la tabla 1MHz obtenemos un valor de 6 para el UBRR.
Sin embargo tiene un -7% tasa de error, que es un poco demasiado alto.
Pero si usted busca una columna una tasa de error de 0,2%.
¿Qué es diferente?
Se establece el indicador U2X y el UBRR se establece en 12.
Usaremos y establecido la U2X.
A continuación tenemos diferentes opciones a configurar:
UCSRA = (1 << U2X);
UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << UCSZ1) | (1 << UCSZ0);
Estos 3 registros se describen en la hoja de datos por lo que veremos en ellos sólo brevemente.
U2X se describe como "doble la velocidad de transmisión UART"
RXEN dice la USART para activar el modo de recepción y TXEN es permitir transmitir
UCSZ1 y UCSZ0 se fijan en base en la tabla en la Página 133, ajuste el tamaño del carácter como 8 bits.
A continuación, en el lado de transmisión tenemos esta línea de código:
mientras (! () UCSRA & (1 << UDRE)));
Esto es control de la broca "USART datos Registro vacío" de "Control USART y estado registro A".
Cuando se establece en 1, el bucle sale y puede ejecutar la siguiente línea de código:
UDR = 'F';
Esto está pasando en el carácter 'F' en el búfer de transmisión, esto sólo se puede escribir cuando está claro, por eso tenemos el bucle de espera antes de él.
En el lado de recibir es lo mismo:
mientras (! () UCSRA & (1 << RXC)));
Aquí esperamos para que el búfer de recepción esté vacío y luego leemos UDR para ver qué valor tiene:
Si (UDR == 'F')
Podría apenas como fácilmente poner esto en una variable como así:
char x = UDR;
Tienes que leer UDR para despejarla, y sólo se puede leer una vez (después de que se borra y permite un nuevo personaje en), así que si el valor es importante para usted, asegúrese de guardar una copia del valor de la primera lectura!
Ahora, en este ejemplo se divide en transmitir y recibir, pero usted puede tener ambos en uno, yo sólo quería hacer un ejemplo sencillo