Ovdje ćemo uspostaviti komunikaciju između ATmega8 mikrokontrolera i Arduino Uno. Ovdje uspostavljena komunikacija je tipa UART (Universal Asynchronous Receiver Transmitter). To je serijska komunikacija. Ovom se serijskom komunikacijom podaci mogu dijeliti između dva kontrolera, što je potrebno u raznim ugrađenim sistemskim aplikacijama.
U ugrađenim sustavima moramo imati osnovno znanje o sistemskim komunikacijama, pa za to radimo ovaj projekt. U ovom ćemo projektu razgovarati o osnovnom komunikacijskom sustavu i serijski ćemo poslati neke podatke s odašiljača na prijemnik.
U ovom projektu ATMEGA8 djeluje kao PREDAJAČ, a ARDUINO UNO kao PRIMAČ. U serijskoj komunikaciji podatke ćemo slati BIT PO BIT dok se bajt podataka ne prenese u potpunosti. Podaci mogu biti veličine 10 bita, ali zasad ćemo se držati 8 BITA.
Komponente potrebne
Hardver: ATMEGA8, ARDUINO UNO, napajanje (5v), AVR-ISP PROGRAMER, kondenzator 100uF (spojen preko napajanja), otpornik 1KΩ (dva dijela), LED, tipka.
Softver: Atmel studio 6.1, progisp ili flash magic, ARDUINO NOĆU.
Kružni dijagram i objašnjenje

Prije nego što razgovaramo o shemi sklopa i programiranju za odašiljač i prijamnik, moramo razumjeti serijsku komunikaciju. ATMEGA ovdje šalje podatke UNO-u serijski, kao što je prethodno spomenuto.
Ima i druge načine komunikacije poput MASTER SLAVE komunikacije, JTAG komunikacije, ali za jednostavnu komunikaciju odabiremo RS232. Ovdje ćemo povezati TXD (odašiljač) PIN ATMEGA8 s RXD (prijemnikom) PIN ARDUINO UNO
Uspostavljena podatkovna komunikacija programirana je tako da ima:
- Osam podatkovnih bitova
- Dva zaustavna bita
- Nema bita za provjeru pariteta
- Brzina prijenosa od 9600 BPS (bitova u sekundi)
- Asinkrona komunikacija (bez dijeljenja sata između ATMEGA8 i UNO (obje imaju različite jedinice sata))
Da bismo uspostavili UART između Arduino Uno i ATMEGA8, moramo točno programirati postavku. Da bismo to učinili, gore navedeni parametri trebaju biti isti na oba kraja. U ovom jedan djeluje kao PRIJEMNIK, a drugi kao PRIJEMNIK. U nastavku ćemo razgovarati o postavkama svake strane.
Sada za RS232 sučelje, sljedeće strane moraju biti zadovoljene za TRANSMITTER stranu (ATMEGA8):
1. TXD pin (značajka primanja podataka) prvog kontrolera mora biti omogućen za TRANSMITTER.
2. Budući da je komunikacija serijska, moramo znati kad god se primaju podaci, kako bismo mogli zaustaviti program dok se ne primi kompletan bajt. To se postiže omogućavanjem da podaci dobivaju potpuni prekid.
3. PODACI se prenose i primaju u kontroler u 8-bitnom načinu rada. Dakle, dva znaka bit će poslana upravljaču odjednom.
4. Nema bitova pariteta, jedan zaustavni bit u podacima koje šalje modul.
Gore navedene značajke postavljene su u registre kontrolera; razgovarat ćemo o njima ukratko:

TAMNO SIVO (UDRE): Ovaj bit nije postavljen tijekom pokretanja, ali se koristi tijekom rada za provjeru je li odašiljač spreman za prijenos ili ne. Za više detalja pogledajte program na TRASMITTER SIDE.
VOILET (TXEN): Ovaj bit je postavljen za omogućavanje pina odašiljača na TRASMITTER SIDE.
ŽUTA (UCSZ0, UCSZ1 i UCSZ2): Ova tri bita koriste se za odabir broja podatkovnih bitova koje primamo ili šaljemo u jednom potezu.

Komunikacija između dviju SIDES-a uspostavlja se kao osmerobitna komunikacija. Usklađivanjem komunikacije s tablicom koju imamo, UCSZ0, UCSZ1 na jedan i UCSZ2 na nulu.
NARANČASTA (UMSEL): Ovaj je bit postavljen na temelju toga komunicira li sustav asinkrono (oba koriste drugačiji sat) ili sinkrono (oba koriste isti sat).

Oba SUSTAVA nemaju zajednički sat. Budući da obojica koriste svoj vlastiti sat. Dakle, moramo postaviti UMSEL na 0 u oba kontrolera.
ZELENO (UPM1, UPM0): Ova dva bita prilagođena su na temelju pariteta bitova koje koristimo u komunikaciji.

Podaci ATMEGA ovdje su programirani za slanje podataka bez pariteta, jer je duljina prijenosa podataka mala, možemo očito očekivati gubitak ili pogrešku podataka. Dakle, ovdje ne postavljamo nikakav paritet. Dakle, postavljamo i UPM1, UPM0 na nulu ili su oni lijevi, jer su svi bitovi prema zadanim postavkama 0.
PLAVO (USBS): Ovaj bit služi za odabir broja zaustavnih bitova koje koristimo tijekom komunikacije.

Utvrđeno je da je komunikacija asinkronog tipa, pa za točniji prijenos i prijem podataka moramo koristiti dva zaustavna bita, pa smo zato postavili USBS na '1' na strani PRIJENOSNIKA.
Brzina prijenosa se postavlja u regulatoru odabirom odgovarajućeg UBRRH:

Vrijednost UBRRH odabire se brzinom prijenosa podataka i frekvencijom kristala CPU-a:

Dakle, unakrsnom referencom vrijednost UBRR vidi se kao '6', i tako je postavljena brzina prijenosa.
Ovim smo uspostavili postavke na STRANI PRENOSNIKA; sada ćemo razgovarati o PRIMANJU STRANE.
Omogućavanje serijske komunikacije u UNO-u može se izvršiti pomoću jedne naredbe.
|
Komunikacija za koju smo pretpostavljali da je uspostavljena vrši se brzinom BAUD-a od 9600 bita u sekundi. Dakle, da bi UNO uspostavio takvu brzinu prijenosa i započeo serijsku komunikaciju, koristimo naredbu "Serial.begin (9600);". Ovdje je 9600 brzina prijenosa i promjenjiva.
Sad je ostalo sve ako za primanje podataka UNO primi jedan podatak, koji će biti dostupan za uzimanje. Ti se podaci prikupljaju naredbom “receiveddata = Serial.read ();”. Ovom se naredbom serijski podaci premještaju u 'receiveddata' pod nazivom cijeli broj.
Kao što je prikazano u krugu, gumb spojen na strani odašiljača, kada ovaj gumb pritisne osmobitni podatak šalje se PREDAJAČEM (ATMEGA8), a ovi podaci primaju PRIJEMNIKOM (ARDUINO UNO). Po uspješnom primanju ovih podataka uključuje i isključuje LED na nju povezanu kako bi prikazao uspješan prijenos podataka između dva regulatora.
Ovim se UART-om uspješno uspostavlja komunikacija između ATMEGA8 kontrolera i ARDUINO UNO.
