česky english Vítejte, dnes je středa 17. duben 2024

Jak na ovládání grafického LCD pomocí AVR

DPS 5/2011 | Články
Autor: Ondřej Pavelka

V předchozím vydání odborného časopisu DPS AZ jsme se seznámili s vývojovým kitem AVRboard03 [1], který slouží k vývoji aplikací pro mikrokontroléry AVR Atmel Mega16 až 644. Nyní už víme, jak vývojový kit vypadá, jaké obsahuje periférie a hlavně, jak se programuje. Víme, že můžeme použít klasické ISP10 SPI rozhraní, JTAG rozhraní nebo můžeme využít naprogramovaného bootloaderu a vystačit pouze s hardwarem implementovaným přímo na desce kitu AVRboard03. V následujícím článku se seznámíme s rozšířením tohoto kitu o externí zařízení. Bude se jednat o grafický barevný displej o rozměrech 132×132 včetně pětisměrného (4 směry + stisk) křížového ovladače.

Výkonný pomocník pro ovládání LCD – PFC8833

Jak už písmena v názvu typu řadiče napovídají, půjde o obvod navrhnutý firmou Philips Semiconductor. Jedná se o nízkopříkonový jednočipový řadič barevného STN displeje o velikosti 132 řádků a 132 RGB sloupců. Všechny nezbytné ovládací funkce displeje jsou integrovány na tomto jednočipovém řadiči, včetně zobrazovací paměti RAM o velikosti 209 kbit (132×12 bit×132). Obvod PFC8833 využívá techniku vícenásobného řádkového adresování, tzv. Multiple Row Addressing (MRA), pro dosažení nejlepšího zobrazovacího výkonu a vlastností a zároveň nejnižší spotřeby energie. Obvod PCF8833 nabízí 2 typy rozhraní pro připojení mikrokontrolérů – jedno rozhraní kompatibilní se systémem 8080 (paralelní 8 bitová sběrnice a řídicí signály pro čtení a zápis dat) a druhé sériové rozhraní (3 vodičová SPI sběrnice). Blokové schéma zapojení obvodu PCF 8833 je na obr. 1.

Jak na ovládání grafického LCD pomocí AVR 1.jpg

Obr. 1 Blokové schéma zapojení obvodu PCF 8833

Jak již bylo zmíněno, řadič komunikuje s nadřízeným řídicím systémem buď pomocí 8 bitové paralelní sběrnice, nebo třídrátové sériové linky. Zpracování instrukcí a posílání dat nevyžaduje zdroj hodinového kmitočtu. Taktovací signál pro displej a hodinový signál pro rozhraní řadiče jsou navzájem nezávislé. Taktovací hodinový signál pro displej je odvozen z vnitřního oscilátoru.

Řadič PCF8833 nabízí 2 způsoby přístupu – jednak jako tzv. „operační“ mód, tedy zadávání instrukcí pro řadič, a jednak přímý přístup do zobrazovací paměti RAM. Protože se přímý přístup do RAM paměti vyskytuje častěji, pro dosažení větší efektivity tohoto přístupu je zavedeno automatické zvyšování adresového ukazatele.

Existují tři typy instrukcí pro řadič: pro nastavení konfigurace displeje, pro nastavení X a Y adresy a ostatní. Instrukce jsou osmibitové, tedy v rozsahu 0x00 až 0xFF. Instrukce v intervalu 0x00 až 0xAF, které nejsou výrobcem definovány a instrukce 0xDD mají stejný efekt jako instrukce 0x00, tedy NOP (No OPeration). Příkazy v rozsahu 0xB0 až 0xB9 a 0xDE až 0xFF jsou zakázané.

Grafický displeje AND-Graph132

Parametry grafického displeje:

  • rozlišení displeje 132×132 bodů
  • počet zobrazitelných barev – 4096
  • řídicí kontrolér PCF8833
  • napájení displeje 5 V nebo 3,3 V
  • komunikace s nadřazeným systémem – sběrnice SPI
  • odběr proudu 12 mA bez podsvětlení nebo 70 mA se zapnutým podsvětlením
  • pětisměrový křížový ovladač – joystick (4 směry + stisknutí)
  • možnost mechanického uchycení displeje pomocí 4 šroubů M3
  • rozměry 57×37 mm.

Jak na ovládání grafického LCD pomocí AVR 2.jpg

Obr. 2 Schéma zapojení displeje

