Intelligens eszközöknek (moduloknak) nevezem azokat, melyek önállóan végeznek el feladatokat, és a begyűjtött adatokat valamilyen módon továbbítják Arduino felé, illetve az Arduino-tól kapott adatokat valamilyen módon feldolgozzák. Ilyen eszközök a hőmérséklet, páratartalom és légnyomásmérők, és még rengeteg érzékelő, és nyilván intelligens eszköznek tekinthető az én önkénes meghatározásomban egy LCD karakteres vagy grafikus kijelző is. Ezeknek az eszközöknek ismertető jele, hogy összetett adatokat közvetítenek vagy várnak működésük során, és nem egy vagy több kivezetés állapotát kapcsolgatják vagy figyelik bambán, mint egy kapcsoló, vagy egy led. Az összetettebb adatok átvitele már bonyolultabb folyamat. Az adatcsere kommunikációt kíván!
Lássunk hát példát a kommunikációs lehetőségekre. Sokféle megoldást találtak ki az informatika néhány évtizedes történetében. Ezekből három félét hardveresen is beleépítettek ATmega328P chipbe. A hardveres beépítés azt jelenti, hogy programunkból csak az adatot kell küldeni, vagy éppen várni kell az adat megérkezésére, de nem kell azzal foglalkozni, hogyan is történik a továbbítás. A használathoz egyetlen megkötés, hogy előre meghatározott kivezetéseket kell használnunk.
A legegyszerűbb kommunikációs megoldás a soros port. Szakirodalomban UART-nak szokták becézni. Azért is egy alap kommunikációs forma, mert pl. az Arduino-ba a programot is ezzel a soros porttal töltjük fel a PC-ről. A PC-n található USB csatlakozó is egy soros port, csak egy fokkal modernebb és összetettebb, mint az, amit az Arduino-ban találunk. Az Arduino Uno-ra ráépítették az USB-soros átalakítót, azért is tudunk közvetlenül programokat tölteni rá, illetve adatokat is tudunk továbbítani a PC és az Arduino kártya között. Az ATmega328 chip használata esetében nekünk magunknak kell egy USB-soros átalakítót építenünk, ha a PC-re akarunk adatokat továbbítani, vagy a PC-ben található “mezei” soros portot kellene használnunk. Már nem minden PC-ben van soros port, időközben elavult, így marad az USB port.
A soros kommunikációról egyenlőre elég annyit tudni, hogy két vezetékkel kötjük össze a beszélgető partnereket, egyiken adás, a másikon vétel zajlik. Kell még egy föld vezeték is az eszközök között, ami egy harmadik vezeték, de ezt nem szokták külön számolni, mert általában a tápfeszültség két vezetékének egyike a földvezeték, és automatikusan rendelkezésre áll. Távoli berendezések esetén azonban ez is kelleni fog. Tehát a kettő, az valójában három.
Az átvitelre szánt adatokat egy start, és egy stop jelzéssel látjuk el, a kettő között találhatók az értékes adatok. A részletek most nem érdekesek. Nem kell tudni, hogy miként működik, elég ha használni tudod. Itt találsz konkrét példákat a soros port használatára. Ha részletesebben is szeretnéd megismerni a soros kommunikációt, akkor kattints ide!
Az egyszerű soros kapcsolat igen buta, csak egy-egy eszköz tud egyszerre beszélgetni a két vezeték felhasználásával. Ha az Arduino-nak több különböző külső modullal is beszélgetnie kell, hamar elfogynak a kivezetések, ráadásul csak egy hardveresen beépített soros portunk van. Erre a problémára jelent megoldást az I2C kapcsolat. Ebben már az egyes eszközök címmel rendelkeznek, és ugyanazon a két vezetéken többen is kommunikálhatnak. Nyilván ennek a megoldásnak a hátránya, hogy az értékes adatok mellett egy csomó adminisztráció is áramlik (címek, parancsok stb.), és ezért a kommunikáció sokkal lassúbb, de valamit valamiért! Igen elterjedt az I2C, már szinte minden eszközbe beépítik. Használtam már hőmérőt, LCD kijelzőt, eeprom-ot is ezzel a kommunikációval. Itt láthatsz egy példát a használatára és a fontosabb tulajdonságaira, részletesebben pedig itt ismerheted meg a működését. Az I2C busz természetesen arra is alkalmas, hogy két Arduino alaplap és program cseréljen adatokat. Gyakorlati példát találsz itt!
A soros kommunikáció azért lassú, mert egy vezetéken zajlik az információ átvitele. Az I2C előnye, hogy akár 127 eszközt is felfűzhetsz párhuzamosan egy vezetékpárra, de még a soros portnál is lassúbb lehet a rengeteg adminisztratív adatcsere miatt. Ha valamilyen okból nagy sebességre van szükség, akkor egyik sem az igazi. Erre az eshetőségre találták ki az SPI kommunikációt. Ez az adatátviteli megoldás minimum 3 vezetékkel működik. Van egy oda-vissza adatvezeték pár, és egy órajel vezeték. Az órajel vezeték megmondja, mikor van értékes adat a jelvezetéken. Ettől az átvitel sokkal gyorsabb. Nem kell start és stop bit, az egyes átvitt byte-ok között nem kell szünet, sőt teljesen folyamatos lehet az adatáramlás. Ha több eszközzel is kell egyszerre kommunikálni, akkor minden egyes eszközhöz kell még egy olyan vezeték, ami jelzi, hogy vele akarunk dolgozni. Vagyis eszközönként kell még egy-egy kiválasztó vezeték. Láthatóan szaporodik az összeköttetések száma, de cserébe nagyobb sebességet kapunk. Ennek eredménye, hogy a grafikus kijelzőkön akár animációkat is megjeleníthetünk, vagy az SD kártyáról zenét tudunk lejátszani. Mindez átlagos soros porton vagy I2C-n keresztül nem menne. Már el is árultam melyek azok a modulok, melyeknél várhatóan SPI kommunikációt használunk. Ha ide kattintasz, akkor láthatsz példát arra, hogyan is lehet használni egy SPI kapcsolattal működő eszközt, az SD kártyát. Ha többet szeretnél megtudni az SPI működéséről, akkor kattints ide!
Van azonban még egy fontos felhasználás, ez pedig az ATmega328 programozása. Nem kell feltétlenül soros portot használni a program betöltésre. A soros porton keresztül történő programozás egyébként is feltételezi, hogy a chip-be úgynevezett bootloader programot töltöttek, ami nagyon kényelmessé teszi az esetleges programbetöltési igényeinket. A chip-be épített SPI arra is jó, hogy betöltsük a programot akár úgy is, hogy a chip már be is lett forrasztva egy konkrét áramkörbe. Mindössze néhány vezetéket kell valamilyen módon csatlakoztatni a chip megfelelő kivezetései, és egy programozó közé. Ezeket a csatlakozásokat a gyártók előre elő is készítik. Magán az Arduino-n is megtaláljuk ezeket a kivezetéseket. A programozók ugyanezzel a csatlakozóval rendelkeznek, és ha kell összedugjuk a kettőt, már mehet is a program közvetlenül a chip-be. Nem kell semmi más, még tápfeszültséget is a programozó ad a chip-nek.
Ha az is érdekel, hogyan lehet az Arduino-t ISP buszon keresztül programozni, akkor kattints ide!
Még közel sem értünk a végére! Az Arduino alaplapoknak még nagyon sok tulajdonságát érdemes megismerni. Itt olvashatsz a megszakításokról, amivel ritkán előforduló eseményeket érdemes figyelni és hatásukra beavatkozni a folyamatokba.
Ha elemes kapcsolásokat szeretnél készíteni, akkor az Arduino elalvási funkcióit kell megismerned.
Ha programod túl összetett, és időnként lefagy, de nem találod a megoldást, nem szabad elkeseredni. A watchdog funkció segíteni fog!