Új kütyük – USBASP égető és Arduino NANO board

A blog indulásakor épített soros portos lyukas-nyákos égető nyugdíjazható, itt az utód:

USBASP égető

Eredetileg úgy terveztem, hogy építek egy ilyen eszközt, amihez rengeteg anyag található a neten. Sőt, még hozzá is kezdtem! Lyukas-nyákos kivitelben ATmega88pa mikróvezérlővel, de sajnos néhány dolgot nem a leírásoknak megfelelően csináltam, a hatás pedig nem marad el: nem működött… Igazából az egyik kényszerű változtatás, hogy 12MHz helyett 16MHz-es kvarcot használtam, ami eleve borítékolná a kudarcot, csakhogy, nem a kész hex fájt töltöttem fel, hanem a forrást babráltam meg, fordítottam újra, és azt írtam be a mikróvezérlőbe. Nem működött! Hiába írtam át az usb meghajtóban a kvarcot, számoltam át egy időzítős rutint, akkor se akart megnyekkenni sem. Elvileg nem nehéz egy ilyen eszköz utánépítése, és nem is szokott probléma lenni. Ha viszont megpiszkálja az ember, akkor már nem garantált a siker. Igazából már ott elbukott a mutatvány, hogy USB eszközként nem jelent meg a cuccos. A Windows kiírta, hogy az eszközt nem lehet felismerni, a Linuxon pedig az lsusb parancs nem listázta. Időközben kiderült, hogy az usb csatinál lévő ellenállások értékei is lényegesek, az usb ugyanis érzékeny a jelszintekre, és a két 3.6V zenner diódát se véletlen tervezték bele a konstruktőrök. Szóval sok sebből vérzett a kis rögtönzött projekt. A méreg csak az a dologban, hogy ha itthoni készletből nem tudok egy alkatrészt (akár bontásból) elővarázsolni, akkor nehézségekbe ütközök, a legközelebbi alkatrész-kereskedés 35km-re található, vagyis csak a netes alkatrészrendelés marad. De egy 12MHz-es kvarc, két Z dióda miatt rendeljek csomagot? (Az ellenállásokat általában bontásból sikerül összevadászni) Végül, látva az olcsó Kínából származó eszközöket, úgy döntöttem, veszek egyet. (790Ft-ért alkatrészeiből sem lehetne kihozni!) És ha már Vaterázásra-rendelésre adom a fejem, akkor már jöjjön valami más is, mégpedig egy Arduino fejlesztőpanel. Amúgy is szeretnék foglalkozni C/C++ programozással is, és kicsit az Arduino felé is szimpatizálgatok, hát legyen!

Arduino NANO v3.0 fejlesztőkártya

A tüskesorok beforrasztása házi feladat volt, és nagyon praktikus, hogy segítségükkel bebökhető egy ilyen műanyag próbapanelbe. Az első LED villogtatós programocska már fut is benne, igaz nem én követtem el, hanem az Arduino fejlesztőkörnyezet mintapéldái között volt, azt fordította le és írtam be, csakhogy csekkoljam, hogy a kütyü működik, kommunikál, programozható.

Frissítés:

Ahhoz, hogy Linux rendszeren sudo nélkül lehessen használni, ill maga az Arduino fejlesztőkörnyezet is jogosultságot kapjon a programozóhoz, hozzuk létre a következő fájlt root jogokkal:

/etc/udev/rules.d/10-usbasp.rules

Majd másoljuk bele a következő tartalmat:

ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="plugdev", MODE="0660"
ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", GROUP="plugdev", MODE="0660"

Lényegében azt látjuk, ha jól látjuk, hogy az adott azonosítójú USB eszközökhöz történő jogosultságokat 660-ra állítjuk be (tulaj: ír/olvas, csoport: ír/olvas, másoknak nincs hozzáférés), ill a plugdev csoportba tesszük őket. (Nem én komponáltam, én is így találtam a neten.) Az effekt újraindítást követően érvényesülni fog. Igazából az USBASP és a Nano-nak szebb lenne a külön fájl, de így egyszerűbb. Ha nem működne, akkor az lsusb paranccsal listázzuk ki az usb eszközöket, és ellenőrizzük a két négyjegyű hexa azonosítót, az idVendor és  idProduct-ot!

A Nano az Arduinoban értelemszerűen ezután működik, programozható. Az Avrdude programmal is képesek leszünk kezelni mindkét eszközt, azonban a nano-t az Avrdude usb-s soros porton keresztük látja, és a ttyS0 eszközzel kezdi meg a kommunikációt, ami hibaüzenethez vezet. Itt tehát meg kell adni a ttyUSB0 eszközt. Pl:

avrdude -c arduino -p m328p -b 57600 -P /dev/ttyUSB0

Amire a válasz:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f (probably m328p)

avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done. Thank you.

Elsőre persze nem volt ilyen szép a helyzet, némi keresgélés a neten, és kiderült, hogy meg kell adni a baund sebességet is, ez a –b 57600 kapcsoló. Ha ezt nem akarjuk megadni minden egyes alkalommal, akkor a saját könyvtár .avrduderc fájlban definiáljuk újra az arduino programozót, immáron a baundrate megadásával:

programmer
 id = "arduino";
 desc = "Arduino";
 type = "arduino";
 connection_type = serial;
 baudrate = 57600;
;

Sajnos a programozó portját nem sikerült behegeszteni a konfigba, egyszerűen nincs olyan beírható tulajdonság (legalábbis nem találtam) amivel ez lehetséges lenne. Természetesen, ha az Arduino fejlesztőrendszerrel égetünk, akkor ez nem gond, csupán egy alternatíva, hogy a Nano az Avrdude programmal is felprogramozható. (Azt még nem próbáltam, hogy az idegen (nem Arduino) kódot mennyire eszi meg, de úgy vélem, amíg a bootloader és a biztosítékbitek nem módosulnak, addig minden további nélkül)

Az USBASP programozót pedig így tudjuk hadra fogni:

avrdude -c usbasp ...

Sajnos most sok egyéb elfoglaltság miatt nem tudtam érdemben foglalkozni a kütyüzéssel, ez a kis Update is késett majd 2 hetet. Az Arduino-ban leprogramoztam egy mikrókapcsolóval ki/be kapcsolható LED-et, ennyi hőstett történt csak… Illetve, hogy elkezdtem csinálni az FFT alapú spektrumanalizátort is, de az meg áll félkész állapotában. PC-re írt C programban szimulálva jól működik a 8 bites 32 elemes DFT algoritmus, de mikróvezérlőben még nem. Valami túlcsordulásos jellegű hibára gyanakszom, esetleg hibás átvitelkezelésre.