Itt kommunikációt fogunk létrehozni egy ATmega8 mikrovezérlő és az Arduino Uno között. Az itt létrehozott kommunikáció UART (univerzális aszinkron vevő adó) típusú. Ez a soros kommunikáció. Ezzel a soros kommunikációval az adatok két vezérlő között oszthatók meg, amire a különféle beágyazott rendszeralkalmazásokban szükség van.
A beágyazott rendszerekben alapvető ismeretekkel kell rendelkeznünk a rendszerkommunikációról, ezért ezt a projektet végezzük. Ebben a projektben megvitatjuk az alapvető kommunikációs rendszert, és soros formában elküldünk néhány adót az adóból a vevőbe.
Ebben a projektben az ATMEGA8 adóként, az ARDUINO UNO pedig vevőként működik. Soros kommunikációban BIT BIT BY BIT adatot fogunk küldeni, amíg a BYTE adat teljesen át nem kerül. Az adatok 10 bites méretűek lehetnek, de egyelőre megtartjuk a 8BITS-ot.
Szükséges alkatrészek
Hardver: ATMEGA8, ARDUINO UNO, tápegység (5v), AVR-ISP PROGRAMMER, 100uF kondenzátor (a tápegységen keresztül csatlakozik), 1KΩ ellenállás (két darab), LED, Gomb.
Szoftver: Atmel studio 6.1, progisp vagy flash magic, ARDUINO NIGHTLY.
Áramkör diagram és magyarázat
Mielőtt megvitatnánk az adó és vevő kapcsolási rajzát és programozását, meg kell értenünk a soros kommunikációt. Az ATMEGA itt sorban küldi az adatokat az UNO-nak, amint arról korábban szó esett.
Más kommunikációs módokkal rendelkezik, mint például a MASTER SLAVE kommunikáció, a JTAG kommunikáció, de az egyszerű kommunikáció érdekében az RS232-et választjuk. Itt összekapcsoljuk az ATMEGA8 TXD (adó) PIN-kódját az ARDUINO UNO RXD (vevő) PIN-kódjával
A létrehozott adatkommunikáció programozása:
- Nyolc adatbit
- Két stopbit
- Nincs paritásellenőrző bit
- 9600 BPS (bit / másodperc) sebesség
- Aszinkron kommunikáció (nincs óraosztás az ATMEGA8 és az UNO között (mindkettőnek eltérő az óraegysége))
Az UART létrehozásához az Arduino Uno és az ATMEGA8 között pontosan be kell programoznunk a beállítást. Ehhez a fent említett paramétereket mindkét végén azonosnak kell tartanunk. Ebben az adóként, más pedig vevőként működik. Az alábbiakban megbeszéljük az egyes oldalsó beállításokat.
Az RS232 interfész esetében a következő tulajdonságoknak kell teljesülniük az ÁTVITEL oldalon (ATMEGA8):
1. Engedélyezni kell az első vezérlő TXD tűjét (adatfogadási funkcióját) a TRANSMITTER számára.
2. Mivel a kommunikáció soros, tudnunk kell, ha az adat bye beérkezik, hogy a teljes byte beérkezéséig le tudjuk állítani a programot. Ez az adatfogadás teljes megszakításának engedélyezésével történik.
3. Az adatokat 8 bites módban továbbítják és fogadják a vezérlőnek. Tehát egyszerre két karakter kerül elküldésre a vezérlőnek.
4. Nincsenek paritásbitek, egy stopbit a modul által küldött adatokban.
A fenti jellemzők a vezérlő regiszterekben vannak beállítva; röviden megvitatjuk őket:
SÖTÉT SZÜRKE (UDRE): Ez a bit nincs beállítva az indításkor, de a munka során annak ellenőrzésére szolgál, hogy az adó készen áll-e az adásra. További részletekért lásd a TRASMITTER SIDE programot.
VOILET (TXEN): Ez a bit az adó PIN-kódjának engedélyezésére van beállítva a TRASMITTER SIDE oldalon.
SÁRGA (UCSZ0, UCSZ1 és UCSZ2): Ez a három bit arra szolgál, hogy kiválasszuk az egyszerre fogadott vagy küldött adatbitek számát.
Két SIDES közötti kommunikáció nyolc bites kommunikációként jön létre. A kommunikációnak az UCSZ0, az UCSZ1 és az UCSZ2 nullával való megfeleltetésével egyeztetjük a táblázatot.
ORANGE (UMSEL): Ezt a bitet annak alapján állítják be, hogy a rendszer aszinkron (mindkettő eltérő órát használ) vagy szinkron (mindkettő ugyanazt az órát) kommunikál.
Mindkét SYTEMS nem osztja meg az órát. Mivel mindkettő saját belső óráját használja. Tehát mindkét vezérlőben 0-ra kell állítanunk az UMSEL értékét.
ZÖLD (UPM1, UPM0): Ezt a két bitet a kommunikáció során használt bitparitás alapján állítjuk be.
Az ATMEGA adat itt úgy van beprogramozva, hogy paritás nélkül küldjön adatokat, mivel az adatátviteli hosszúság kicsi, egyértelműen számíthatunk arra, hogy nincs adatvesztés vagy hiba. Tehát itt nem állítunk fel paritást. Tehát mind az UPM1-et, mind az UPM0-t nullára állítjuk, vagy maradnak, mert alapértelmezés szerint az összes bit 0.
KÉK (USBS): Ez a bit arra szolgál, hogy kiválassza a stop bitek számát, amelyet a kommunikáció során használunk.
Az általa létrehozott kommunikáció aszinkron típusú, így a pontosabb adatátvitel és vétel érdekében két stopbitet kell használnunk, ezért az USBS-t '1'-re állítottuk az ADÓ oldalon.
Az adatátviteli sebességet a vezérlő állítja be a megfelelő UBRRH kiválasztásával:
Az UBRRH értéket az adatátviteli sebesség és a CPU kristályfrekvenciájának keresztreferenciájával választjuk meg:
Tehát kereszthivatkozás alapján az UBRR értéke „6”, és így az átviteli sebességet állítják be.
Ezzel beállítottuk a beállításokat a TÁVADÓ OLDALÁN; most a FOGADÓ OLDALról fogunk beszélni.
Az UNO-ban engedélyezett soros kommunikáció egyetlen parancs használatával valósítható meg.
|
A kommunikációt, amelyet feltehetőleg létrehoztunk, a BAUD sebessége 9600 bit / másodperc. Tehát az UNO számára, hogy létrehozzon egy ilyen adatátviteli sebességet és elindítsa a soros kommunikációt, a „Serial.begin (9600);” parancsot használjuk. Itt a 9600 adatátviteli sebesség és változtatható.
Most már minden maradt, ha adatok fogadására, az egyiket megkapja az UNO, és az rendelkezésre áll. Ezeket az adatokat a “kapottdata = Soros.olvasott ();” parancs veszi fel. Ezzel a paranccsal a soros adatok a 'kapott adatok' egész számra kerülnek.
Amint azt az áramkör mutatja, az adó oldalán csatlakoztatott gomb, amikor ezt a nyomógombot megnyomja egy nyolc bites adatot, a TRANSMITTER (ATMEGA8) küldi, és ezeket az adatokat a RECEIVER (ARDUINO UNO) fogadja. Az adatok sikeres fogadásakor be- és kikapcsolja a hozzá kapcsolt LED-et, hogy két vezérlő között sikeres adatátvitelt mutasson.
Ezzel az UART-mal sikeresen létrejött az ATMEGA8 vezérlő és az ARDUINO UNO közötti kommunikáció.