Při brouzdání po čínské AliExpres burze jsem narazil na palcový displej, který mne zaujal cenou, rozměry a možnostmi. Objednal jsem na zkoušku dva kusy a zkusil jsem to zpracovat do ovladače. Problém je velikost displeje, kdy lidi s vadou zraku budou asi mít problémy to číst.
Základní rozměry krabičky zůstaly stejné, jen se to muselo přizpůsobit na jiný typ displeje. Hlavně ovládání displeje přes SPI je něco jiné a dost klíčové. Použití SOFT ovládání SPI je úplně mimo mísu a neskutečně pomalé. Jako vždycky je výsledek závislý na kompromisech parametrů, které jsou občas v naprostém protikladu. Například spotřeba ovladače je přímo závislá na kmitočtu a teda velikosti napájecího napětí. Čím potřebujeme vyšší kmitočet, tím to vyžaduje vyšší napájení a teda spotřeba jde nahoru docela lineárně. Teda kompromis mezi odběrem a rychlostí je dost klíčová záležitost. Zkusil jsem rychlost 8MHz, které potřebuje 3.3 V a odběr je 3mA na procesoru. Zkusil jsem použít 12MHz a už to na 3.3V nefungovalo dobře. Taky spotřeba vyletěla na 5mA a to se mi nelíbilo.
Schéma ovladače:
Zvláštnosti zapojení:
Jak je to udělané:
Protože jsem použil Atmegu328, byla by škoda nevyužít možnosti, které tento obvod poskytuje. Je to vlastně nutné, když chci zachovat nízký odběr a slušné uživatelské prostředí. Asi největší problém byl s napájením pro podsvětlovací diody LED na TFT displej, které si berou opravdu velký proud. Pokud se nechá vývod BLK na VCC, tak je odběr 15mA. Pokud se to sečte s jinými odběry, tak to vyskočí na 18mA a to je dost za hranou použitelnosti. Proto jsem použil PWM a řiditelné podsvícení. Pokud se použije poměr PWM na hodnotách 1:16, tak klesne odběr na 7mA a to spolu všechno dělá 10mA a to je už celkem v normě. To se zabezpečuje přes hard PWM na Timer0, kde se automaticky ovládá pin PD5 a tak je zcela zabráněno blikání displeje při ovládání.
Asi největší změna je v ovládání enkodéru, kde pomalost vykreslování displeje byla daleko za hranici použitelnosti. Musel jsem použít přerušení a celé ovládání enkodéru udělat čisto v něm. Přišel jsem na to, že čím menší je proud na ovládání enkodéru, tím je kratší čas na ustálení zákmitů. Teda proud z pull-up tranzistoru v procesoru je úplně postačující a zákmity nejsou delší než 300uS a to se dá krásně obsloužit a přitom je to stabilní.
Ovládání displeje je celkem jednoduché na seznam instrukcí, ale je velmi divoké v počtu odesílaných bajtů. On se totiž vykresluje každý jeden pixel na displeji a je na to potřeba 2 bajty na každý pixel. Teda je nutné posílat 80 x 160 x 2 bajty na plné zobrazení displeje. Plus k tomu ještě instrukce na změnu barvy a souřadnice pro vykreslování. Teda na každý obrázek třeba odeslat 25 600 bajtů , plus režie okolo toho. Pokud použijeme přenos SPI 4MHz, tak se celkový čas vykreslení pohybuje okolo 100ms na screen. A to je dost problematické, proto všechny důležité věci musí běžet na pozadí, přes přerušení.
Klávesnice je celkem bez problémů, protože to je asi stejně pomalé, jako vykreslováni na displej a teda si to navzájem nepřekáží. Taky tady jsem použil fintu s pull-up tranzistory v procesoru a tak čas ustálení zákmitů je opravdu minimální. Zvláštností je použití až tří portů, teda čtení klávesnice je divočina a dalo dost práce to odladit. Plošný spoj klávesnice je koupený na AliExpres, kde se tato klávesnice nabízí za směšnou cenu spolu s tlačítky a konektory. Původně jsem chtěl použít celou klávesnici 4x4, ale to se nedalo, protože je asi o 4mm širší než krabička. Tak jsem se rozhodl krajní řadu odstřihnout a použít jen klávesnici 4x3.
Přepínání systému Uhlenbrock a Digitrax je softwarové a teda není nutný jumper na plošném spoji. Je to umožněno tím, že je na displeji vidět, který systém je funkční. Tento vývod je použitý na piezo repráčik, pro který zatím nemám využití.
Hodiny se celkem osvědčily a majitelé si je pochvalují a teda jsem je zabudoval i tu. Rozdíl je v tom, že na tomto ovladači je údaj o čase trvale viditelný v prvém řádku. Pokud nejsou hodiny zapojené, tak se zobrazuje 00:00/0. Pokud hodiny pracují, tak je tam například 12:10 /5 a to znamená 12 hodin, 10 minut a zrychlení času, které je teď na hodnotě 5. Výhoda tohoto řešení je v tom, že se všechny hodiny nastavují centrálně, teda není možnost je nastavovat individuálně !!
Rozložení součástek a plošný spoj ze strany součástek.
Manuál:
Ovladač ma dva stavy po zapnutí, kdy při nulové rychlosti se zobrazuje čas, adresa a slot. Při pohnutí nebo stisknutí nějakého prvku se ale změní displej na provozní stav, který při startu naběhne automaticky v případě, že rychlost není nulová. Zobrazí se kompletní údaje, teda čas, rychlost a stavy funkcí. Čas je jednobarevný , rychlost zelená nebo fialová podle směru jízdy a funkce se zobrazují černě při nenastavení a fialově při aktivaci. Rychlost se taky zobrazuje graficky podélným pruhem v barvě směru, vedle číselného údaje o rychlosti.
Startovací menu na displeji
Vidíme stav hodin, použitá adresa a vybraný slot. Je docela zajímavé tam dat obrázek loko, ku kterému je ovladač přiřazený, ale to je programátorský oříšek, protože to vyžaduje znalosti. Upravovat RGB888 na BGR565 a ještě zmenšit na velikost 32x80 pixel tak, aby to bylo pěkné je docela “zábava“. Navíc se to musí nahrát do FLASH paměti a to jde jedině přes programátor. Zcela určitě to nejde na počkání !!
Provozní menu
Vidíme hodiny, rychlost, funkce, centrála Digitrax. Na posledním obrázku jsou zapnuté funkce F1, F2, F9, F19.
Ovládací prvky
Jsou vlastně jen dva, enkodér a klávesnice.
Ty jsou ale mezi sebou svázané a na některé funkce se musí použít současně. Enkodér se používá na změnu rychlosti a tlačítko na něm má dvě funkce v normálním módu. První stisknutí zastaví loko podle rychlostní křivky a druhé vyvolá Em. stop a otočí směr jízdy. Klávesnice obsluhuje v normálním módu funkce a přes prefix +10 a +20 ovládá funkce F10 až F19 a F20 až F28.
Funkce F29 slouží na vymazání všech funkcí společně.
Další funkce jsou přístupné, jen když je rychlost nulová !!
Pokud se podrží tlačítko +10 a stiskne se enkodér, tak se vyvolá ovládání jasu displeje. Je možné ho nastavit od 4 do 80, teda od nejmenšího po nejsilnější jas. Hodnoty nad 80 jsem zablokoval, protože displej už více nesvítí a jen se zvyšuje odběr proudu. Stav volby podsvícení je indikovaný žlutou barvou displeje. Jas se nastavuje otáčením enkodéru a ukončí stisknutím enkodéru. Vždy se začíná na hodnotě 4.
Pokud se podrží tlačítko +20 a stiskne se enkodér, tak se odhlásí aktuální adresa loko a vyvolá se stav Dispatch. To se indikuje červenou barvou displeje a nápisem DISPATCH. Tento stav se zruší samotným stisknutím enkodéru, kdy se převezme nová adresa loko ze zásobníku v centrále anebo podržením tlačítka enkodéru a zasunutím kabelu, kdy se nastaví tovární hodnoty ovladače a převezme se poslední použitá adresa.
Pokud se podrží tlačítko „0“ a stiskne se enkodér, tak se změní vysílání funkcí F9 až F28 pro centrálu Digitrax nebo Uhlenbrock a naopak. Indikuje se to změnou modrého písmene U nebo D na konci čtvrtého řádku.
Vidíme volby Dispatch, Jas, Uhlenbrock a prefix +10 a Digitrax a prefix +20.
Vyrobeny dva kusy.
K tomuto článku nebol doposiaľ priradený žiadny komentár!