Resetovač FUSE bajtů a ISP programátor
pro ATtiny


Úvod

Původní "vysokonapěťový" resetovač fuse bajtů jsem přepracoval a navrhnul na něj plošňák.
Není to sice nic, co by se nedalo "splácat" na nějaké univerzální destičce, nebo na nepájivém poli, ale na plošňáku to vypadá o dost líp a je to i mechanicky odolnější.
Teď tenhle přípravek dokáže nejen nastavovat FUSE, ale zároveň slouží i jako ISP programátor.
Součástí tohoto nového ReFusátoru je i Step-Up regulátor napětí (z 5V na 12V), takže nepotřebuje už žádný další zdroj.
Všechno je to postavené na malé desce 5x5cm a řízené jedním Arduinem NANO

Napájení si bere z USB portu z počítače a pomocí tohoto USB připojení také probíhá komunikace při nahrávání programu.

Požadované nastavení fuse bajtů se dá jednoduše změnit pomocí DIL přepínačů.
V programu je předpřipraveno několik variant, ze kterých je možné čtyři vybrat a přiřadit je čtyřem kombinacím přepínačů.
Defaultně je nastaveno toto:

Přepínač
1
Přepínač
2
LED signalizace [Hfuse], [Lfuse],
[Efuse]
Funkce
ON ON svítí zelená [0x7A] [0xFF]
[--]
Nastavení ATtiny13 tak, aby bylo možné s obvodem komunikovat (nahrát do něj program). Vývod PB5 má funkci RESET, vnitřní frekvence oscilátoru není dělená 8. 
1 ON bliká zelená [0x7A] [0xFE]
[--]
V ATtiny13 se funkce vývodu PB5 přepne do stavu, kdy je možné ho použít jako běžný vstupně/výstupní pin. V tomto nastavení už není možné s obvodem komunikovat. 
ON 2 svítí červená [0xE2] [0xDF]
[0xFF]
Nastavení ATtiny25 / ATtiny45 / ATtiny85 tak, aby bylo možné s těmito obvody komunikovat (nahrát do nich program). Vývod PB5 má funkci RESET, vnitřní frekvence oscilátoru není dělená 8.
1 2 bliká červená [0xE2] [0x5F]
[0xFF]
V ATtiny25 / ATtiny45 / ATtiny85  se funkce vývodu PB5 přepne do stavu, kdy je možné ho použít jako běžný vstupně/výstupní pin. V tomto nastavení už není možné s obvody komunikovat. 


Takže je možné například v jedné poloze přepínačů nastavit fuse bajty tak, aby mohla probíhat komunikace,
Ve druhém kroku se přes ISP programátor nahraje do ATtiny požadovaný program a v posledním kroku se přepne přepínač do polohy pro zrušení funkce pinu RESET a provede se další vysokonapěťový přepis fuse bajtů.

To všechno na jedno zasunutí ATtiny do patice. 


Schéma a popis elektroniky

 
Větší rozlišení po kliknutí na obrázek

Celé zařízení je řízeno pomocí Arduina NANO.
Toto Arduino je osazené v patici, takže v případě potřeby je možné ho vyjmout a použít na jiné projekty.

Programované ATtiny je možné vložit buď do patice, nebo se dá připojit přes standardní ISP konektor (MLW10) na boku desky.

K přeprogramování FUSE je potřebné zvýšené napětí 12V. Toto napětí se získává z modulu zvyšujícího (Step-Up) regulátoru.
Není tedy nutné připojovat další zdroj, jako tomu bylo u předchozích verzí resetovačů Fuse bajtů.
Modul jsem sehnal tady: eBay

Napětí na 12V zdroji je regulovatelné. Z toho důvodu jsem považoval za vhodné testovat jeho skutečnou velikost.
K testu dochází vždycky při resetu Arduina NANO. Když je napětí v toleranci 11,7 až 12,3V, program normálně naběhne.
Pokud je při startu napětí mimo toleranci, přejde program do režimu nastavení tohoto napětí.
V tomto režimu se rozsvítí modrá signalizační LED. Trimr na regulátoru se musí nastavit tak, aby modrá LED zhasla.
Modrá LED zhasne tehdy, když je výstupní napětí za regulátorem mezi 11,9 až 12,1V.
V tomto režimu je zároveň aktuální hodnota napětí odesílána po sériovém portu (rychlost 19200), takže je možné v případě potřeby tuto hodnotu sledovat třeba v sériovém terminálu. Z režimu nastavení je možné odejít pouze resetem Arduina NANO.

