Reklama

Začínáme s mikrokontroléry ATxmega – Programátory a “debuggery” NEJEN pro ATXmegy

Úvod

Většina návodů pro mikrokontroléry začíná blikáním LED diodou. A ani my nebudeme výjimkou. Smyslem takového návodu většinou není naučit uživatele blikat LED diodou, ale zprovoznit celý vývojový řetězec od překladu programu až k jeho nahrání do mikrokontroléru.
A právě tím jak nahrát program do mikrokontroléru (a případně jak ho ladit “debugovat”) se budeme zabývat právě v tomto článku. Jestliže chcete začít programovat mikrokontroléry ATxmega, tak nejspíš použijete některý z níže uvedených programátorů a proto není od věci udělat si menší přehled toho, co je k tomuto účelu k dispozici. Nečekejte nějaký vyčerpávající kompletní návod. Budu se vás snažit uvést jenom do problematiky, tak abych vám usnadnil výběr nástroje. A protože se vývojové nástroje a mikrokontroléry různě prolínají, tak čas od času odbočím s nějakou poznámkou i k AVR nebo SAM.

Programátory a “debuggery”

Programátorů a “debuggerů” existuje celá řada. Já se přirozeně nebudu věnovat všem, ale ve stručnosti zmíním ty, se kterými mám nějakou zkušenost. Na obrázku Obr. 1. jsou ty, kterým se budu věnovat.

 
Obr. 1: Zleva - AVR PROG MKII, AVR-ISP-MKII (Olimex), AVR Dragon, ATMEL-ICE PCBA, ATMEL-ICE

Obr. 1: Zleva – AVR PROG MKII, AVR-ISP-MKII (Olimex), AVR Dragon, ATMEL-ICE PCBA, ATMEL-ICE

 

Vyjmenuji je zleva: AVR PROG MKII, AVR-ISP-MKII (Olimex), AVR Dragon, ATMEL-ICE PCBA, ATMEL-ICE. Stručně si teď povíme silné i slabé stránky každého z nich, včetně orientační ceny, protože ta bude pro “bastlíře” docela důležitým faktorem. Ještě než se dám do rozebírání jednotlivých nástrojů, zrekapituluji ve zkratce rozdíl mezi programátorem a “debuggerem”. Programátor vám umožňuje pouze zapisovat / číst / mazat paměti mikrokontroléru (ať už Flash, kde je samotný program nebo EEPROM, kde jsou různá data). V případě rodiny AVR lze jimi ještě měnit FUSES (propojky) a LOCK bity (zámky). Oproti tomu “debugger” vám umožňuje kromě těchto operací také ladit “debugovat” program. To znamená krokovat program, nechat ho běžet, zastavovat, číst a měnit obsah RAM, sledovat a měnit obsah všech registrů a proměnných, používat “breakpointy” a mnoho dalšího. Je to tedy nástroj pro ladění programu.

AVR PROG MKII

Jedná se o programátor (nelze s ním tedy “debugovat”), který už bohužel v ČR není k dostání. Jádrem je AT90USB162 a v principu by ho tedy neměl být problém zreplikovat. Na toto téma existuje na webu mnoho návodů (třeba ZDE). Programátor zvládá rozhraní ISP (běžné ATmega a ATtiny), TPI (miniaturní ATtiny) a PDI (ATxmega). Na mé verzi byl bohužel malý “bug” a hodnoty dvou rezistorů byly nevhodně zvolené. Musel jsem proto udělat malou úpravu a změnil jsem rezistor o hodnotě 10k za 100R (viz Obr. 2.). Firmware programátoru je potřeba volit podle toho v jakém prostředí pracujete. Výrobce dává na svých webových stránkách k dispozici firmware pro práci s Atmel Studiem, AVR Studiem, AVRDUDE, BASCOM (a možná i další). Firmware je možné měnit s pomocí programu FLIP a návod lze nalézt na stránkách výrobce. Programátor umožňuje pracovat na napětí 5 V nebo 3.3 V a je z něj možné cílovou aplikaci i napájet. Většinu prací to usnadňuje, ale programovat návrhy pracující třeba na napětí o hodnotě 1.8 V nebude bezpečné (nebo to bude přinejmenším komplikované). S tímto úskalím se ale setkáte u většiny levnějších programátorů. V Polsku se dá sehnat mezi 400 – 500 kč. Osobně jsem ho testoval a používal na AVR Studiu 4.

 
Obr. 2: Nutná úprava hodnoty rezistoru (upravit by nejspíš potřebovaly oba)

