2013.03.23

Esetem az utángyártott Xerox tonerekkel

tonerEz a történet arról szól, milyen kínkeserves küzdelem árán sikerült egy kis pénzt spórolni, s hogy egy viszonylag egyszerű problémából hogyan lett egyre mélyebb problématömkeleg. Alapvetően neki se ugrottam volna a kérdésnek, ha a megrendelt utángyártott Xerox 6125-höz való tonerjeink úgy működtek volna, ahogy eddig. De persze ez még véletlenül se jött össze, mert amikor az olcsó (meg később a még olcsóbb, de ugyanolyan vacak) tonert beraktuk a nyomtatóba, akkor az nem ismerte fel! Ha pedig nem ismeri fel, akkor használni se tudja. Nem mellékes kérdés, hogy míg az eredeti festékkazetta tizenezrekbe kerül, addig az utángyártott mindössze 3-5000 forintért megkapható, így tehát felültem a hintára és nekiugrottam a kérdésnek.

Első dolgunk persze az eladó megkeresése volt, ahol már nem először vettünk bele tonert, s eddig jó volt. Bár segítőkészek voltak, mégse tudtak jó megoldást kínálni, mivel a tőlük kapott cseretoner ugyan úgy nem működött, illetve bár fizikailag jó volt, elektromosan a nyomtató nem ismerte fel. A tonerben lévő chip azonosítja ugyanis magát a tonert, de a kapott tonerekben lévő chip valamilyen más kódot tartalmazott, amit a nyomtató úgy olvasott ki, mintha nem megfelelő festékkazetta lenne benne. Felajánlották, hogy csak a chipet cserélik ki, de a cserechip ugyanúgy használhatatlan kódot tartalmazott, mint a többiek. Szerencsére nem estem kétségbe és megnéztem mégis miféle chip van ezeken a tonereken. Elsőre rögtön egy MicroChip gyártmányú 24LC02-es EEPROM nézett velem farkasszemet. Nosza keressünk hozzá adatlapot! Kiderült, hogy ezt az EEPROMot a jól bevált PICKit2 programozómmal lehet programozni, így tehát nekiláttam keresgélni a neten a beleprogramozandó tartalom után. Mint kiderült, elég sok embert foglalkoztatott ez a tartalomgyűjtés, így a xeroxpatrone oldalon meg is találtam amire szükségem volt.

Persze az örömöm korai volt, mivel az említett EEPROM felprogramozásához kicsit át kellett alakítani a festékkazetta chipjét. A chipen az EEPROM két az adatátvitelben fontos szerepet játszó lába (SDA, SCL) ugyanis egy-egy ellenállással le van húzva GND-re! Nekünk viszont a programozáshoz ezt a két lábat VDD-re kell felhúzni. Ennek örömére a már meglévő két ellenállást (0603 méretűek) szépen kiforrasztottam és visszaforrasztottam úgy, hogy immáron VDD-re legyenek velük felhúzva a lábak. Ekkor jött az első öröm, ami később korainak bizonyult, mivel bár a tartalom beprogramozása sikerült, azonban a nyomtató (miután visszaalakítottam a chipet, azaz újabb két perc forrasztgatás után) továbbra sem ismerte fel a chipet, azaz a benne lévő tartalom még mindig nem stimmelt. A következő próbálkozásra - ellenállások átforrasztása, lábak felforrasztása, programozás, visszalakítás után -, megtaláltam azt a tartalmat, amit már a nyomtató is felismert, így végre sikerült életre verni a tonert.

Mivel ez rengeteg macera, így kissé már megnyugodva, hogy végső esetben akár így is megoldhatom a dolgot, nekiláttam tovább olvasgatni a már említett xeroxpatrone oldalt. S ezzel eljött a vesszőfutásom kezdete! Az oldalon található egy egyszerű programocska, amihez ajánlanak egy USB csatolófelületű I2C programozót, és ez nekem nagyon megtetszett.