Signalizace různých stavů je zajišťována pomocí 3-barevné SMD LED. Jako alternativu je možné použít i vývodovou trojbarevnou LED (THT). Neosazujte obě LED zároveň.

Tlačítko pro přepis fuse bajtů je dvojité. To umožňuje připojit 12V na ATtiny jen v případě jeho sepnutí. V režimu ISP programátoru je 12V odpojených.

Pin RESET na ATtiny je ovládán přes FET tranzistor. Vychází to z původního zapojení restovače FUSE bajtů. Protože FET tranzistor v tomto zapojení obrací fázi signálu, bylo třeba upravit originální program pro ISP programátor, aby to obracení fáze zohlednil.



Plošný spoj


horní strana
   

spodní strana

 

Podklady pro výrobu plošného spoje ve formátu pro Eagle jsou tady:   pcb_V4.zip

28.8.2020

Nabídka od předchozích stavitelů refusátoru Petra M. a Václava P. (kontakt zprostředkuji):

Pro zájemce je k dispozici ještě několik neosazených desek V4, za cenu poštovného.
   

Před osazením doporučuji alespoň zhruba nastavit 12V na Step-Up regulátoru. Kdyby byl při zapnutí vytočený na maximum, mohlo by to způsobit problémy na měřícím vstupu.

Dále je nutné tento Step-Up regulátor osadit trochu výše nad základní destičku, aby byl zajištěn přistup k nastavovacímu trimru.
Již několikrát se mi vyplatilo, že jsem nechal připojovací piny Step-Up regulátoru delší, takže jsou k dispozici snadno dostupná napětí 5V, 12V a GND.



Pozor na správný typ dvojtlačítka!
Musí být použito "symetrické" dvojtlačítko, u kterého je jedno jak se osadí.
Věnujte pozornost popisku na plošňáku.
Použité tlačítko má střední vývody v protilehlých rozích (v rozepnutém stavu jsou spojené krajní vývody).

Existují ale i tlačítka se stejnými rozměry, které mají střední vývody uprostřed.
Při jejich osazování záleží na správné orientaci. Plošný spoj ale na tato tlačítka není připravený.


Software

Jádrem celého programu jsou dva bloky, které jsem z větší části opsal a trochu upravil.

První blok je resetovač FUSE bajtů. Byl převzatý z těchto stránek: https://sites.google.com/site/wayneholder/attiny-fuse-reset
Upravil jsem tam možnost výběru FUSE pro různé obvody pomocí DIL přepínačů. 

Druhý blok je ISP programátor, který je obsažen v příkladech ve vývojovém prostředí Arduino. V tomto bloku jsem upravil přiřazení pinů tak, aby to odpovídalo plošnému spoji. Další změnou bylo invertování signálu RESET (kvůli spínacímu FET tranzistoru).

K těmto dvěma blokům je přidán kus kódu pro testování napětí 12V zdroje a několik dalších jednodušších podprogramů pro signalizaci (blikání 3-barevnou LED).

 

Celý program pro Arduino NANO je ke stažení tady: isp_refu_v6.ino

Do Arduina NANO je nutné nahrát tento program ještě před jeho zasunutím do základní destičky.
Kvůli správné funkci ISP programátoru bylo nutné zablokovat resetovací pin kondenzátorem C4 (viz schéma), takže do zasunutého Arduina není možné nahrát program přes USB konektor. Když se Arduino NANO vytáhne z patice, kondenzátor C4 se odpojí a programování přes USB konektor probíhá zase normálně.


Návody a videa


Popis jednotlivých prvků.

 


1) Nastavení FUSE pro nové ATtiny13 tak, aby bylo možné s obvodem komunikovat

Nové obvody ATtiny mají přednastavené fuse bajty tak, že dělí základní frekvenci 8 (v LowFuse je nastavený bit CKDIV8).
Kvůli tomu není možné běžnými programátory nahrát do ATtiny program.
Pro zrušení bitu CKDIV8 je třeba provést vysokonapěťový přepis FUSE bajtů.