Obr. 2: Nutná úprava hodnoty rezistoru (upravit by nejspíš potřebovaly oba)

 

AVR Dragon

AVR Dragon je programátor a “debugger”. Programovat umí ISP, HVSP, PP, PDI, aWire a JTAG. Rozhraní aWire neznám, takže se mu nebudu věnovat. HVSP a PP (paralelní programování) využijete leda v situaci kdy si špatnou volbou FUSES zablokujete mikrokontrolér. K ladění slouží rozhraní JTAG, kterým je možné programovat i ladit některé ATxmegy, ale také spoustu mikrokontrolérů řady ATmega. Dále k ladění slouží rozhraní PDI, debugWIRE (ATtiny a ATmega) a aWire. Dragon je citlivý na hrubé zacházení, takže aplikace jako různé spínané měniče řízené Atmelem a podobné záležitosti z jeho portfolia raději vynechejte. Při hrubším zacházení jsem na něm zničil analogový přepínač. Naštěstí byla jeho náhrada k dostání asi za desetikorunu. Ale výměna není kvůli rozměrům úplně triviální. Pokud pracujete na ATmegách nebo plánujete pracovat s ATxmegami, tak by vám měl na většinu aplikací stačit. Bohužel nepatří k nejlevnějším variantám. Na Farnellu ho seženete za 1340 kč bez DPH (1620 kč s DPH). Osobně jsem ho používal s Atmel Studiem 7 a AVR Studiem 4 s rozhraním JTAG vcelku spokojeně. S PDI rozhraním bývají potíže, takže s ním lze programovat a debugovat Atxmegy pouze s JTAG rozhraním. V dnešní době bych po něm asi nesáhnul, pokud bych vyloženě nepotřeboval HVSP nebo paralelní programování.

ATMEL-ICE

ATMEL-ICE je asi nejsilnější nástroj, který jsem měl na programování Atmelů k dispozici. Umí programovat i ladit ATiny, ATmegy, ATxmegy, SAMy (ARMy) i AVR32. V podstatě celé portfolio Atmelů. Pracovat s ním můžete v Atmel Studiu (nikoli však v AVR Studiu). Jak je na tom spolupráce s AVRDUDE netuším. Vzhledem k tomu, že jde o “debugger”, tak ani neočekávám, že ho budete chtít provozovat s AVRDUDE (které slouží pouze k programování, nikoli k ladění). Koupit se dá v několika provedeních. Nejlevnější z nich je očesaná verze ATMEL-ICE PCBA. V té dostanete do ruky pouze holé zařízení bez krabičky a bez kabelu. Konektor má “nevhodnou” (přesněji “debilní”) rozteč (viz Obr. 3). Vy jste asi zvyklí na rozteč vývodů 2.54 mm (vpravo) ale na ATMEL-ICE je rozteč 1.27 mm. Atmel prodává redukci (káblík opatřený na jednom konci konektorem s malou roztečí a na druhém s velkou roztečí), ale zaplatit byste za něj museli 600 kč bez DPH. Předpokládám, že za takových okolností si budete chtít vyrobit kabel svépomocí. To naštěstí není tak složité. Nejtěžší na celé akci je najít konektor s 1.27 mm roztečí. Vzhledem k tomu, že Farnell (Mouser nebo RS) mají na skladě 50000 typů konektorů, tak je potřeba dlouho hledat. A na konci hledání na vás čeká toto. Potom si někde sežeňte starší IDE kabel z PC (obrázek Obr. 5). A pak s páječkou a trochou šikovnosti můžete vyrobit potřebnou redukci (obrázek Obr. 4). Na jednom konci je nasazený samořezný konektor s roztečí 1,27 mm. Na druhém konci mám kousek drážkovaného kuprextitu. K němu jsou připájeny potřebné vodiče z plochého kabelu a vyvedeny vhodnějším způsobem :) Protože ATMEL-ICE umí používat vícero programovacích rozhraní, tak je potřeba pro každé z nich používat jiné vývody. Můžete si proto připravit buďto jeden kabel a vyvést si z něj všech 10 vývodů a pak pouze ty vhodné z nich připojovat k cílové aplikaci (podle použitého rozhraní) anebo si vyrobit samostatné kabely pro každé rozhraní. To co vidíte na obrázku Obr. 4. slouží k programování rozhraním SWD (mikrokontroléry SAM). Zapojení všech rozhraní přirozeně najdete v dokumentaci k programátoru / “debuggeru” třeba ZDE. Případně můžete redukci vyrobit neelegantním způsobem, tak jako na obrázku Obr. 7 (pak nepotřebujete shánět ani kabel ani konektor), ale kabelová verze je rozhodně lepší. Přirozeně na webu najdete i elegantnější řešení, jako je třeba TOTO. Nejlevnější variantu ATMEL-ICE PCBA jsem našel na Farnellu ZDE. Podobnou cenu můžete najít i na Mouseru (firma Mausel dováží do České republiky za běžné poštovné). Cenově se tedy pohybujete stejně jako s AVR Dragon. Který z nich pro vás bude vhodnější záleží na tom, co programujete. Pokud cílíte na AVR a ATxmegy, tak je to vcelku jedno. S Dragonem dostáváte do rukou možnost HVSP a paralelního programování, naproti tomu s ATMEL-ICE se vám otevírá možnost programovat ARMy (SAM).

 
Obr. 3: Atmel nás učí trpělivosti. Je potřeba vyrobit redukci z konektoru s 50mil (1.27mm) roztečí (vlevo) na rozteč 100mil (2.54mm).

