Programování AVR

Při pokusech s projektem AVR component tester jsem se pokoušel tester vytvořit s pomocí klonu vývojové desky Arduino Nano (tady jsem přemýšlel jak klonu dále v článku říkat, abych nezneužíval obchodní značku; dále tedy pro čínská duina zavádím název ČÍduino). Na Aliexpressu je totiž cena tohoto modulu (je k mání od asi $1.80) téměř na ceně samotného Atmega328 v DIP pouzdře (ten je k mání od asi $1.30). Po prvních pokusech s displejem 2x16 znaků, kdy se mi nedařilo provést kalibraci (zřejmě kvůli chybě v zapojení šestice měřících odporů, nebo LED připojené k D13), jsem se po asi dvouměsíční přestávce odhodlal k pokračování pokusů na nepájivém poli, tentokrát přímo s DIP obvodem Atmega a TFT zobrazovačem s řadičem ST7735 (color kit). Atmegu (i LCD) jsem si půjčil ze stavebnice čínského klonu AVR testeru, takže už byla naprogramovaná. Po objevení několika chyb (chybějících spojů), které jsem na nepájivém poli udělal, se mi tester podařilo oživit.

Tester a ČÍduino Nano

Po úspěchu s Atmegou jsem se opět pustil do pokusů s ČÍduinem. Říkal jsem si totiž: mělo by to přece fungovat, když rozdíl je jen v tom, že k D13 je připojena na desce testovací LED a hodiny MCU řídí 16MHz krystal namísto 8MHz u standardního testeru. Protože pin D13 je využíván u AVR testeru v měřícím obvodu, je zřejmé, že připojená LED by negativně ovlivňovala měření - pokud by je přímo neznemožnila. Řešení je ale celkem jednoduché - stačí odpájet předřadný odpor LEDky, jako na tomto obrázku:

"Horší" je to s krystalem: Je sice možné najít na internetu variantu firmwaru přímo pro mou konfiguraci (tj. atmega328p na 16MHz + St7735 + enkodér), ale pro další pokusy jsem se začal zajímat o to, jak bych mohl zkompilovat vlastní konfiguraci dle případné potřeby. V tom mi hodně pomohlo pročtení fóra na SVETELEKTRO.COM. Tady jsem taky našel výše uvedený firmware pro moji konfiguraci, tj. ST7735_16MHZ_CZ, ten jsem do ČÍduina nahrnul jako první. Na následujícím obrázku je výsledné zapojení ČÍduina na nepájivém poli s podobným FW, ten vycházel z tohoto příspěvku na SVETELEKTRO a líp využívá možnosti barevného LCD.

Jak dostat FW do duina?

Možná začínám poněkud odzadu, ale pokud již máme (tj. např. stažené z internetu) zkompilované soubory pro zavedení do AVR testeru, můžeme je do atmegy nahrát pomocí ISP programátoru a programu AVRDUDESS. Já jsem jako ISP programátor použil druhé ČÍduino Nano, což může být v případě klonů problematické. Skutečně jsem se taky s jistými potížemi potýkal (kdy programování "chvíli šlo a zas nešlo"), ale po doplnění 10M kondenzátoru mezi GND a RST u "ISP ČÍduina" už to šlapalo spolehlivě. Samozřejmě je potřeba utilitku správně nakonfigurovat:

 

Jak zkompilovat vlastní FW?

Pokud jste jako já zvědaví a nebo nenajdete vhodný FW pro vaši sestavu, narazíte na potřebu si zkompilovat vlastní variantu firmwaru. V OS Windows je pro tento účel k dispozici program WinAVR. Po jeho instalaci je vhodné provést aktualizaci kompilátoru pomocí balíku Toolchain 3.4.4 nebo 3.4.5, a nahrání jiné verze knihovny "msys-1.0.dll" do složky "..WinAVR..\utils\bin". Bez přepsání knihovny pokus o kompilaci skončí chybou (první bod opravy jsem vyčetl opět na SVETELEKTRO, stejně jako ten druhý).

Po zprovoznění nástroje na kompilaci je třeba stáhnout pracovní adresář se zdrojovými kódy projektu a ten rozbalit někde na disk. V tomto adresáři je pak třeba najít podadresář s variantou nejlépe odpovídající konfiguraci programovaného testeru, soubor "Makefile" v tomto adresáři pak načíst do editeoru programu WinAVR, popř. dle potřeby upravit "Makefile" a spustit kompilaci příkazem "[WinAVR] Make All" z nabídky editoru "Tools" (na obrázku níže). Pokud vše proběhne v pořádku, výsledek by měl vypadat nějak jako v dolním panelu (output) na obrázku:

Další pokusy

Jako další variantu s ČÍduinem jsem poskládal variantu s LCD zobrazovačem 4x20 znaků. Jako základ pro kompilaci jsem vzal "Makefile" odtud. Při skládání této varianty jsem se opět dopustil dvou drobných chyb, které měly za důsledek to, že jsem nabyl dojmu, že jsem zničil výstup D5 ČÍduina. Díky tomu jsem ale otestoval, jak se AVR tester chová s ČÍduinem bez odpojené LED na D13.

Při prvním zapnutím obvodu na nepájivém poli jsem si totiž všiml, že mi jeden přívod k LCD z pole vyklouzl. Vypnul jsem tedy napájení, vrátil jsem ho na místo, kde jsem předpokládal, že má být, a znovu zapnul napájení. LCD se ale pořád neměl k životu. Po důkladné prohlídce jsem zjistil, že jsem vypadený vodič zapojil na místo, kam byl přiveden potenciál GND. Protože vypadený vodič byl výstup D5 z ČÍduina, předpokládal jsem, že se mi ho podařilo touto chybou odpálit (což se ale nakonec, jak jsem později zjistil, naštestí nestalo). Stále mi totiž nefungoval LCD; naprogramoval jsem tedy druhé ČÍduino (kde jsem LED z D13 neodpojoval). Ani po výměně ale LCD nefungoval, tak jsem nakonec znovu důkladně prohledal zapojení a objevil chybějící propojku z LCD:RW na GND. Pak už LCD konečně začal pracovat.

Při pokusech s ČÍduinem bez odpojené LED se tester choval podivně: V průběhu kalibrace se ukazovaly vysoké hodnoty měřených veličin, po kalibraci pak náhodně vyhodnotil součástku správně a nebo taky ne. Celkem dobře (alespoň zdánlivě, výsledky zřejmě byly zkreslené) fungovalo měření mezi TP1-3, nebo měření tranzistorů a jiných součástek se třemi vývody. Pokud jsem ale připojil např. odpor mezi TP1-2 a nebo mezi TP2-3, jeho hodnotu tester nevyhodnotil, ale zorazil že je připojen kondenzátor 68uF mezi TP1-3. Náhodně vyhodnotil tester podobný "virtuální" kondenzátor i když nebyla připojená žádná součástka. Navíc se nebylo možné dostat do menu a někdy při točení s enkodérem došlo k resetování měření.
Z výše uvedeného tedy jednoznačně vyplývá, že odpojení LED od D13 je pro správnou funkci testeru bezpodmínečně nutné (jak se ovšem dalo předpokládat).

Po zjištění, že zapojení pracuje, jsem tedy do obvodu vrátil ČÍduino s odpojenou LED, provedl kalibraci (autotest) a vyzkoušel detekci několika součástek. Teď už všechno probíhalo standardně, výstup D5 tedy připojení ke GND přežil.

Pokud by se někdo chtěl pustit do podobných pokusů a nevěděl, kde vzít podklady pro zapojení, může využít třeba tento příspěvek jako zdroj. Schéma zapojení s barevným displejem jsem čerpal prozměnu odtud. Já jsem pak ze základního schématu testeru vypustil obvody pro obsluhu napájení, spínač jsem tedy připojil přímo k D7 (PD7) a celé zapojení napájel přímo 5V (pomocí shieldu pro nepájivé pole).