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?

Kattints egy csillagra az értékeléshez!

Szövegesen is leírhatod véleményedet!

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

Az e-mail-címet nem tesszük közzé.