ATmega chip és PC közötti soros kapcsolat

Tartalom:

  • Arduino Uno használata USB csatlakozó nélkül
  • USB soros illesztő áramkör bekötése
  • Programfeltöltés és adattovábbítás ATmega chip és PC között

Sajnos a legeslegelső Arduino Uno alaplapom USB csatlakozója elromlott. A sok csatlakoztatás sem tett jót neki, de feltehetőleg azt sem viselte könnyen, hogy az egész próbapanelemet lelöktem véletlenül az asztalról. Sajnos az USB kábel előbb fogyott el, mint ahogyan a járólap megérkezett, és így nagyot rántott a vezeték a csatlakozón. Immár nem tudom USB-n keresztül feltölteni a programokat. Sebaj, ott a panelen az ISPC csatlakozó, és van is egy STK500-as programozóm, és máris használható az alaplap. Azonban nagyon hiányzik a soros monitor, a program belövés szinte egyetlen jól használható eszköze. Immár nem tudok a laptopomon adatokat megjeleníteni. Egy új Arduino Uno kis hazánkban 6-9000 Ft összegbe kerül, még az egyre kevésbé költséghatékony kínai rendelések is 4-5000Ft-ba kerülnek. Így meg kellene menteni a jelenlegi „kicsit hibás” példányt. Az USB csatlakozó cseréje nem jöhet szóba, nem tudom kiforrasztani. Marad egy újabb vásárlás, a HEStore-ban megvettem egy CH340 soros USB illesztő chip-el működő átalakítót kb. 600Ft-ért. Így néz ki:

A fenti jobb oldali képen a jumpert rossz helyre dugták, annak a Vcc 5V vagy a Vcc 3V3 páros valamelyikén kell lennie!

A bekötése elvileg triviális, de mégsem teljesen. A csatlakozó felületein Találtam egy Vcc csatlakozót, amit egy jumperrel jobbról vagy balról 3.3V vagy 5V felitratú kivezetésekhez lehet kapcsolni. Mivel az Arduino Uno 5V-es, ezt értelem szerűen 5V-ra kapcsoltam. A GND bekötése egyértelmű. A TX kivezetést az Arduino RX (0. kivezetés)-hez kell kötni, az RX kiveetést pedig az Arduino TX (1. kivezetés)-hez. Ezt követően már minden pont úgy működik mint régen. Sajnos a számítógépen két USB portot foglal el a programozó is az USB illesztő, mint az alábbi képen látható.

Változik a feltöltés és debug menete, kevésbé kényelmes a folyamat. Programozáshoz a Minicore alaplapkezelő ATmega328 chip-et kell beállítani, és programozáshoz az USBasp (MiniCore) nevű programozót, amikről mindent megtudhatsz ebből a leírásból.

A bootloader-re nincs szükség, hiszen a soros portról ezzel a konfigurácuióval nem fogunk tudni programot feltölteni. Ennek oka, hogy az általam vásárol USB soros átalakítón csak a TX RX kivezetéseket (nomeg a GND-t) vezették ki, és a DTR kivezetést nem. Amikor egy jól működő Arduino Uno esetén a PC-n elindítjuk a feltöltést, az Arduino kap egy reset-et, és elindul a bootloader, ami felveszi a kapcsolatot a soros porton a PC-vel, és ha van program, akkor azt betölti a chip-be. Ugyanez történik akkor is, amikor a PC-n elindítjuk a soros monitort, az Arduino szintén kap egy reset-et, csak ekkor a bootloader dolgavégezetlenül átadja a vezérlést a a flash-ben található programnak. Ez a reset az Arduino-ra épített USB soros illesztőről származik. Itt az Arduino kapcsolásának a megfelelő részlete:

Balra az USB soros illesztő chip, jobbra az ATmega328 chip. Ezen a kapcsolási rajzon éppen nem a CH340 illesztő chip-et használták, de a funkció ugyanaz. Mint látható az ATmega chip reset kivezetésére rákötötték az USB illesztő DTR kivezetését és egy nyomógombot is, amivel kézzel tudjuk az áramkört reset-elni. Ha valaki szeretne többet megtudni a rejtélyes DTR kivezetésről ami a reset-et elvégzi, az a szinkron soros kapcsolat környékén keresgéljen. Segítek kicsit, régen még volt olyan soros port a számítógépeken, ami szinkron soros kapcsolatot valósított meg. Ez volt az RS232 szabványos soros port. Így nézett ki a csatlakozó:

