VL Discovery seriál stále žije, i když vám to už možná tak nepřipadá. Ale teď tu máte další díl a týká se přímého pohonu recyklovaných LCD zobrazovačů z kalkulaček. Určitě jich také máte několik a třeba nevíte jak na ně - a zde vám vypomůže kit s STM32F mcu.

Displeje

Ve všech zde probíraných případech se budeme bavit o číslicových (sedmisegmentových) zobrazovačích bez vlastního řadiče. Co si pod tím představuji, vyjasním za chvíli. Jak jistě víte, tak LCD displejů můžete najít a zrecyklovat mnoho různých typů. Jednak jsou obsahem různých měřidel, digitálních stupnic FM rádií ale zejména kalkulaček. Všechny mají nějaké výhody na nevýhody. LCD z měřidel jsou prima, ale obsahují obvykle jen 3+1/2 číslice (tedy maximální zobrazitelná hodnota je 1.9.9.), displeje z rádií mají větší rozsah (obvykle 1.9.9.9.9.) ale obsahují spousta dalších pro nás těžko využitelných textů (např. STEREO, AFC, VOLUME, atd.) - což vede k tomu, že uprostřed velkého displeje jsou malá čísla. Nejlepší pro nás jsou obvykle displeje z kalkulaček, ale ty mají také háček - obtížné připojení. A to nejen signálové ale též mechanické. Obvykle je displej totiž bez použitelného připojení formou pájecích pinů a je připojen buď pomocí elestomeru - zebra strip nebo pomocí thermal connect tape. Nejlépe si to ukážeme na příkladu.





Na prvním obrázku je vidět vpravo nahoře displej z rádia - ty obvykle mívají pájecí kontakty. Vlevo nahoře je (vzhůru nohami) 4+1/2 místný displej (také se dá dobře zapájet) a pod ním dva displeje z kalkulačky (oba jsou stejné, jen ten nastojato je vzhůru nohama). Oba displeje jsou opatřeny zebra strip elastomerovou páskou, která po přitisknutí displeje na plošný spoj provede elektrické propojení displeje s plošným spojem. Doporučuji plošný spoj pro tento způsob připojení postříbřit lázní AG-2, neboť výsledky pak jsou výrazně lepší a elastomer před přitisknutím důkladně odmastěte lihem. Pro trvale kvalitní připojení je třeba aby plošný spoj by trvale namáčknut na elastomer, což nejlépe zařídíte kusem pěnové hmoty a přitažením plošného spoje proti rámečku ve kterém je displej. Příklad redukce na lámací konektorovou lištu je vidět pod displejem.





Na dalším obrázku je vidět displej, který jsou použil v tomto konkrétním dílu seriálu. Jde též o kalkulačkový displej, ale je připojen pomocí thermal tape. Občas můžete mít štěstí a narazíte v kalkulačce na delší pruh této pásky (jinak se dá koupit za pouze v metráži z Číny) a tu můžete pak použít propojení více displejů, když jí šikovně rozstříháte. Pásku kolmo oříznete, odstraníte krycí průhlednou izolepu, lihem omejete zbytky lepidla na pásce se spoji, přiložíte k plošnému spoji (či displeji na druhé straně) a pájkou ohřátou na cca 140-150C thermal connect tape připevníte na plošný spoj. Umělá hmota se pod pájkou roztéká a grafit se propojí na měděné spoje na PCB. Spoj pak zafixujete kvalitnější průhlednou páskou proti mechanickému namáhání.

Tím by bylo vyřešeno připevnění mechanické, ale zdaleka ještě legrace nekončí - ani generace signálů pro displej není jednoduchá. Setkal jsem se s několika typy kalkulačkových displejů a nejobvyklejší typ (použitý také v tomto dílu) má připojení pomocí 27-mi vodičů.

Konektor:
Pin č. 1 - Backplane 0
Pin č. 2 - Backplane 1
Pin č. 3 - Seg1A
Pin č. 4 - Seg1B
Pin č. 5 - Seg1C
Pin č. 6 - Seg2A
...
Pin č. 27- Backplane 2

