Funguje báječně, ale neseje (2. díl)

Minule jsme „na vědecké bázi“ zapínali procesorovou desku robota tak, aby nám při případné chybě neshořela plamenem. Dnes předpokládejme, že deska neshořela, chvíli čicháme, nic nesmrdí a tak jdeme dále.

4. Kontrola napájení procesoru *)

Ano, určitě si myslíte, že už prudím příliš, ale vezměte multimetr a změřte napětí přímo na napájecích pinech procesoru. Napětí musí odpovídat tomu, které váš procesor používá, tedy nejspíše 5V; u super moderních to může být i 3,3V nebo 1,8V. Jaké napájecí napětí to má být, musíte mít zjištěné předem. Naměřím-li na pinech AVR místo napájecího napětí 5V jen 1,8V, je to špatně.

5. Kontrola pinu RESET **)

Procesor je taky jen člověk, takže po zapojení napájení je pěkně zmatený a hradla uvnitř má přeházená. Aby se vše srovnalo, je po celém procesoru rozveden signál RESET, který uvede celý hardware do počátečního – definovaného – stavu. V praxi je signál RESET vyveden ven na pin a my na něj připojujeme odpor a kondenzátor, které tvoří RC článek. Ten způsobí, že signál RESET má po zapnutí napájení malinké zpoždění, během kterého se napájecí napětí stihne stabilizovat. Procesory se dělí na dvě skupiny. Jedna má signál RESET aktivní když je LOW. Ty poznáme podle toho, že výrobce doporučuje připojit kondenzátor na zem (třeba AVR). A pak samozřejmě (obráceně) máme procesory, kde je aktivní signál HIGH což se pozná podle toho, že kondenzátor je připojený na napájení.

Takže zapneme napájení, počkáme pár vteřin a změříme napětí na pinu RESET.  Je takové jaké má být? To znamená, pokud máme mít kondenzátor na zem, musí mít 5V, pokud máme kondenzátor na 5V musí mít 0V.

Pokud tomu tak není, opět nepokračujeme dále, dokud nenajdeme příčinu (většinou to bývá nějaký zkrat). Pokračovat dále ani nemá smysl, protože procesor s aktivovaným signálem RESET je „v bezvědomí“ a na nic nereaguje.

Pokud jste došli až sem a (zatím) všechno funguje, máme nejjednodušší část robota – to jest napájení procesoru, jeho stabilizaci a signál RESET – v pořádku a můžeme se začít připravovat na testování nejjednodušších prográmků.

6. Komunikace s procesorem robota

Pokud chceme začít robota programovat, úplné minimum je, jestli se můžu z notebooku s robotem vůbec spojit a jestli vůbec budu moci nahrát do robota software. Takže k robotu zatím nepřipojuju motory (aby mi chybou softwaru někam neujel a nerozbil se) pouze zapnu řídící desku. Připojím programovací adaptér a snažím se PŘEČÍST co v procesoru momentálně je. Picaxe, Arduino, AVR, PICky, ARMy všechny mají způsob jak přečíst obsah paměti procesoru, někdy se tato fukce skrývá pod heslem „Software Verification“ nebo „Program Verification“. Vašim úkolem je zjistit, jak se to ve Vašem procesoru a ve Vašem softwaru dělá a zkusit to. Pokud to dopadne dobře, z nenaprogramovaného procesoru většinu vyčtete buď samé hodnoty 255 v hexadecimálním kódu 0xFF nebo vzácněji samé nuly. Cokoliv přečtete je dobře. U Arduina to může být kód bootloaderu. Prušvih je pokud programátor hlásí, že se s procesorem nespojil . Pak jsou dvě možnosti.

7. Programovací piny nemají kontakt / mají zkrat

Prozkoumejte cestu od konektoru, ke kterému připojujete programátor, k pinům procesoru kam tyto signály vedou. Je vhodné je multimetrem „propískat“ nebo alespoň změřit odpor, který by měl být maličký (menší než 1 ohm). Prozkoumat musíte celou cestu dat. Pokud v cestě dat stojí převodník USB <-> Sériový port, který je přímo na desce, máte to složitější, protože musíte zjistit, jestli funguje i on. Nejlépe se to dělá osciloskopem, pokud ho nemáte, použijte „osciloskop chudých“ což je vysoce svítivá LED dioda zapojená přes odpor 10kOhm. Tu připojte na zem a odporem se dotýkejte vstupních a výstupních pinů převodníku a zkoušejte procesor „přečíst“. Dobré je když LEDka poblikává, špatné je když trvale svítí (na pinech je trvale HIGH) nebo když trvale nesvítí (na pinech je trvale LOW).

Co jsme doposud probrali vypadá jako skutečně obrovská „pruda“. Ve skutečnosti každá z kontrol je jen na pár vteřin a máte jistotu, že doposud jsme neudělali žádnou botu, která na nás „bude číhat“ až se nám to bude nejméně hodit.

8. Blikáme LEDkou

Jelikož máme k procesoru (přes srážecí odpor) připojenou LEDku je teď další krok jednoduchý a to napsání programu ve stylu:

10 ROZSVIŤ       ;REM u nás na Moravě se říká „ROŽNI“ ale Pražáci si myslí,
                 ;REM že to je rozkaz ke grilování masa
                 ;REM P.S. my taky nesnášíme slovo „VOKNO“ ;-))
20 ČEKEJ SEKUNDU
30 ZHASNI
40 ČEKEJ SEKUNDU
50 GOTO 10

Schválně používám tuhle parodii na stařičký Basic. Naprogramovat blikání totiž závisí na konkrétním procesoru a programovacím jazyku. Sám neumím programovat třeba PICAXE. Pokud uděláte někde chybu, bude jednoduché ji odhalit.

LEDka nesvítí –> chyba je někde před řádkem 10. LEDka nechce zhasnout –> chyba je buď v zaseknuté proceduře ZHASNI nebo ve špatně napsané proceduře ČEKEJ SEKUNDU.

Jak to poznám? Změním prográmek na:

10 ČEKEJ SEKUNDU
20 ROŽNI
30 ČEKEJ SEKUNDU
40 ZHASNI
50 ČEKEJ SEKUNDU
60 GOTO 10

Pokud LEDka „nerožne“, je chyba v proceduře ČEKEJ SEKUNDU. Pokud nezhasne, je chyba v proceduře ZHASNI, což je mimochodem krystalická ukázka principu „rozděl a panuj“, protože jsme dvě místa možné chyby od sebe oddělili, abychom poznali, které dělá problémy.

Dnešní denní příděl jsme vypotřebovali, takže za domácí úkol si cvičně naprogramujte vyblikávání jména robota morseovkou a pokračujeme příště.


Poznámka:

*) Některé procesory – například PICAXE – pracují v širokém rozsahu napájecích napětí. U moderních typů Microchip PIC a od nich odvozených PICAXE je možno použít napájecí napětí 1,8 až 5V.

**) Neplatí u všech procesorů. Například žádný z v současné době vyráběných PICAXE nemá RESET vyveden a resetuje se buď přerušením napájení, nebo programově.