Mamár nem nagyon találunk olyan eszközt ami ezt a csatlakozót használta. Rá sem férne a mai papírvékony laptopokra egy ilyan csatlakozó. Az USB van helyette! Az idősebbek talán még emlékeznek a betárcsázós internet kapcsolatra, ezt lehetett ehhez csatlakoztatni. A régi világban egy úgynevezett telefon modemet (modulátor-demodulátor) használtunk internetezésre. Ez a kapcsolati módszer és eszköz a beszélgetés hangja helyett hanggá alakított digitális jeleket küldött a telefonvonalon keresztül. Az internet szolgáltatók biztosítottak egyszerre több ezer szabad vonalat, ahová a tárcsázott telefonhívások befutottak. Ezeket a telefonszámokat fel is lehetett hívni, csak egy fax-hoz hasonló ciripelő, sípoló vonal fogadott. Már ha tudja még valaki, mi az a fax! Az internet szolgáltató és a mi oldalunkon csücsülő telefonmodem összesípoltak, hangokkal fütyörészve felvették a kapcsolatot, és ha szerencsénk volt maximum 56kbit sebességgel küldték az adatokat. Ezeknek a telefonmodemeknek a PC-hez kötött oldala egy olyan soros portban végződött, ami pl. használt DTR jelet a modem és a PC közötti soros kapcsolat közben. Ezzel jelezte a PC vagy a modem, ha adat fogadásra alkalmas állapotba került. Így nézett ki egy ilyen eszköz:

A szinkron soros kapcsolat sokkal gyorsabb mint az Arduino és PC kapcsolatban használt aszinkron soros kapcsolat, de nem 2 vezetékkel működik, hanem négy vagy hat vezetékkel. A szinkron soros kapcsolaton beszélgető eszközök órajelet is használnak, és jelzik egymásnak, ha készen állnak az adásra vagy a vételre. Jelen esetben ezt a kivezetést nem használja a soros kommunikáció, ezért erre programozták a reset vezérlését.

Vége a technikai részleteknek, következzék a használat! Feltöltés nem a klasszikus feltöltés ikonnal indítható, hanem a vázlat menüben a feltöltés programozót használva. A program a flash-ba az ISPC kivezetéseken kerül az STK500 programozóval a MISO, MOSI, SCK és RESET kivezetések használatával jut el. Amikor a flsah-ba töltött program futni kezd, és esetleg adatokat küld a Serial.println() használatával, a TX kivezetésen küldi az adatot. A CH340 USB illesztő ezt az RX kivezetésén veszi, és átalakítja az USB sorosportjára, és innen már bármely PC-n futó soros monitor program meg is jeleníti. Eben a folyamatban sehol nem volt reset, ezért a soros monitor esetleg a program futása közben kapcsolódik a folyamatba. Ha a feltöltés után dugjuk az USB-be a CH340 illesztőt, akkor lehet, hogy lemaradunk néhány adatról. Vagyis a reset gombot kézzel kell megnyomni, ha ez szükséges. Kicsit kényelmetlen a folyamat, de használható.

Elvileg van egy másik lehetőség is! Ugyanis a reset jelet előállíthatjuk kézzel is. Tehát ha fordítás után kihasználjuk, hogy a fordító a feltöltésre egy ideig vár és csak akkor ad hibaüzenetet (van egy kicsike timeout), akkor ebben a szűk időrésben kézzel is megnyomhatjuk a reset gombot az Arduino-n. A bootloader-nek így is működnie kell. Még nem próbáltam ki, csak most jutott eszembe a dolog, miközben ezeket a sorokat írom!

Ezzel a két eszközzel (STK500 programozó és USB soros átalakító) bármelyik ATMega chip-ből egy komplett és jól használható Arduino-t készíthetünk. Már nem is veszek Arduino nano és hasonló alaplapokat, mert az áruk így magasabb, mintha megvennék egy ATmega chip-et és megépítem magamnak. Ahhoz, hogy az ATmega chip-ből használható „Arduino” áramkör legyen, kell még egy kvarcz kristály, két kondi és esetleg egy 28 lábú IC foglalat, valamint egy 3×5 cm-es próbanyák. Ez összesen kb. 2000 Ft. Ugyanez Arduino nano verzióban kb. 3-4000Ft. Kínából csak2-3000Ft Persze 1000Ft-ért nem biztos, hogy érdemes küzdeni. De ha sok kell, akkor megfontolandó!

Mennyire volt hasznos amit olvastál? Értékelés után szövegesen is leírhatod megjegyzéseidet és véleményedet!

Kattints egy csillagra az értékeléshez!

Szövegesen is leírhatod véleményedet! Ha kérdésed van, ne felejtsd el megadni az email címedet!

Vélemény, hozzászólás?

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük