Tipy pro nahrávání programu do Arduina

Nahrávání programu do Arduina je na první pohled velmi triviální věc. Stačí vývojovou desku připojit do USB portu PC, vybrat správnou desku a COM port. Ve většině případů tyto úkony stačí k tomu, aby software vývojovou desku ovládl. Mohou ovšem nastat případy, kdy tyto jednoduché kroky nestačí a Arduino se s námi odmítá bavit. Takový problém může potkat úplné začátečníky, ale i ostřílené bastlíře. Základní kroky nahrávání programu (naleznete zde) v tomto článku vynecháme a zaměříme se především na možné potíže a jejich řešení.    

Časté chyby

  1. avrdude: ser_open(): can't open device
    • Vývojový kit není připojen do PC nebo je v nastavení Arduina IDE zvolen jiný COM port nebo je zvolený COM port využívaný jiným programem v PC. Postupujte dle odstavce Rychlé kontroly a opravy.
  2. avrdude: stk500_recv(): programmer is not responding
    • Pravděpodobně není ve vývojovém kitu nahraný zavaděč. Postupujte dle odstavce Nahrání zavaděče (bootloaderu).  

Rychlé kontroly a opravy

  1. Odpojte od vývojového kitu všechny připojené periferie (snímače, shieldy, …), případně zavřete ostatní programy pracující s COM porty (virtuálními sériovými linkami).
  2. Aktualizujte vývojové prostředí Arduino IDE.
  3. Zkontrolujte připojení Arduina k PC. Otevřete Správce zařízení Windows a rozklikněte záložku Porty COM a LPT. V tomto seznamu by mělo být uvedeno mj, i připojené Arduino. Standardní názvy pro Arduino jsou Sériové zařízení USB (originální Arduino) nebo USB-SERIAL CH340 (klon). Pokud je připojení v pořádku, zapamatujte si číslo COM portu. Pokud Arduino v seznamu není, pak je pravděpodobně vadný USB kabel nebo nejsou v PC nainstalovány ovladače.
  4. Pokud jste tak neučinili dříve, nainstalujte ovladače (více v odstavci Instalace ovladačů).
  5. Zkontrolujte nastavení Arduino IDE.
    • Máte zvolenou správnou desku? (Nástroje→Vývojová deska)
    • Máte správně zvolený COM port? (Nástroje→Port)
  6. Zkuste nahrát program Blink (Soubor→Příklady→01.Basics→Blink). Tento program „bliká” vestavěnou LED diodou, pokud ji vestavný kit má :-)
    • Pokud je vše OK, ve stavovém řádku uvidíte (stejný nebo podobný) výpis:
    • Pokud nahrávání selže, zkuste nahrát zavaděč (více v odstavci Vypálení zavaděče (booloaderu)).

Poznámka: Pokud nepoužíváte Arduino Uno, koukněte také na odstavec Poznámky k vybraným typům vývojových kitů.   

Instalace ovladačů

Pokud chceme nahrávat program do Arduina pomocí USB, bez ovladačů to nepůjde. Základní Arduino desky jsou osazeny USB konektorem, pro snadné nahrávání programů. Komunikaci mezi PC a samotnou deskou zajišťuje integrovaný obvod USB TTL, který je „za” USB konektorem Arduina. Aby počítač věděl jak s tímto obvodem komunikovat, potřebuje k tomu vhodný ovladač.

Originální desky a precizní klony

Výhodou originálních kitů a jejich přesných kopií je absence nutnosti (samostatné) instalace ovladačů. Pokud si nainstalujeme vývojové prostředí Arduino IDE (platí to i pro jiná IDE), podpora originálního hardwaru se nainstaluje automaticky s prostředím. Desku poté stačí pouze připojit k USB portu PC a bude ji přidělen potřebný COM port.  

Standardní klony

U ostatních  Arduino desek je nutné nainstalovat vhodný ovladač. Většinou se jedná o ovladač k čipu CH340 nebo CP2102. 

Integrovaný obvod CH340

Převodník CH340 je v levných klonech nejrozšířenější integrovaný obvod pro převod USB komunikace na komunikaci UART. Tento převodník můžete najít na deskách Nano, Uno i Mega a v jejich dalších odnožích. Ovladače můžete stáhnout zde nebo v příloze článku. 

Integrovaný obvod CP2102

Tento čip nalezneme např. u některých desek Wemos a ESP. Ovladače se v systému WIN10 nainstalují automaticky, můžete si je ale také stáhnout zde

Arduino bez zavaděče (bootloaderu)

Toto je asi jeden z nejzákeřnějších problému zejména pro nezkušené uživatele Arduina. Bez zavaděče zkrátka nelze přes USB do Arduina nic nahrát, jelikož mikroprocesor Arduina zkrátka neví, co s příchozími daty dělat. Většina Arduino desek je dodávána již s vypáleným bootloaderem, čas od času se ale může stát, že narazíme na desku, která jej vypálený do paměti nemá. Bootloader slouží právě k zavedení programu do FLASH paměti Arduina přes UART rozhraní. Pokud bootloader chybí, Arduino je němé a je ochotno si povídat pouze s SPI sběrnicí (programátory). 

Nezkušený uživatel má tu nevýhodu, že vůbec nemusí poznat, že se jedná o problém absence bootloaderu. Do desky zkrátka nejde nic nahrát, na uživatele vyskočí zdánlivě nic neříkající hláška a hotovo. Jde to samozřejmě vyřešit vypálením zavaděče pomocí oněch ISP nebo USBasp programátorů. Arduino IDE navíc vypalování zavaděčů přimo podporuje. Nevýhodou ovšem je, že takový programátor musíme mít doma/v dílně. Vypálit zavaděč lze i pomocí druhého Arduina, ale to už je pro nezkušeného bastlíře pěkná divočina.

Pokud ovšem programátor máme, můžeme se do vypalování pustit. V Arduino IDE stačí pouze vybrat desku, do jaké chceme bootloader vypálit a programátor, který to všechno provede. Poté jen zvolíme možnost vypálit zavaděč.

Vypálení zavaděče (bootloaderu) 

  1. Připojte USBasp nebo ISP programátor k ICSP konektoru Arduina. Pin MISO programátoru musí být připojen k pinu č. 1 (často označován tečkou) ICSP konektoru. Pokud bude programátor připojen obráceně, můžete dojít po připojení napájení k poškození Arduina.
  2. Otevřete Arduino IDE a nastavte parametry desky, do které chcete zavaděč vypálit.
    • Máte zvolenou správnou desku? (Nástroje→Vývojová deska)
    • Máte správně zvolený programátor? (Nástroje→Programátor)
  3. Následně na kartě Nástroje vyberte možnost Vypálit zavaděč.
  4. Pokud vypalování proběhlo úspěšně, Arduino IDE zahlásí, že bylo vypalování zavaděče ukončeno.
  5. Pokud Arduino IDE hlásí problém s přenosem dat na vývojovou desku, můžete mít tyto problémy:
    • Špatně nastavené parametry Arduino IDE.
    • Nevhodně vybraný programátor.
    • Špatně zapojený programátor.
    • Poškozená vývojová deska.
  6. Pokud nemáte možnost použít k vypálení zavaděče programátor, můžete vyzkoušet vypálení zavaděče pomocí druhého Arduina. Návod jak na to je zveřejněn na oficiálních stránkách Arduina. 

Poznámky k vybraným typům vývojových kitů

Arduino Nano

  • Zkuste přepnout nastavení mikroprocesoru (Nástroje→Procesor) z ATMEGA328P na ATMEGA328P (Old bootloader) nebo naopak.

Arduino (Pro) Mini, Arduino LilyPad a jiné kity bez USB-TTL převodníku

  • Tento vývojový kit neobsahuje USB-TTL převodník a je tedy nutné použít externí převodník/programátor.

  • Pokud externí převodník neobsahuje pin DTR, je nutné držet tlačítko reset na vývojovém kitu během kompilace/ověřování programu (před nahráváním).

  • Více informací se dočtete v odstavci Arduina bez USB TTL převodníku.

Arduino Leonardo, Micro (Pro)

  • Stiskněte a držte tlačítko reset a až poté připojíte USB kabel k PC. Následně tlačitko pusťte. Arduino by se mělo přihlásit k PC a mělo by mít přiřazeno číslo sériového portu COM.

ESP32

  • Při nahrávání programu držte stisknuté tlačítko BOOT. 

Arduina bez USB TTL převodníku

Další sortou jsou desky, které  jsou určeny spíše pro pokročilé uživatele a zároveň míří na tu úplně nejnižší cenovou hladinu. Výrobce takovýchto desek se snaží srazit náklady na výrobu tak, že zkrátka odstraní všechny součástky, které nejsou pro funkci desky stěžejní. Mezi takové komponenty se řadí i USB TTL převodník. Když se nad tím zamyslíme, je to celkem logické. Představme si, že máme napsaný software pro zařízení, které má fungovat roky bez další lidského zásahu. Pokud je software dobře odladěný, víme, že jej do desky nahrajete pouze jednou, maximálně dvakrát za životní cyklus. V takovém případě je USB TTL převodník přímo na desce zbytečný a pouze navyšuje cenu hardwaru, který by fungoval stejně i bez převodníku. Jak ovšem nahrát software do desek bez USB konektoru?

Poznámka: Některé desky mohou mít USB konektor pouze pro napájení nikoliv programování.

Externí USB TTL převodník

V nabídce našeho obchodu můžeme najít hned několik druhů externích USB TTL převodníků (např. 1449940303 nebo 1502167659), jež nám pomohou výše zmíněný problém vyřešit. Výhodou využití tohoto přístupu programování Arduino desek je, že následný postup v Arduino IDE je stejný jako v případě desek s USB TTL převodníkem. Stačí pouze vybrat přidělený COM port a typ desky, kterou programujeme.

Aby mohlo programování proběhnout správně, musíme si uvědomit několik věcí: 

  • Zpravidla je nutné pro různé typy převodníků nainstalovat vhodné ovladače.

  • V Arduinu musí být nahrán bootloader (zavaděč).

  • Převodníky komunikují s Arduinem přes UART rozhraní. 

  • Piny RX, TX převodníku a Arduina musí být zapojeny křížem. 

  • Pokud převodník nemá DTR výstup, je nutné při každém nahrávání Arduino manuálně resetovat (tlačítkem).

  • Pokud převodník disponuje DTR výstupem, připojíme ho k RESET pinu Arduina (při nahrávání bude reset vyvolán automaticky).

USBasp a ISP programátory

Programátory jsou určeny především pro pokročilejší uživatele. Jejich použití má totiž své výhody, ale i pár nevýhod.

Výhody:

  • V Arduinu nemusí být nahrán bootloader – více dostupné FLASH paměti.

  • Komunikace přes SPI rozhraní – hardwarová sériová linka je uvolněna pro potřeby programátora.

  • Snadné zapojení – ICSP konektor na desce Arduina.

  • Rychlost nahrávání, nižší pravděpodobnost selhání nahrávání.

  • Reset desky probíhá automaticky.

Nevýhody:

  • Nutnost instalace ovladačů (platí pouze pro USBasp).

  • Ztráta komunikace se sériovým terminálem na PC.

  • Desku lze snadno zničit pokud je programátor na ICSP konektor zapojen obráceně. 

Nyní pár slov k samotným programátorům. Programátor ISP je hardware vyvinutý přímo společností Atmel pro programování Atmel AVR mikroprocesorů. Arduino je na bázi těchto mikroprocesorů postaveno. Naopak USBasp programátor je open-source projekt s vlastním hardwarem a softwarem. Ve své podstatě je jedno jaký programátor použijeme (oba jsou podporovány v Arduino IDE). Ve prospěch USBasp je ovšem nižší pořizovací cena.

Doufáme, že byly pro vás tyto řádky nápomocné a pomohly vám vyřešit potíže, které mohou během nahrávání programu nastat. Uvidíme se u dalších blogů :-).

Další podobné články