Schéma zapojení displeje je na obr. 2. Nedílnou součástí destičky s displejem je také pětisměrný křížový ovladač, kde pátým směrem rozumíme detekci stisku ovladače. Ze zapojení je zřejmé, že můžeme použít dva způsoby čtení aktuálního stavu. Buď přímé čtení signálů, které se připojují na zemní potenciál; pak budeme potřebovat snímat 5 signálů, nebo využijeme předpřipraveného odporového děliče, který umožňuje převést aktuálně stisknutý směr na napětí. V tomto případě můžeme pro připojení celého ovladače použít pouze jeden vodič. V tabulce 1 jsou uvedena napětí odpovídající příslušným směrům při napájení 5 V.

Jak na ovládání grafického LCD pomocí AVR - tab.1

Tabulka 1

Dalším elektronickým blokem, který rozpoznáme, je stabilizátor napájecího napětí 3,3 V z 5 V. Jelikož je displej primárně určen k připojení k vývojovému kitu AVRboard03, který pracuje s napájecím napětím 5 V, obsahuje právě tento stabilizátor. Na spodní straně plošného spoje displeje je ovšem propojka, kterou můžeme tento stabilizátor „obejít“, vyřadit z činnosti, pokud začleňujeme modul displeje do zařízení, které pracuje standardně s 3,3 V napájením. Ačkoli je displej napájen stále 3,3 V, k řídicím signálům můžeme připojit 5V logiku – na schématu jsou vidět ochranné diody spolu s pull-up rezistory zabezpečujícími převod napěťových úrovní.

Posledním obvodem je spínaný měnič napětí z 5 V (3,3 V) na 7 V. Toto napětí je použito pro napájení podsvětlovacích LED diod. Spínání podsvětlení – signál BL – ovládá tranzistor připojující katody LED na zemní potenciál. Přivedením napětí 3,3–5 V na tento signál zapneme podsvětlení displeje. Proudová spotřeba tak vzroste z cca 12 mA na 70 mA.

Co vše budeme potřebovat?

Pro zdárný pokus o nastavení barevného displeje s kitem AVRboard03 v minimální konfiguraci budeme potřebovat následující díly a moduly:

  • vývojový kit AVRboard03 [2] osazený ATmega16, ATmega32 nebo ATmega644p
  • modul grafického barevného LCD displeje s řadičem PCF8833[2]
  • min. 7 ks propojovacích vodičů [2]
  • programovací prostředí BASCOM[3] [4] nebo WinAVR (AVRGCC)[7].

Pro ovládání displeje jsou připraveny knihovny v programovacích jazycích BASIC i C. Jelikož je vývojový kit určen převážně pro začátečníky, zaměříme se dnes na uvedení příkladu pro ovládání barevného displeje právě v jazyku Basic a programovacím prostředí BASCOM, které obsahuje již připravenou knihovnu pro řadič PCF8833 a vytvoření programu, který nám displej oživí, bude tak otázka pár minut.

Jak na ovládání grafického LCD pomocí AVR - ZK

Předpokládám, že máte kit AVRboard03 připravený, tedy včetně bootloaderu. Pro minimalizaci nákladů nebudeme používat externí programátor (samozřejmě můžete), ale využijeme právě bootloaderu a programu AND-Load, který s tímto bootloaderem spolupracuje.

Nejdříve si nastavíme prostředí BASCOMu. Kdo již prostředí používá, ten může tento odstavec přeskočit. Předpokládejme, že máte BASCOM čerstvě nainstalovaný. Jediný krok je nastavení programátoru. Ze stránek podpory AVRboard03 kitu [5] si stáhněte program AND-Load. Uložte ho na počítači do známé složky. Nyní otevřete v prostředí BASCOMu v hlavním menu „Options“ -> “Programmer” a měl by se zobrazit formulář jako na obr. 3. Zvolíte typ programátoru „External programmer“, v záložce „Other“ a řádku „Program“ najdete umístění uloženého programu ANDLoad a do volby „Parameter“ napíšete

Jak na ovládání grafického LCD pomocí AVR 3.jpg

Obr. 3 Nastavení prostředí BASCOMu

„-c COMx –h {File}“ a zaškrtnete volbu „Use HEX file“. Za „x“ v parametru COM zvolíte číslo COM portu, kde máte nainstalovaný vývojový kit AVRboard03. Toto číslo sériového portu (rozhraní) můžete zjistit ve správci zařízení (Start->Settings-> Control Panel->System->Hardware->Device Manager) – obr. 4. Kit AVRboard03 bude pravděpodobně pojmenován jako „USB Serial Port (COM x)“.

