AVR programozó MAX-232 IC-vel

AVR égető MAX-232-vel
AVR égető MAX-232-vel

AVR égető áramkörből rengeteg van a neten, és -weblapok tapasztalatai szerint legalábbis- valamennyi (a PIC égetőkkel szemben) működőképes is. Sokan itt még az egyszerű zenner diódás szintillesztővel működő variánsokat is abszolút megbízhatónak tartják, szemben a PIC-el (ld. JDM égetőpl. Watt oldalán). Elsőre én is ezt az áramkört építettem meg, de nekem első blikkre sajnos nem akart működni. Hozzá kell azért tennem, hogy nem egészen olyan zennereket használtam, mint ami elő lenne írva, hanem nagyobb teljesítményű és kisebb zárófeszültségű példányokat, 1.3W és 3.6V-os típusokat. (ilyen volt itthon) Elvileg a 3.6V nem okozna gondot, mivel az már TTL logikai magasnak számít, de a típus nem stimmelt, talán a dióda kapacitása volt túl nagy, és torzította az időzítéseket (jelalakot). Mindenesetre készültem egy esetleges kudarcra, és MAX232 IC-t is vettem, az ebből készült égető már működött, ezután a diódás változattal már nem foglalkoztam. (Úgyhogy második blikk végül nem lett, de azért valószínűleg működőképes állapotra lehetne hozni ezt az égetőt is) A MAX232 IC használata amúgy azért indokolt, mert korrekt szintillesztést végez az RS232 és a TTL szabványú jelek között, és nem torzítja az impulzusok éleit, ezzel az időzítéseket. (ld. erről Watt kolléga meghivatkozott írását)

AVR égető
AVR égető MAX-232-vel kapcsolási rajz

A rajzon a KT315 (orosz) tranzisztor helyett én bontott C945-öt használtam, de igazából szinte bármilyen hasonló megfelel, a RESET jelen nincs kritikus időzítési él. A tranzisztor bázisára záróirányba kötött dióda 1N4148, ez a tranzisztort védi a nagy záróirányú feszültségektől. Az eredeti kapcsoláson nincs, de javasolt a használata. Láthatjuk, hogy ez az egyetlen jel, ami nem a MAX232-őn megy át, egyszerűen mert ez már nem fért bele. Viszont mivel ez csak egy egyszerű reszetelő áramkör, nem is nagyon kell neki a felhajtás. A MAX-232 IC-t körülvevő sok kis elkó a feszültséginverter részei, ez az IC ugyanis előállít magának egy ±10V-os tápfeszt és ennek segítségével képes az RS232 szabványos ±3…12 V logikai szintjeit prezentálni. Az AVR-nél én egy 4MHz-es kerámia rezonátort használtam, az egy három kivezetéses kis alkatrész, a középső lábát földre kell kötni, kis pikófárádos kondikat nem igényel maga köré. Azonban egy gyári kicsomagolt AVR többnyire elindul enélkül is, gyárilag a belső órajelére van állítva és 1MHz-en fut. (Az un. biztosíték bitekkel (Fuse bits) lehet az órajel forrását beállítani, ill. a belső órajel leosztását hangolni) Mindenesetre jó, ha van az égetőben is, ha véletlen külső kvarc/kerámia rezonátorra állítanánk a biztosítékbiteket, akkor ha nincs ilyen alkatrész a mikrovezérlőn, nem indul el a CPU-ja és égetni se lehet (betéglásodik) ill. néha ténylegesen külső rezonátorra akarjuk átkapcsolni, amit megtenni még meg tudunk, csak visszaállítani nem, az égetőben ezután tetszhalottat játszana a mikrovezérlőnk, mert a beállítás után már nem kapna órajelet. Nem véletlen tehát, hogy a biztosíték biteket nagyon nagy óvatossággal kell kezelni! (Vannak amúgy megoldások a véletlenül betéglásított eszköz visszahozására)

Az általam elkészített ideiglenes égető kétféle AVR-t tud fogadni, ezzel ahhoz a három típushoz tudom használni, amit elsőre megvásároltam (20 lábú ATtiny2313 valamint 28 lábú ATmega8 és ATmega88). Az USB kábelről az 5V tápfeszt kapja az áramkör. Fontos: előbb az AVR-t helyezzük az égetőbe, utána az USB-t dugjuk a gépre, és csak eztán dugjuk be a panelt a soros portba! Még jobb, ha a gépet leállítjuk, vagy csak készenlétbe kapcsoljuk a csatlakozás idejére. A LED-ek a kapcsolási rajzhoz képest utólag kerültek fel, mivel elsőre ez az égető se akart működni, és ez volt az a pont amikor látni akartam, hogy folyik-e valami társalgás az égető vonalakon. Végül a LED-ek segítségével derült ki, hogy néhány jel inverz, ezt az égető szoftverben beállítva már sikeresen tudtam égetni első LED-villogtatós kódomat (és ha már kerültek LED-ek az égetőre, akkor stílszerűen MISO lábon villogtattam)

Szoftveres beállítás Ponyprog íróval

Tehát a MAX232 invertál, ezt tudnia kell a szoftverünknek is. Az AVR Studio programot ennek megfelelően sajnos nem sikerült égetésre fogni, a Ponyprog nevűt viszont annál inkább! Ennél a szoftvernél a következő beállítások szükségesek:

A Ponyprog Setup menüjében a portbeállítást a fenti kép szerint kell csinálni. Égetőnek az SI Prog I/O-t érdemes, ezzel gyorsabb az írás. Alatta többnyire a COM1-et kell bejelölni. Ha ilyen szürke, mint itt, akkor a BIOS-ban ellenőrizzük, hogy engedélyezve van-e az RS232 port. Nem árt azt is megnézni, hogy van-e a gépen D-sub soros csatlakozó, ill. ha nincs, akkor az alaplapról kivezethető-e! Utóbbi esetben be kell szereznünk egy Com port lengő kivezetést pl. PC bontókból. A vezérlőjeleknél mint látjuk a RESET kivételével minden invertben van.

Szoftveres beállítás AVRdude íróval

Én egy ideje az AVRdude írót használom, ráadásul a linuxos verziót. Ez egy parancssori program, a beállításait config fájl tartalmazza. Ebbe kellett csak egy kicsit beletúrni, és máris használható lett ez az égetőszoftver is. Keressük meg az avrdude.conf fájlt és szerkesszük! (Linuxon az etc-ben, win-en a program telepítési könyvtárában találjuk, pl. a WinAVR…/bin/) Keressük meg benne a következő részt:

programmer
 id = "ponyser";
 desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts";
 type = "serbb";
 connection_type = serial;
 reset = ~3;
 sck = 7;
 mosi = 4;
 miso = 8;
;

Készítsünk belőle egy másolatot közvetlenül alá, majd írjunk át benne a következő dolgokat: id, sck, mosi, miso ill. opcionálisan a desc, vagy egyszerűen csak másold be a kódol a lenti ablakból!

programmer
 id = "ponymax232";
 desc = "design ponyprog serial, reset=!txd sck=!rts mosi=!dtr miso=!cts";
 type = "serbb";
 connection_type = serial;
 reset = ~3;
 sck = ~7;
 mosi = ~4;
 miso = ~8;
;

Ezzel a ponyser (Ponyprog serial) alapkapcsolású égetőből csináltunk újat ponymax232 néven, amiben átírtuk a jelek polaritását. A kódrészletben látjuk, hogy az alap égetőjelek után megadjuk a Com port lábszámát és a hullámos vonal jelenti a jel invertálását. Ezután parancssorból használható az AVRdude, ahol égetőnek a ponymax232-t kell megadni. Pl:

avrdude -c ponymax232 -p m8 -U flash:w:hexfile.hex:i

Fenti példában a -p kapcsoló után adtam meg a mikrovezérlő típusát (ATmega8), az -U kapcsoló után a flash jelzi, hogy a flash memóriát írjuk (programmemória) a w jelzi hogy írás (write) ezt követi a hex fájl neve végül az i betű jelentése, hogy Intel szabványos hex fájlal dolgozunk. A -c kapcsoló értelemszerűen a fent konfigurált saját MAX232-es soros égetőnket adja megégető típusnak. Linuxosoknak még egy fontos dolog: az AVRdude alapesetben csak root jogokkal tud hozzáférni a soros porthoz, tehát sudo-val kellene kiadni. Ehelyett én inkább azt javaslom, hogy a Felhasználók és csoportokban a Dialout csoporthoz adjuk hozzá a saját felhasználónkat, ekkor gond nélkül user jogokkal is működni fog. (Ne futkározzanak root-ként a programjaink, ha nem muszáj!)

Frissítés: Mivel az eredeti avrdude.conf file szoftverfrissítéskor lecserélődhet, ezért szerkesztése helyett inkább hozzunk létre egy .avrduderc nevű filet a saját könyvtárunkban (/home/felhasznalo/.avrduderc) és ebbe írjunk be a saját definícióinkat! (a pont ne maradjon le a file elejéről) Windowson sajnos nem tudom hogy lehet ilyen custom conf filet létrehozni, HF utánanézni!

Égetés a céláramkörben

Előbb-utóbb de leginkább előbb szembesül az ember azzal a ténnyel, hogy program teszteléskor rengeteg újraírás kell és ide-oda rakosgatni a mikrovezérlőt céláramkör és égető között. Ez kényelmetlen és az IC lábait is veszélyezteti. (előbb utóbb letörik valamelyik) Ezen kellemetlenségtől még meg tudjuk kímélni magunkat, ha kihasználjuk, hogy a precíziós IC foglalatok egymásba nyomhatók, és az mikrovezérlőt fixen belenyomjuk egy foglalatba, majd azzal együtt rakosgatjuk át a céláramkör és égető között. Ha viszont úgy készítjük el a céláramkört, hogy az égetéshez készült lábakat nem használjuk a céláramkörben, akkor megoldható, hogy az égető leválasztása nélkül is tudjuk újraírni a mikrovezérlőt, csak gondoskodni kell a céláramkör és az író összekábelezéséről. Megjegyzendő amúgy, hogy vannak korszerűbb égetők, melyek 3 állapotú csatlakozással rendelkeznek, így az égetés előtti RESET jelre rákapcsolják magukat a mikrovezérlőre, majd az égetés végén az újabb RESET-re leválasztják magukat (nagy impedanciára váltanak). Tervezem én is egy komolyabb USB csatlakozású égető beszerzését, vagy megépítését, ez a jelenlegi csak átmeneti megoldás, de kezdésnek tökéletesen jó. (Igazából ezért is készült ilyen lyukacsos NYÁK-ra, nem akartam sokat lacafacázni vele) A programozójelek kábelen történő átvitele pl. így is megvalósítható:

Ez szintén egy precíziós IC foglalat, beleforrasztott szalagkábellel. Ezt bedugva az égető beültetett foglalatába, kábelen el tudjuk vinni a programozójeleket a céláramkörben lévő mikrovezérlőbe, újabban már én is ezt használom.