V případě THT varianty obvodu ATtiny13 ho stačí zasunout do patice, přepnout DIL přepínače do polohy ON-ON (zelená LED trvale svítí) a podržet tlačítko tak dlouho, než se rozsvítí modrá LED. Tím jsou FUSE bajty přepsány.

Pro obvody ATtiny25, ATtiny45 a ATtiny85 se FUSE resetují podobně, akorát DIL přepínač se při použití těchto obvodů nastaví do polohy ON-2 (trvale svítí červená LED)


Video s ukázkou přepisu fuse bajtů pro ATtiny13

 


Video s ukázkou přepisu fuse bajtů pro ATtiny85

 


2) Nastavení FUSE pro ATtiny, které je osazené na jiné desce s ISP konektorem

Pokud je ATtiny osazené na externí desce nebo je v SMD variantě (takže nejde zasunout do patice), připojí se tato externí deska pomocí standardního ISP konektoru. Navíc je nutné ještě propojit pin PB3, který není součástí ISP konektoru.

Pak se postupuje stejně, jako v předchozím případě.

Pomocí DIL přepínače se zvolí požadované FUSE a tlačítko se podrží tak dlouho, než se rozsvítí modrá LED.

 


3) Nahrání programu do ATtiny v režimu ISP programátoru

Pokud je ATtiny ve stavu, kdy je možné ho zasunout do patice, stačí připojit programovací přípravek k počítači.

V případě, že je ATtiny součástí externí desky, stačí propojit ISP konektory (tady už není nutné propojovat pin PB3).

Ve vývojovém prostředí vybrat typ programátoru "Arduino as ISP" a pak už jen příkazem "Nahrát pomocí programátoru" poslat program do ATtiny.
Pokud dojde k úspěšnému zápisu dat do ATtiny, vývojové prostření zahlásí "Konec nahrávání".


Ukázka vypálení programu do ATtiny13


4) Obnovení funkce pinu RESET v ATtiny, nahrání programu a opětovné přepnutí pinu RESET do funkce výstupu

 
Ukázkové video s ATtiny85 na externí testovací desce.


 

5) Přímé operace s EEPROM a FLASH pamětí pomocí režimu ISP programátoru (přes AVRDUDE)

Stejně, jako je možné do ATtiny poslat program přes vývojové prostředí Arduino, je možné provádět i přímé operace s EEPROM nebo FLASH.
O komunikaci s programátorem se stará DOSovský program avrdude (je součástí instalace vývojového prostředí Arduino).

Přes příkazovou řádku dokáže například přečíst obsah EEPROM z ATtiny a uložit ho do souboru, nebo naopak obsah souboru zapsat do FLASH paměti v ATtiny.

Má spoustu nastavení. Popis všech parametrů je třeba zde: http://www.nongnu.org/avrdude...

Protože ovládání přes příkazovou řádku je nepohodlné, existuje mnoho grafických nadstaveb, pomocí kterých je možné provádět operace pomocí klikání myši.
Pro ukázku jsem použil první grafickou nadstavbu, kterou mi nabídl Google. Jmenuje se "AVRDUDESS".

V nastavovacím formuláři je nejdůležitější zvolit správný typ programátoru a přenosovou rychlost (na obrázku níže označeno červeně). Tyto položky nastavte přesně tak, jak je uvedeno na obrázku.

Dále je třeba zvolit virtuální COM port (vytvoří se po připojení ISP programátoru k počítači) - na obrázku modře, ale u každého to může být jiné.

Další nastavení už snad nepotřebuje žádné komentáře. Zvolí se soubor ze kterého se mají načíst a odeslat data do ATtiny, nebo do kterého se má zapsat obsah příslušné paměti z ATtiny.

 

Doplnění:
Od nějaké verze AVRDUDESS (2.13) už není možné zvolit programátor "Atmel STK500 Version 1.x firmware".
Místo toho se musí zvolit programátor "Arduino".

 

 


 

 




úvodní strana webu AstroMiK.org

poslední úprava stránky 31.8.2020