Obr. 3: Atmel nás učí trpělivosti. Je potřeba vyrobit redukci z konektoru s 50mil (1.27mm) roztečí (vlevo) na rozteč 100mil (2.54mm).

 

Obr. 4: Primitivní redukce

Obr. 4: Primitivní redukce

 

Obr. 5: Vhodný kabel (rozteč žil 0.635mm) naleznete na každém rohu (IDE rozhraní z PC)

Obr. 5: Vhodný kabel (rozteč žil 0.635mm) naleznete na každém rohu (IDE rozhraní z PC)

 

Obr. 6: Konektory s roztečí 50mil (1.27mm)

Obr. 6: Konektory s roztečí 50mil (1.27mm)

 

Obr. 7: Ultraprimitivní redukce

Obr. 7: Ultraprimitivní redukce

 

AVR-ISP-MKII (Olimex)

Jde o programátor, který je velice podobný prvnímu jmenovanému (AVR PROG MKII). V ČR ho lze koupit. Nejlevnější jsem našel za 540 kč bez DPH (653 kč DPH) na
TME.cz, ale možná bude i jinde. Opět umožňuje pouze programování a to rozhraními ISP,TPI A PDI. Tedy vhodné pro všechny ATtiny, ATmega a ATxmega. Opět programátor pracuje s napětím 5 V nebo 3.3 V a je potřeba jeho firmware přehrát pokud má spolupracovat třeba s AVRDUDE. Po připojení programátoru k PC nezapomeňte nainstalovat driver (z webu výrobce). Windows si přiřadí driver z Atmel Studia (pokud ho máte nainstalované), ale ten není správný, takže se nenechte zmást.

Připojení programátoru

Programovat ATxmegy je možné pomocí dvou rozhraní. PDI (Programming device interface) mají všechny mikrokontroléry ATxmega. Některé pak mají i JTAG. Obě rozhraní je v principu možné použít jak k programování, tak k ladění. K PDI rozhraní se připojíte pomocí pinu PDI a RESET. Datasheet v sekci “pinout and block diagram” vás pobaví, protože na něm budete marně hledat PDI_CLK a PDI_DATA, tak si musíte zalistovat hlouběji, abyste se dočetli, že PDI_CLK je nutné připojit k lince RESET a PDI_DATA k lince PDI (pokud vám pojmenování připadá zmatečné, tak nejste sami). Vzhledem k tomu, že se připojujete přes vývod RESET, tak je velmi vhodné zařídit, aby během programování byl vývod RESET volný a nebyl ovládán jiným obvodem (externí watchdogem), nebo člověkem (tlačítkem) případně zablokován kondenzátorem. Jestliže budete využívat výhradně PDI rozhraní, tak si můžete pomocí FUSES vypnout podporu JTAG. Tím si uvolníte k dispozici piny, na něž je JTAG namapován. Stejná situace je i u AVR. Například u čipů Atmega16/32/64 je při výrobě zapnuta podpora JTAG a piny PC2,3,4,5 jsou tímto rozhraním blokovány (pokud máte ve FUSES JTAG zapnutý). Vzhledem k tomu, že na čipech ATxmega používám JTAG jen výjimečně (na rozdíl od řady AVR), tak se mu tady nebudu věnovat. PDI rozhraní pak ještě potřebuje připojit GND a VCC. O tom, zda příslušný programátor umí napájet cílovou aplikaci, už byla řeč výše.

