Egy Kínai AVR ISP története

A héten, Varsányi Péter barátomtól kaptam egy AVR programozót, amit eBay-en filléres kategóriában meg lehet vásárolni. Egyetlen baja, hogy gyárilag nem működik, de működésre lehet bírni. Szóval jöjjön a 920Ft-os AVR programozó története.

A szóban forgó modellt sok néven hirdetik, de a legnépszerűbb megnevezés az USBISP. Fém házban van, jó minőségűnek tűnik és még egy régi Atmel logó is van rajta, és csak 920Ft környékén mozog. Bomba üzlet.

Az olcsó kínai ISP programozó

Viszont a probléma az, hogy ennek  köze sincs az Atmel-hez. Ez egy jó minőségű USB ASP klón, azzal a különbséggel, hogy a rendszer nem USB ASP programozónak ismeri fel, hanem egy egyszerű HID eszköznek. A HID az USB azon kategóriája, amit a billentyűzetek és az egerek is használnak. Nagyon univerzális eszköz osztály, mert kb. minden megvalósítható vele és nem kell hozzá driver.

Ez szép és jó, viszont ez azt jelenti, hogy a programozó szoftvernek kell ismernie a kommunikáció módját vele. Ez azért problémás, mert így ebben a formában csak egy kínai feltöltő szoftver tudja használni. Így Arduino és egyéb AVR chip-ek programozására nem jó AVR Dude segítségével.

Viszont meg lehet javítani, csak új Firmware-t kell az eszközre tölteni. Ez elsőre bonyolult folyamatnak hangzik, de valójában egyáltalán nem az. Itt bejöhet a tyúk vagy a tojás problémája: feltöltőt vettünk, de hogy feltölteni tudjunk vele, kell először egy feltöltő 😀

Amennyiben rendelkezünk már egy Arduino lappal, akkor gond egy szál se, mert az Arduino lapunk is használható program feltöltőnek. Az alábbiakban a javítás folyamatát Arduino Uno segítségével írom le, de igazából bármilyen AVR programozó jó erre a célra.

  • Le kell tölteni az Arduno IDE-t, ha még nem lenne fent a gépen.
  • Rá kell tölteni a mintaprogramok közül az Arduino ISP-t a lapunkra. (Fájl -> példák -> 11. Arduino ISP -> Arduino ISP)
  • Feltöltés után össze kell kötni a programozót az Arduino lapunkkal. Ehhez az alábbi kapcsolást használjuk:

ISP programozó bekötése

  • Ezzel azonban még nincs vége a hardver módosításának. Ahhoz hogy ténylegesen fel tudjuk tölteni a kódot a programozót szét kell szednünk (a fém ház lecsúszik) és a hátoldalán találunk két via-t ami UP-al van jelölve. Ezen két via-ba egy átkötést kell tennünk, mivel csak ekkor tölthető fel új firmware az eszközre. Én ezt egy 10k ellenállás segítségével tettem meg, mert éppen ez volt kéznél 🙂 Az alábbi képen jól látszik az átkötés beiktatásának helye:

    A szükséges átkötési pontok

  • A módosított firmware (.hex állomány) innen letölthető. Az eredeti USB ASP kód módosításra szorul, mivel nem teljesen 100%-os másolatról van szó, ezért a PORTD lábainak funkcióját át kell állítani. Ezt manuálisan is megtehetjük az eredeti firmware módosításával, de ehhez újra kell forgatnunk a kódot. A módosítandó fájl a main.c állomány, csupán a DDRD regiszter értékét kell átírni 0-ra a ~(1 << 2) értékről:
    int main(void) {
    	uchar i, j;
    
    	/* no pullups on USB and ISP pins */
    	PORTD = 0;
    	PORTB = 0;
    	/* all outputs except PD2 = INT0 */
    	/*DDRD = ~(1 << 2);*/
    	DDRD = 0x00;
  • Ezután jöhet a szoftver feltöltése, amihez AVR Dude-ra lesz szükségünk. Ez része az Arduino telepítésnek. Ha az Arduino környezetünk a C:\Arduino mappában található meg, akkor a szükséges avrdude.exe a C:\Arduino\hardware\tools\avr\bin\ mappában van.
  • Parancssor segítségével ide navigálunk:
    C:\
    cd Arduino\hardware\tools\avr\bin\
  • Az egyszerűség kedvéért a szükséges .hex fájlt szintén bemásoltam az avrdude.exe mellé.
  • A feltöltés első lépéseként a FUSE (konfigurációs bitek a mikrovezérlőben) biteket át kell írni a mikrovezérlőben  0xC9 és 0xEF értékre:
    avrdude -C C:\Arduino\hardware\tools\avr\etc\avrdude.conf -p atmega8 -v -c stk500v1 -P COM5 -b 19200 -B 200 -U hfuse:w:0xC9:m -U lfuse:w:0xEF:m
  • Ezután következhet a program feltöltése:
    avrdude -C C:\Arduino\hardware\tools\avr\etc\avrdude.conf -p atmega8 -v -c stk500v1 -P COM5 -b 19200  -B 1 -U flash:w:20130212_mega8_usbisp.hex

Ha mindent jól csináltunk, akkor a programozón elhelyezett két LED közül a kék fog világítani az eddigi piros helyett. Innentől kezdve az eszköz USB ASP programozó, amit támogat az Arduino környezet is. 🙂

Az USB ASP használatához Illesztőprogram kell, ami a http://zadig.akeo.ie/ címről tölthető le. Az USB ASP hivatalos oldala pedig itt található. A cikk elkészítésében nagy segítség volt a https://www.sciencetronics.com/greenphotons/?p=938 oldal.