Aquí establirem una comunicació entre un microcontrolador ATmega8 i Arduino Uno. La comunicació establerta aquí és de tipus UART (Universal Asynchronous Receiver Transmitter). És comunicació en sèrie. Mitjançant aquesta comunicació en sèrie es poden compartir dades entre dos controladors, cosa que es requereix en diverses aplicacions del sistema incrustat.
Als sistemes incrustats hem de tenir coneixements bàsics sobre les comunicacions del sistema, de manera que estem fent aquest projecte. En aquest projecte parlarem del sistema bàsic de comunicació i enviarem algunes dades del transmissor al receptor en sèrie.
En aquest projecte, ATMEGA8 actua com a TRANSMISSOR i ARDUINO UNO com a RECEPTOR. En la comunicació en sèrie enviarem dades BIT BY BIT, fins que un BYTE de dades es transfereixi completament. Les dades poden tenir una mida de 10 bits, però ara ens mantindrem a 8 bits.
Components necessaris
Maquinari: ATMEGA8, ARDUINO UNO, font d'alimentació (5v), PROGRAMADOR AVR-ISP, condensador 100uF (connectat a través de la font d'alimentació), resistència 1KΩ (dues peces), LED, botó.
Programari: Atmel studio 6.1, progisp o flash magic, ARDUINO NIGHTLY.
Diagrama del circuit i explicació

Abans de discutir el diagrama de circuits i la programació per al transmissor i el receptor, hem d’ entendre sobre la comunicació en sèrie. Aquí ATMEGA envia dades a l'ONU en sèrie, tal com s'ha comentat anteriorment.
Té altres modes de comunicació com la comunicació MASTER SLAVE, la comunicació JTAG, però per facilitar la comunicació estem escollint RS232. Aquí connectarem el PIN TXD (transmissor) d’ATMEGA8 al PIN RXD (receptor) de ARDUINO UNO
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 9600 BPS (bits per segon)
- Comunicació asíncrona (no hi ha quota de rellotge entre ATMEGA8 i UNO (tots dos tenen unitats de rellotge diferents))
Per establir UART entre Arduino Uno i ATMEGA8, hem de programar la configuració amb precisió. Per a això, hem de mantenir els paràmetres esmentats en tots dos extrems. En aquest actua com a TRANSMISSOR i altres com a RECEPTOR. A continuació, parlarem de la configuració de cada costat.
Ara, per a la interfície RS232, s'han de complir les funcions següents per al costat del TRANSMISSOR (ATMEGA8):
1. El pin TXD (funció de recepció de dades) del primer controlador ha d'estar habilitat per al TRANSMISSOR.
2. Com que la comunicació és en sèrie, hem de saber cada vegada que es reben les dades de comiat, 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 comentarem breument:

GRIS FOSC (UDRE): aquest bit no s’estableix durant l’arrencada, 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ó.
VOILET (TXEN): aquest bit està configurat per habilitar el pin del transmissor al TRASMITTER SIDE.
GROC (UCSZ0, UCSZ1 i UCSZ2): 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 SIDES 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.
TARONJA (UMSEL): aquest bit es defineix en funció de si el sistema es comunica de manera asíncrona (tots dos utilitzen un rellotge diferent) o síncronament (tots dos utilitzen el mateix rellotge).

Tant els SISTEMES 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): aquests dos bits s’ajusten en funció de la paritat de bits que estem utilitzant en la comunicació.

Les dades ATMEGA aquí estan programades per enviar dades sense paritat, ja que la longitud de 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): aquest bit s’utilitza per triar el nombre de bits de parada que estem utilitzant durant la comunicació.

La comunicació que la va establir é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’ al costat del TRANSMISSOR..
La velocitat en bauds s’estableix al controlador escollint la UBRRH adequada:

El valor UBRRH es tria per velocitat en bauds de referència creuada i freqüència de cristall de la CPU:

Així, per referència creuada, el valor UBRR es veu com a '6' i, per tant, s'estableix la velocitat en bauds.
Amb això hem establert la configuració de TRANSMITTER SIDE; ara parlarem de RECIBIR COSTAT.
L'activació de la comunicació en sèrie a UNO es pot fer mitjançant una única ordre.
|
La comunicació que suposàvem establir es realitza amb una velocitat BAUD de 9600 bits per segon. Per tant, perquè l’ONU estableixi aquesta velocitat de transmissió i comenci la comunicació en sèrie utilitzem l’ordre "Serial.begin (9600);". Aquí 9600 és una velocitat en bauds i és variable.
Ara queda tot si per rebre dades, una les dades són rebudes per l'ONU, estarà disponible per a la seva presa. Aquestes dades es recullen mitjançant l'ordre "receiveddata = Serial.read ();". Mitjançant aquesta ordre, les dades de sèrie es porten a 'done rebuda' anomenada enter.
Com es mostra al circuit, hi ha un botó connectat al costat del transmissor, quan es prem aquest botó, es transmeten dades de vuit bits mitjançant el TRANSMISSOR (ATMEGA8) i aquestes dades són rebudes pel RECEPTOR (ARDUINO UNO). En rebre aquestes dades amb èxit, commuta el LED connectat a ON i OFF, per mostrar la transferència de dades amb èxit entre dos controladors.
Mitjançant aquesta UART s’estableix la comunicació entre el controlador ATMEGA8 i ARDUINO UNO.