Jak na ovládání grafického LCD pomocí AVR 4.jpg

Obr. 4 Správce zařízení

V tuto chvíli je prostředí připraveno, kit připojen, propojíme sedmi kablíky grafický displej s vývojovým kitem. Příklad v Basicu je připraven pro připojení displeje k portu B mikrokontroléru. V tabulce 2 je uvedeno propojení signálů.

Jak na ovládání grafického LCD pomocí AVR - tab.2

Tabulka 2

Po zapnutí napájení kitu se musí zapnout podsvětlení displeje. Samotný displej ještě nic pochopitelně ukazovat nebude. Nyní buď přepište uvedený zdrojový kód, nebo si ho stáhněte z [5].

Nyní krátce ke kódu. Úvodní část s příkazy začínajícími na „$“ slouží jako tzv. direktivy překladače a nastavují podmínky překladu. Podstatná je direktiva $lib=“lcd-pcf8833.lbx”, kterou překladači oznamujeme využití knihovny pro řadič PCF8833 a direktiva $regfile=“m32def.dat“ oznamující překladači výsledný kód pro AVR ATmega32. Tuto direktivu je nutné upravit podle typu mikrokontroléru, který je ve vývojovém kitu AVRboard03 osazen. Dále jsou uvedeny definice barev a začíná podstatná část programu – nastavení displeje. Prvním příkazem 0x36 (Memory data access control) definujeme podmínky přístupu do RAM paměti displeje. Podrobnosti o příkazu najdete v datasheetu [5], pouze ve zkratce – hodnotou 0xD0 nastavíme zrcadlově převrácené zobrazení v osách X i Y (vyplývá z orientace displeje), do RAM budeme zapisovat v X ose a nastavíme adresování řádků od spodu nahoru. Příkazem 0x25 a následným parametrem 73 nastavíme kontrast displeje, příkaz 0xBF zapne teplotní kompenzaci VLCD a příkazem 0x29 displej zapneme. Displej pomocí CLS smažeme, dále nastavíme jeden ze dvou fontů, které nám obsluha knihovny nabízí a provedeme výpisy na displej. Příkaz LCDAT vypíše na zvolenou pozici displeje text v nastavené barvě. Příkazem BOX vytvoříme obdélník daných rozměrů a barevné výplně. Poslední direktivy slouží ke vložení tzv. fontů – displej v sobě nemá definovanou znakovou sadu, tu musíme vytvořit jako externí soubor. V příkladu na [5] jsou k dispozici ke stažení dvě vytvořené znakové sady ve velikosti 8×8 bodů a 16×16 bodů.

Jak na ovládání grafického LCD pomocí AVR 5.jpg

Obr. 5 Zapojení sestavy

Zapojení sestavy grafického barevného LCD displeje a vývojového kitu vidíte na obr. 5. Červený a modrý vodič je připojen spolu s BL signálem na napěťovou sběrnici umístěnou vlevo od LCD displeje, který v tomto příkladu není použit. Zbylé 4 signály sběrnice SPI jsou připojeny k portu B mikrokontroléru AVR ATMega 32.

Jak na ovládání grafického LCD pomocí AVR 6.jpg

Obr. 6 Detail zapojení sestavy

Článek ukázal velmi snadné připojení grafického barevného displeje s řadičem Philips PCF8833 k vývojovému kitu AVRboard03 osazenému mikrokontrolérem ATmega32 nebo ATmega644p. Zdrojové kódy a knihovny pro ovládání displeje jsou již vytvořeny v jazycích Basic i C, takže jsou snadno pochopitelné a dostupné pro všechny úrovně programátorů a tvůrců embedded systémů.

Literatura

[1] článek na HW serveru – http://hw.cz/teorieapraxe/programovani/art3679-hardwarove-pomucky-propodporu-vyvoje-aplikaci-s-mikrokontrolery-a

[2] e-shop s kity AVRboard03 a příslušenstvím – http://shop.onpa.cz/

[3] BASCOM-AVR – výrobce, http://www.mcselec.com/

[4] BASCOM – eshop, http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=86&category_id=5&option=com_phpshop&Itemid=1

[5] Podpora pro AVRboard03 kity a příslušenství – http://shop.onpa.cz/?-podpora,28

[6] Příklady pro tento článek – http://shop.onpa.cz/index.php?prikladykit-EvB-clanky,34

[7] Open source C kompilátor pro AVR (WinAVR) – http://winavr.sourceforge.net/