Toto je starší verze dokumentu!
Individuální projekt MPOA - zimní semestr 2014/2015.
Bludiště s kuličkou — Využijte RGB LED matici. Jedna barva LED reprezentuje kuličku, druhá cíl, třetí stěny. Nakláněním desky se bude kulička pohybovat k okraji a zastavovat se o stěny. Na závěr se na LED matici zobrazí počet sekund, jak dlouho trvalo hráči dostat kuličku do cíle.
RGB LED matice není v našem konkrétním případě tak docela RGB, neboť modrá složka chybí. Dostupné barvy jsou tedy červená, zelená a oranžová. Více barev naštěstí není potřeba, takže kulička bude mít zelenou barvu, cíl bude červený a stěny bludiště budou, kromě okrajů LED matice, reprezentovat oranžově svítící LED. Stěn využijeme proto, že matice formátu 8×8 LED je pro účel bludiště i tak malá, přičemž rozsvícením okrajů v oranžové bychom získali pouhých 6×6, což už je na nějakou zajímavější trasu zoufale málo.
Po dosažení cíle vypíše matice zelenou barvou čas, za který hráč prošel bludištěm (ve formátu 123s).
Základem celé aplikace je vývojová deska KL25Z, samozřejmě osazená pro propojení s LED maticí. Obrázky níže zachycují osazenou desku
a použitou LED matici 8×8.
Pro propojení obou hardwarových částí slouží převodník. Ten byl původně navržen pro jinou vývojovou desku, takže bylo třeba použít ještě jednu DPS pro přepolohování pinů k propojení s KL25Z. Stránka o převodníku z původního převodníku na vývojovou desku je ZDE. Deska je navržena jako oboustranná s prokovy v místě pinů, takže pájení vyžaduje promyšlení postupu a trochu trpělivosti. Já doporučuji (samozřejmě po navrtání) tento postup.
Výsledek ukazují obrázky níže.
Podle vyrobeného převodníku slouží k řízení LED matice piny PTC 0-13, 16, 17 a PTB 0-2 (přesný popis v sekci Software). Podle ROZPISU je ovšem jeden z pinů pro zvolený účel poněkud problémový. Jedná se o pin PTC1, který slouží nejen jako výstup, ale také jako RTC Clock vstup (RTC_CLKIN), který očekává příchozí hodinový signál.
Výsledkem je, že při použití zapojení v sekci Hardware bude druhá LED ve spodním řádku stále svítit zeleně, nejen v případě, že bude firmware čistý, ale i tehdy, kdy nahrajeme software, který ji přímo přikáže vypnout (PTC1 na 1). To by se teoreticky dalo v případě bludiště obejít, problém je však většího rozsahu. Pokud rozsvítíme libovolnou jinou LED v poli (např. na pozici 6. sloupec a 6. řádek), bude současně svítit zeleně i LED ve druhém sloupci a v odpovídajícím řádku (na pozici 2. sloupec a 6. řádek). Rozsvítíme-li tedy první, třetí nebo libovolný vyšší sloupec kompletní, bude svítit zeleně i celý druhý sloupec. To už obejít nelze.
Podle stránek mbed se jedná o známou věc. Vzhledem k tomu, že RTC ClockIn nelze softwarově vypnout, zbývají dvě možnosti, jak problém vyřešit. První možnost je modifikovat samotnou KL25Z tak, že odpájíme nulový rezistor R24 (viz obrázek), který připojuje RTC obvod. Tato varianta je častým závěrem diskuzí na mbed fórech při řešení této konkrétní situace.
Metoda je ovšem zbytečně destruktivní když uvážíme, že máme k dispozici převodník pro matici, tedy v podstatě jednoúčelový hardware, zatímco RTC ClockIn by se u jiné aplikace ještě mohl hodit. Navíc by pak převodník fungoval jenom na upraveném kitu, což je zbytečná komplikace navíc. Proto byla zvolena modifikace převodníkové DPS a pin druhé zelené LED vedoucí na PTC1 byl drátkem přepojen na nevyužitý PTB3. Pin se nachází o dvě pozice níže v tom samém bloku pinů (viz ROZPIS), takže úprava není složitá a nevyžaduje ani změnu postupu pájení. Pro výrobu dalších převodníků lze změnu zahrnout do návrhu, modifikace DPS nevyžaduje kromě posunu jedné cesty vůbec nic navíc.
Pro úplnost lze dodat, že s použitím této modifikace po obnovení firmwaru slabě zeleně svítí pro změnu první LED ve spodním řádku, ovšem tohle již lze softwarovým vypnutím napravit a žádné pozdější komplikace to nezpůsobuje.
Při uvažování nutné hardwarové modifikace použijeme k řízení LED matice následující piny:
RED řádek - PTC 8, 9, 10, 11, 12, 13, 16, 17,
GREEN řádek - PTC 0, PTB 3, PTC 2, 3, 4, 5, 6, 7,
Řízení sloupců - PTB 0, 1, 2.
Prvním krokem po startu je uzemnit v obou barvách piny pro LED reprezentující stěny. Současně zobrazíme kuličku a cíl. LED reprezentující stěnu bude zapsána v „Seznamu stěn“. Jakmile akcelerometr vrátí údaj o náklonu některým směrem, začne se počítat čas. Náklon mění souřadnice kuličky a současně vyhodnocuje, jestli změna nekoliduje se zablokovanou pozicí patřící stěně. Pokud dojde ke kolizi, „pohyb“ se neuskuteční. Po splynutí souřadnic kuličky se souřadnicemi cíle se časomíra zastaví a údaj se vypíše na matici.