En aquest tutorial establirem una comunicació en sèrie entre dos microcontroladors ATMEGA8. La comunicació establerta aquí és de tipus UART (Universal Asynchronous Receiver Transmitter). Mitjançant aquesta comunicació en sèrie es poden compartir dades entre dos microcontroladors, cosa que es requereix en diversos sistemes incrustats.
Components necessaris
Maquinari: ATMEGA8 (2 peces), font d'alimentació (5 v), PROGRAMADOR AVR-ISP, condensador 100uF (connectat a través de la font d'alimentació), resistència d'1 KΩ (dues peces), LED, botó.
Programari: Atmel studio 6.1, progisp o flash magic.
Diagrama i explicació del circuit

Comprenguem la comunicació en sèrie dels microcontroladors AVR. Aquí ATMEGA envia dades a l'altre ATMEGA en sèrie. Té un altre mode de comunicació, però per facilitar la comunicació estem escollint RS232. El pin RS232 del primer ATMEGA8 està connectat al pin RXD del segon ATMEGA8.
La comunicació de dades establerta està programada per tenir:
- Vuit bits de dades
- Dos bits de parada
- Cap bit de comprovació de la paritat
- Baud rate de 2400 BPS (bits per segon)
- Comunicació asíncrona (sense rellotge compartit entre dos ATMEGA8)
Per tant, tenim dos registres establerts per a dos ATMEGA8 de manera diferent, on un actua com a TRANSMISSOR i l’altre actua com a RECEPTOR.
Ara, per a la interfície RS232 entre dos microcontroladors ATmega, s'han de complir les funcions següents per al TRANSMISSOR i el RECEPTOR:
1. El pin TXD (característica de recepció de dades) del primer controlador ha d’estar habilitat per al TRANSMISSOR i el pin RXD del segon controlador ha d’estar habilitat per al RECEPTOR.
2. Com que la comunicació és en sèrie, hem de saber cada vegada que es rep el byte de dades, de manera que podem aturar el programa fins que es rep un byte complet. Això es fa activant una interrupció completa de les dades.
3. Les dades es transmeten i reben al controlador en mode de 8 bits. Per tant, s’enviaran dos caràcters al controlador alhora.
4. No hi ha bits de paritat, un bit de parada a les dades enviades pel mòdul.
Les funcions anteriors es defineixen als registres del controlador; els parlarem breument,

GRIS FOSC (UDRE): (TRASMITTER SIDE) Aquest bit no s’estableix durant l’inici, però s’utilitza durant el treball per comprovar si el transmissor està preparat per transmetre o no. Consulteu el programa a TRASMITTER SIDE per obtenir més informació.
GRIS CLAR (RXC): (RECEPTOR LATERAL) Aquest bit no s'ha definit durant l'inici, però s'utilitza durant el treball per comprovar si el receptor està preparat per rebre dades o no. Consulteu el programa a RECEIVING SIDE per obtenir més informació.
VOILET (TXEN): (TRASMITTER SIDE) Aquest bit està configurat per habilitar el pin del transmissor a TRASMITTER SIDE.
VERMELL (RXEN): (LATGE DE RECEPCIÓ) Aquest bit representa la característica de rebre dades, aquest bit s’ha d’establir perquè les dades del mòdul les rebi el controlador, també habilita el pin RXD del controlador.
MARRÓ (RXCIE): aquest bit s'ha de configurar per obtenir una interrupció després de la recepció de dades amb èxit. En habilitar aquest bit, ho coneixem just després de rebre dades de 8 bits. No farem servir aquest bit aquí, de manera que es deixa sol.
ROSA (URSEL): aquest bit s’ha d’establir abans d’habilitar altres bits a UCSRC, després d’establir altres bits necessaris a UCSRC; URSEL s'ha de desactivar o posar a zero. No farem servir aquest bit aquí, de manera que es deixa sol.
GROC (UCSZ0, UCSZ1, UCSZ2): (RECEPTOR LATERAL I TRASMITTOR LATERAL) Aquests tres bits s’utilitzen per seleccionar el nombre de bits de dades que estem rebent o enviant d’una sola vegada.

La comunicació entre dos ATMEGA s’estableix com a comunicació de vuit bits. En fer coincidir la comunicació amb la taula que tenim, UCSZ0, UCSZ1 a un i UCSZ2 a zero.
Hem d’establir-los tant pel costat receptor com pel transmissor.
TARONJA (UMSEL): (RECEPTOR LATERAL I TRASMESSOR LATERAL) Aquest bit s’estableix en funció de si el sistema es comunica de manera asíncrona (tots dos utilitzen un rellotge diferent) o síncrona (tots dos utilitzen el mateix rellotge).

Tots dos controladors no comparteixen cap rellotge. Ja que tots dos utilitzen el seu propi rellotge intern. Per tant, hem d’establir UMSEL a 0 en ambdós controladors.
VERD (UPM1, UPM0): (RECEPTOR LATERAL I TRASMISSOR LATERAL) Aquests dos bits s’ajusten en funció de la paritat de bits que estem utilitzant en la comunicació.

L'ATMEGA està programat per enviar dades sense paritat, ja que la durada de la transmissió de dades és petita, clarament podem esperar que no es produeixi cap pèrdua o error de dades. Per tant, no establim cap paritat aquí. Per tant, establim UPM1, UPM0 a zero o queden, perquè tots els bits són 0 per defecte..
BLAU (USBS): (RECEPTOR SIDE & TRASMITTER SIDE) Aquest bit s’utilitza per triar el nombre de bits de parada que estem utilitzant durant la comunicació.

La comunicació que s’estableix aquí és de tipus asíncron, de manera que per obtenir una transmissió i recepció de dades més precises, hem d’utilitzar dos bits d’aturada, de manera que establim USBS a “1” en els dos controladors.
La velocitat en bauds s’estableix al controlador escollint la UBRRH adequada.

El valor UBRRH és escollit per la velocitat en bauds de referència creuada i la freqüència de cristall de la CPU.

Així, per referència creuada, el valor UBRR es veu com a "25" i, per tant, s'estableix la velocitat en bauds.
Com es mostra al circuit, es connecta un botó al costat del transmissor. Quan es prem aquest botó, es transmeten dades de vuit bits per part del TRANSMISSOR i aquestes dades les rep el RECEPTOR. En rebre aquestes dades amb èxit, commuta el LED connectat a ON i OFF, que mostra la transferència de dades amb èxit entre dos controladors.