Bootloader

Výše uvedený návod nebyl ani zdaleka vyčerpávající. Mimo další programátory / “debuggery” existuje také i další prostředek jak mikrokontrolér naprogramovat. Tím prostředkem je “bootloader”. V mikrokontroléru může být od výrobce nahraný program, který je schopný komunikovat nějakým rozhraním (typicky USART nebo USB) a přepsat zbytek paměti programu. Díky tomu se mnohdy můžete obejít bez programátoru (této koncepce využívá Arduino). Osobně ale nemám s tímto způsobem programování zkušenosti, takže jej zmiňuji jen pro úplnost.

Provoz v Atmel Studiu

Programujete-li mikrokontrolér v Atmel Studiu (což varianta s “debuggerem” asi vyžaduje) bude tato krátká poznámka pouze pro vás. Všechny základní možnosti programátoru uvidíte v okně Tools -> Device programming. Kde nejprve zvolíte nástroj v sekci Tool, pak mikrokontrolér v sekci Device a v případě potřeby i rozhraní v sekci Interface. Po stiknutí tlačítka Apply se vám zpřístupní všechny možnosti programátoru, od nastavení FUSES až přes zápis a mazání paměti. Jestliže chcete program ladit, tak musíte v sekci Project -> Properites -> Tool vybrat programátor / “debugger” a parametry jeho provozu.

Poznámka k AVR

Zajisté jste si stihli všimnout, že Atmel reflektuje moderní trendy a začal vydávat relativně levné vývojové desky nesoucí název
Xplained. Seženete na nich oblíbené mikrokontroléry jako Atmega328PA, Atmega168PA, Atmega328PB potom dále několik horkých novinek jako ATtiny104 nebo ATtiny817 (na první pohled velice našlapaná ATtina) a v neposlední řadě i 32bitové mikrokontroléry (viz níže). Ceny se pohybují okolo krásných 300 kč s DPH. Doposud nic zázračného. To co je ale na deskách důležité se skrývá pod značením mDEBG. Součástí desky je totiž plně funkční programátor / “debugger” a ještě kombinovaný s převodníkem USART / USB. Za tři stovky si tedy můžete užít programování s kompletní ladicí podporou (skrze DebugWIRE rozhraní). Velmi pozitivní vliv na množství stresových hormonů má “debugger”, protože výrazně usnadňuje ladění programů. Filozofií, jak s deskou pracovat je mnoho. Můžete ji naprogramovat a nechat celou přímo v aplikaci, nebo na ní můžete pečlivě odladit program a ten pak jen nahrát do libovolné aplikace a desku si nechat pro příští projekty. Rozložení pinů je kompatibilní s platformou Arduino, ale názvy pinů jsou Atmelovské (díky za to). Deska umí pracovat na napětí 5 V i 3.3 V (stačí připájet “jumper”). Přirozeně ale “debugger” nerozběhnete nikde jinde než v Atmel Studiu. Prototypovací plocha vypadá účelně rozložená. Nechybí ani pořádné množství VCC a GND pinů (slabé místo velkého množství vývojových desek).

 
Obr. 8: Atmega328PA Xplained mini (převzato z www.Atmel.cz)

Obr. 8: Atmega328PA Xplained mini (převzato z www.Atmel.cz)

 

K dokonalosti (kterou reprezentují desky STM32Discovery) chybí už jen plnohodnotnost “debuggeru”. Je schopen programovat / ladit jen ten typ mikrokontrolérů, který je na desce. Pokud tedy máte desku s Atmega328PA, tak pouze mikrokontrolér Atmega328PA a žádný jiný. A taky není jeho rozhraní vyvedeno na konektor. Přitom samotný “debugger” má velký potenciál, mikrokontroléry ATmega328P jsou na drtivé většině Arduino desek. Stačí ATmegu na Xplained desce odpájet a programovací rozhraní vyvést mimo desku k jinému Atmega328P a můžete ladit laciná Arduina. Bohužel konstrukce desky tento “hack” dosti komplikuje. DebugWIRE rozhraní provádí nahrání a ladění programu skrze RESET pin a ten je na desce připojen opravdu velmi tenkou cestičkou, ke které nebude úplně snadné připájet nějaký vývod. Je to opravdu škoda, stačilo tak málo a z celé desky mohl být mnohem mocnější nástroj. Pokud by tato možnost “debugger” “hackovat”, někoho z vás nadchla, tak budu rád, když se s námi o své řešení podělíte.