Ami nem tetszett, az a programozó kialakítása volt, így elhatároztam, hogy a kapcsolási rajz alapján készítek egy SMD változatot belőle (letölthető az oldal alján). Persze első nekifutásra elszúrtam, és egy ellenállást rossz helyre kötöttem, de amikor eljöttek a az eszköz fel nem ismerési problémák, akkor ismét átnéztem a kapcsolásokat és javítottam a dolgot, ide az oldalra már a javított rajzot töltöttem fel. Az egész áramkör lelke egy 8 lábú mikrovezérlő, egy ATMEL gyártmányú ATTiny45-ös IC. A felépítése is egyszerű, pár ellenállásból összedobható az egész. Till Harbaum oldalán minden megtalálható az utánépítéshez, azonban egy dolgot nem szabad elfelejtenünk, ez pedig, hogy a mikrovezérlőt fel is kell programozni!

i2ctinyusb

Első próbálkozásom az ATTiny felprogramozására nem egy JDM programozó megalkotása volt, hanem a jól bevált PICKit2 programozómat vettem rá, hogy beégesse a hex fájlt a helyére. Erről az alábbi (angol nyelvű) oldalon lehet olvasni és letölteni hozzá a programokat. Másik módszer a PICKit2ben lévő szoftver (firmware) lecserélése az ezen az orosz oldalon lévővel. Nekem mindkét módszer nagyszerűen bevált. Cserébe a MicroChip világ PIC12F629-es OSCCAL csapdája után az ATMEL világ FUSE bites csapdájába is egyenest fejest ugrottam. Ugyanis míg a MicroChip PIC családjánál a mikrovezérlő viselkedését előre a szoftverben kell szabályozni, addig erre az ATMEL világnál a FUSE (biztosíték) bitek állítgatásával van mód. Ezeket a biteket külön kell beállítgatni és gyönyörűen kizárhatjuk magunkat, ha rosszul állítjuk be valamelyiket. Nos nekem sikerült is kizárnom magam, így innentől az ISP programozási módot többet nem használhattam hozzá (ég veled AVRISP mkII-nek hazudott PICKit2), már csak HVSP módot használva lehetett csak programozni. Persze minderre nem lett volna szükség, ha az eredeti áramkör megtervezője lett volna kedves a honlapjára kitenni a FUSE bitek beállítását...
Itt említem meg, hogy csalódtam is benne, mert mikor levelet írtam neki, akkor nagyképűen lepattintott azzal, hogy nem tud segíteni, ha nem az ő áramkörét raktam össze és egyébként is minden fent van a honlapján. Persze, tényleg fent van, a FUSE bitek beállítását - miután már annyit utánaolvastam, hogy magam is könnyedén be tudtam állítgatni -, végül megtaláltam a letölthető forráskódban! Most őszintén! Ki a fene olvasgatja a forráskódot, ha ott van egy lefordított HEX fájl, amit csak be kell égetni!? Igaz, ha nem szívtam volna így meg miatta, akkor most nem lenne HVSP programozóm...