Uvedené schéma je dle mých praktických zkušeností shodné pro většinu běžných 8-mi znakových jednořádkových LCD displejů z kalkulaček (úplně vlevo je M/E). Z konektoru také vyplývá, že pro využití všech 8-mi zobrazovaných číslic potřebujete celkem 28 GPIO pinů - ale i ten nejmenší 48-mi vývodový Value Line mcu, má na takovýto účel GPIO pinů celkem dost.


Signály

Backplane je společný spoj pro všechny znaky na displeji a Seg1A,B a C jsou tři vodiče přináležící vždy jen jednomu znaku (zde prvnímu znaku) na displeji. Situace je graficky znázorněna na dalším obrázku.



Jistě víte, že LCD zobrazovač obsahuje tekuté krystaly (dlouhé molekuly), které se dají pomocí elektrického pole nastavit a podle toho světlo prochází nebo ne. A protože na zadní straně kalkulačkových displejů je hliníková odrazná fólie, tak v případě neprůchodnosti světla se nám jeví dané místo tmavé. Problém je v tom, že jednak nám dlouhodobé působení pole v jednom směru vyvolá elektrolýzu a tím postupně nevratné poškození displeje, takže displej musíme "pohánět" střídavým napětím a za druhé vlivem pole se nám jednotlivé backplanes ovlivňují. Finta je tedy v tom, že jednotlivé backplanes jsou ve stavu vysoké impedance a pouze daný backplane (který se právě zobrazuje) je připojen na napětí (přesněji. střídavě se připojuje na kladné a nulové napětí). Ty segmenty, které nechceme zobrazovat musíme připojit na stejný potenciál jako má backplane, ty které mají být vidět na signál opačného potenciálu. Následuje příklad signálů pro zobrazení pouze desetinné tečky.



Pokud se podíváte na průběh pečlivě, tak vidíte, že pouze S1C signál je na chvíli v protifázi a to proti signálu backplane BP0 a při porovnání s předcházejícím obrázkem zobrazujícím které segmenty zobrazovaného znaku jsou připojeny kam, tak uvidíte že když budou v protifázi pouze signály PB0 a S1C, tak jediný segment v daném znaku, který ztmavne je desetinná tečka.


Vlastní program

Pokud výše uvedené znáte, tak už vlastní napsání programu není žádná velká věda. Sestavil jsem si tabulku jednotlivých signálů pro číslice 0-9.

uint8_t cislo[10][3][3] =
  { {{0,0,1}, {0,1,0}, {0,0,1}}, /* 0 */
  {{1,0,1}, {1,1,0}, {1,1,1}}, /* 1 */
  {{0,1,1}, {0,0,0}, {1,0,1}}, /* 2 */
  {{0,0,1}, {1,0,0}, {1,0,1}}, /* 3 */
  {{1,0,1}, {1,0,1}, {0,1,1}}, /* 4 */
  {{0,0,1}, {1,0,1}, {0,0,1}}, /* 5 */
  {{0,0,1}, {0,0,1}, {0,0,1}}, /* 6 */
  {{1,0,1}, {1,1,0}, {1,0,1}}, /* 7 */
  {{0,0,1}, {0,0,0}, {0,0,1}}, /* 8 */
  {{1,0,1}, {1,0,0}, {0,0,1}}}; /* 9 */


A pomocí údajů z této tabulky nastavuji pro danou číslici průběh signálů.


for (i=0;i<0xFF;i++){
   Set_Backplanes(10)// vse na vstup
   Set_Segments(cislice, backplane, 0);
   //backplane
   GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
   Set_Backplanes(backplane);
   Delay(0xFFF);
   Set_Backplanes(10)//vse na vstup
   Set_Segments(cislice, backplane, 1);  // 1=inverze
   GPIO_SetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
   Set_Backplanes(backplane);
   Delay(0xFFF);
   backplane +=1;               // dalsi backplane
   if (backplane == 3) backplane = 0;
   }
cislice +=1;                            // zobrazime postupně cislice 0-9
if (cislice == 10) cislice = 0;