Pokud zkoušíte desku provozovat v Atmel Studiu, tak se nelekněte při prvním zapnutí. Napřed se mDEBG bude chtít aktualizovat. To mu přirozeně dovolte. Když poté plni nedočkavostí napíšete první program, přeložíte ho a kliknete na Debug -> Start debugging and break, tak na vás vyskočí varovná hláška, že debugWIRE není povolen. Ten je totiž nutné povolit pomocí FUSES. Atmel Studio vám ale v takové situaci rovnou nabídne jeho povolení. S povolením debugWIRE ale zakážete ISP rozhraní. Pokud pak budete chtít debugWIRE vypnout, tak je potřeba spustit ladění “debug” (libovolného programu) a po rozběhnutí kliknout na Debug -> Disable debugWIRE and close. Teprve pak lze mikrokontrolér opět programovat pomocí ISP. To je ale funkce kterou budete potřebovat jedině pokud se vám podaří k “debuggeru” připojit nějaký jiný mikrokontrolér, tedy když desku “hacknete”.

Poznámka k SAM

Atmel vyrábí hned několik rodin mikrokontrolerů. Kromě AVR, také AVR32 nebo SAM. Rodina SAM je velice široká a jedná se o 32bit mikrokontroléry s jádrem ARM. Aby začátečníkům co nejvíce zjednodušili přechod na tuto řadu mikrokontrolérů, tak zařadil mezi nově vydané “Xplained” desky, také jednu s mikrokontrolérem SAM D10. Ačkoli se jedná o jeden z “nejslabších” typů s jádrem Cortex M0+, tak bude jeho výpočetní výkon nejspíš o poznání vyšš, jak u většiny 8bitových mikrokontrolerů. Avšak takové srovnání není cílem tohoto textu. Jde mi v podstatě o to, vás pouze upozornit, že na trhu je k dostání bezvadný startovací kit pro zájemce o ARMy (opět se pohybuje okolo příjemných 300 kč). Prohlédnout si ho můžete níže na obrázku Obr. 9. Parametry desky jsou podobné jako u Xplained pro ATmega. Piny jsou rozloženy tak, aby byly mimo jiné kompatibilní i s Arduino shieldy a programátor / “debugger” (mDEBG) slouží zároveň jako převodník USB / UART.

 
Obr. 9: SAM D10 Xplained

Obr. 9: SAM D10 Xplained

 

Než se ale vrhnete na programování mikrokontrolerů s jádrem ARM, tak byste měli dobře zvážit, zda to opravdu potřebujete. Většina základních funkcí od zobrazování na displeji, přes blikání LED diodami, či měření různými čidly vás bude stát skoro jistě větší úsilí než na 8bitových platformách. Jinak řečeno: většina “jednoduchých” aplikací, které lze bez komplikací rozběhnout i na AVR, bude na SAMech zdlouhavější a pracnější. Opravdový užitek vám SAM začne přinášet až s aplikacemi, které se na 8bitových mikrokontrolérech programují pracně nebo běží pomalu (hlavně v důsledku jejich nižšího výpočetního výkonu nebo chudších periferií). Teprve potom se vám začne vložené úsilí do zvládnutí 32bit architektury vyplácet. Přirozeně ti z vás, kteří programují pro radost, si s tím nemusí lámat hlavu a mohou se vesele vrhnout do zkoušení. Možná, že se mezi vámi najdou zájemci, pravděpodobně ze “staré školy”, které bude děsit představa náročné SMD montáže. V tom případě vás jistě potěší, že jsou k sehnání mikrokontroléry ve velmi příjemném pouzdře SO-14 přibližně za padesátikorunu. Procesor je tak možné osadit na “redukci” klidně i trafopájkou.

 
Obr. 10: Dvojice Atmelů SAM D09 v příjemné velikosti

Obr. 10: Dvojice Atmelů SAM D09 v příjemné velikosti

 

Snad se vám podaří sehnat příslušný hardware bez zbytečných komplikací a těším se na shledanou u dalších dílů návodu.

Jiné příspěvky v kategorii:

Začínáme s mikrokontroléry ATxmega – Úvod
Začínáme s mikrokontroléry ATxmega – Hardwarové prostředky
 

 
Tajned facebook
 

Za případné chyby v textu, ve zdrojovém kódě, nebo ve schématickém zapojení se omlouváme.
AUTOŘI NEBEROU ŽÁDNOU ODPOVĚDNOST ZA PŘÍPADNÉ ÚJMY NA ZDRAVÍ ČI MAJETKU.