Fuse high byte:
0x5f = 0 1 0 1   1 1 1 1 --- BODLEVEL0 (Brown out trigger level bit 0)
       ^ ^ ^ ^   ^ ^ ^------ BODLEVEL1 (Brown out trigger level bit 1)
       | | | |   | +-------- BODLEVEL2 (Brown out trigger level bit 2)
       | | | |   + --------- EESAVE (don't preserve EEPROM over chip erase)
       | | | +-------------- WDTON (WDT not always on)
       | | +---------------- SPIEN (allow serial programming)
       | +------------------ DWEN (ebug wire is enabled)
       +-------------------- RSTDISBL (reset pin is disabled)
Fuse low byte:
0xdf = 1 1 0 1   1 1 1 1
       ^ ^ \ /   \--+--/
       | |  |       +------- CKSEL 3..0 (external >8M crystal)
       | |  +--------------- SUT 1..0 (crystal osc, BOD enabled)
       | +------------------ CKOUT (clock output enable)
       +-------------------- CKDIV8 (divide clock by eight disabled)

Rengeteg utánaolvasást, forumozást követően már-már ott tartottam, hogy feladom a célom, de végül inkább eltökéltem magam, hogy megoldom a kérdést és építek egy HVSP programozót (bármilyen furcsa, de akárkit kérdeztem, senkinek nem volt kölcsön egy HVSP-s programozója!). Sok keresgélést követően találtam egy kapcsolást, ami alapján megépítettem a saját áramkörömet, egy aprócska módosítással. Az apró módosításom annyiból áll, hogy a tápfeszültségeket egy molex csatival PC tápból szerzem, így kihagytam a 7805-ös 5V-ot előállító szakaszt. Fontos megjegyezni, hogy a belinkelt rajzon látható csatlakozó számozására oda kell figyelni! Én ezt elszúrtam, s emiatt a magamnak készített áramkörbe az LPT port pont fordítva lett bekötve, s készíthettem a programozóhoz egy fordítókábelt is, amihez szerencsére tökéletes alany volt egy régi LPT hosszabbítókábel... Mondanom se kell mekkora öröm volt egyesével kiméregetni a vezetékeket, s megfelelően összeforrasztgatni őket.

Végre van egy HVSP programozóm, hozzá kábelem, már csak az égetőprogram kell, ami pedig nem más, mint az avrxtool32. Igen ám, de én 64bites Windows7 rendszert használok! Na ezen a program működéséhez elengedhetetlen giveio.sys elindítása lehetetlen vállalkozás (higgyetek nekem, több napom elment, míg végül feladtam). Szerencsémre éppen hozzáfértem egy Windows XP-vel ellátott géphez, amin még van párhuzamos port, így gyorsan felprogramoztam az ATTiny45-öst, s kezdődhetett végre az EEPROMok tartalommal feltöltése. Azaz csak kezdődhetett volna, mivel az eredeti kapcsolással sehogy nem akart összejönni a dolog, kénytelen voltam nálam tapasztaltabbhoz fordulni. A hobbielektronika.huoldalon Hp41C felhasználó ötletét követve az I2C vonalon lévő felhúzóellenállásokat kissebbre cseréltem és azóta szépen működik a dolog.

Még egy dolog volt hátra, egy csatlakozó beszerzése/készítése, amivel könnyedén tudok csatlakozni a festékkazettához, annak szétszedése nélkül. Sajnos venni nem sikerült megfelelő csatlakozót, viszont a készítés az sikerült. Ehhez annyi kellett, hogy egy kis barkácshangulatom legyen és észrevegyem, hogy a jó öreg (már amúgy is halálra ítélt, régóta agyhalott) Siemens C60 telefonom kijelzőjének pont megfelelő a lábtávolsága, így felhasználhatom a telefonban lévő csatlakozót. A csatlakozó testét elhasznált nyáklapokból összeragasztgatva sikerült egy kényelmes csatlakozót készíteni.

csati

Bár ez a történet már hetekkel ezelőtt lezáródott, csak nem hagyott nyugodni, hogy nem tudom a klassz LPT portos égetőmet 64bites Windows7 alatt használni, így gondoltam belelesek a hvpp program forráskódjába (egyszer már megtaláltam, gondoltam most is hamar meglesz), s ha máshogy nem, akkor valahogy megerőszakolom, hogy ne a giveio.sys-t használja. Szerencsémre másnak is volt már gondja vele, így rögtön első találatra teljesült a vágyam és rátaláltam egy olyan hvpp változatra, ami az inpout32-t használja a párhuzamos port direkt eléréséhez. Innentől már nem volt más dolgom, mint megkeresni az inpout32 64bites változatát, ami első nekifutásra tökéletesen működött is! Így tehát minden komolyabb trükközés nélkül megúsztam a dolgot, s tudom használni a HVSP programozóm a 64bites rendszeremen is, nem kell mindig valami régebbi vasra vadásznom, ha éppen égetni támad kedvem.

Az ATTiny45 programozásának még egy mellékzöngéje volt nálam, ami megelőzte az előbb leírt keresgélést. Megpróbáltam a gépemen Windows XP-t futtatni, persze VirtualBOXban, virtuálisan. Ez nem is okozott különösebb problémát, elég sokszor csináltam már. Azonban ami meglepett, hogy míg a soros portokat vígan lehet állítgatni neki, addig a párhuzamos portot még véletlenül se lehet megtalálni a grafikus felületen! Cserébe a konzolos beállításokat használva el lehet érni, hogy átirányítsa a portot a vendégrendszernek. S bár látszólag ez a megoldás jó lehetne, nekem nem volt képes társalogni a programozóval, így sajnos ezt is el kellett vetnem - cserébe ismét tanultam valamit a VirtualBOXról...

AVR_HVSP.zip (46 KB)
I2C_USB.zip (66 KB)
Kategória: Elektronika