Funkce Set_Backplanes(n), pro n=10 nastaví všechny backplanes do vysoké impedance (plovoucí vstup), pro n=0 až 2 nastaví jako výstupní s pull upem vždy příslušný GPIO pin pro daný backplane.
Funkce Set_Segments(n,b,i) pro dané n (číslice 0 až 9 - na písmena už jsem byl unavený, to můžete zkust sami v rámci pokusů) a daný backplane b nastaví buď soufázový signál nebo protifázi.
Funkcemi GPIO_ResetBits a GPIO_SetBits nastavuji signál pro backplane i pro GPIO piny, které jsou nastaveny na vstup, ničemu to nevadí a zjednoduší to program.


Závěr

Použití přímo řízených číslicových LCD zobrazovačů není tak triviální jako použití displejů s vlastním řadičem, zabere víc místa v paměti mcu, více GPIO pinů (pokud nepoužijete nějaký SIPO obvod, tak na každý zobrazovaný znak 3 piny) ale výhodou je velice nízká spotřeba těchto displejů. Jinak řečeno - vaše zařízení může na tužkovou baterii pracovat i s trvalým zobrazováním, mnoho měsíců. Takže pokud máte nějakou starší rozbitou kalkulačku, tak můžete začít experimentovat.


Odkazy

STM32-VL DISCOVERY popis je zde.
STM32-VL Discovery 2. (další popis, osobní poznatky) je zde.
Začínáme s STM32 VL Discovery kitem naleznete zde.
Začínáme s STM32 VL Discovery kitem _2. naleznete zde.
Začínáme s STM32 VL Discovery kitem _3. naleznete zde.
Začínáme s STM32 VL Discovery kitem _4. naleznete zde.
Začínáme s STM32 VL Discovery kitem _5. naleznete zde.
Začínáme s STM32 VL Discovery kitem _6. naleznete zde. (blikání LED)
Začínáme s STM32 VL Discovery kitem _7. naleznete zde. (ladění)
Začínáme s STM32 VL Discovery kitem _8. naleznete zde. (využití SysTick)
Začínáme s STM32 VL Discovery kitem _9. naleznete zde. (změna CLK)
Začínáme s STM32 VL Discovery kitem 10. naleznete zde. (kontaktní pole)
Začínáme s STM32 VL Discovery kitem 11. naleznete zde. (PWM)
Začínáme s STM32 VL Discovery kitem 12. naleznete zde. (watchdog)
Začínáme s STM32 VL Discovery kitem 13. naleznete zde. (externí přerušení)
Začínáme s STM32 VL Discovery kitem 14. naleznete zde. (LCD)
Začínáme s STM32 VL Discovery kitem 15. naleznete zde. (ADC)
Začínáme s STM32 VL Discovery kitem 16. naleznete zde. (Teplotní čidlo)
Začínáme s STM32 VL Discovery kitem 17. naleznete zde. (klávesnice PS/2)
Začínáme s STM32 VL Discovery kitem 18. naleznete zde. (správná verze LCD.c)
Začínáme s STM32 VL Discovery kitem 19. naleznete zde. (DAC převodník)
Začínáme s STM32 VL Discovery kitem 20. naleznete zde. (DAC s přerušením)
Začínáme s STM32 VL Discovery kitem 21. naleznete zde. (DMA v paměti)
Začínáme s STM32 VL Discovery kitem 22. naleznete zde. (DMA s DAC)
Začínáme s STM32 VL Discovery kitem 23. naleznete zde. (RTC)
Začínáme s STM32 VL Discovery kitem 24. naleznete zde. (RTOS-přehled)
Začínáme s STM32 VL Discovery kitem 25. naleznete zde. (USART-přerušení)
Začínáme s STM32 VL Discovery kitem 26. naleznete zde. (USART-přesměrování vstupů a výstupů)
Začínáme s STM32 VL Discovery kitem 27. naleznete zde. (Assembler vkládaný do C kódu)
Začínáme s STM32 VL Discovery kitem 28. naleznete zde. (Vnořované přerušení)

Zazipovaný projekt k tomuto dílu seriálu naleznete zde.

Referenční manuál k STM32F100 v pdf si můžete stáhnout na webu ST.COM. Stahujte RefMan je pro Value Line typ mcu! Naklikejte si to zde.
Tamtéž si můžete stáhnout Datasheet pro Value Line řadu.
The Insider's Guide to the STM32 ARM® based Microcontroller (Hitex) zde.
The Definitive Guide To The ARM Cortex M3 si můžete stáhnout zde.