Ovládání displeje Nokia3310 procesory AVR
Pro různé konstrukce s jednoduchými malými mikroprocesory je zapotřebí zobrazovacích jednotek. Pro nejjednodušší a aplikace si vystačíme se sedmisegmentovými LED displeji ale výhodnější je použití LCD displeje s malou spotřebou a většími možnostvmi zobrazovaných informací. Běžně dostupené jsou znakové LCD displeje 2x16, 4x20, grafické... se standardními řadiči HD44780. Jsou však poměrně drahé a grafické typy velmi velké vzhledem k poměrně malému rozlišení (128x64).
Zajímavým řešením může být displej z mobilního telefonu Nokia 3310, který má příjemné rozměry, rozlišení 84x48 (tj. při velikosti znaků 5x8 je možno zapsat 6 řádků po 14 znacích) a kompletní mobilní telefon se dá sehnat okolo 100Kč.
Popis připojení displeje
Po rozebrání mobilu získáme displej s řadičem zalitý v plastu spolu s maticí klávesnice.
![](images/zepredu_nahled.jpg)
![](images/zezadu_nahled.jpg)
![](images/elektronika_nahled.jpg)
Připojení displeje k elektronice mobilního telefonu je provedeno přes pružné kontakty. Displej je na tyto kontakty přitlačován plastovými západkami a šesti malými torx šrouby, které drží pohromadě komplet displej-elektronika-plastové pouzdro.
![](images/kontakty_nahled.jpg)
![](images/pripojeni_nahled.jpg)
Popis jednotlivých pinů:
- VDD - napájecí napětí, dle výrobce 3,3V mám však odzkoušen dlouhodobý provoz při 5V bez žádných problémů
- SCK - taktovací signál komunikační sběrnice
- SDIN - vstupní sériový signál
- D/C - výběr módu pro vstupní data (příkaz/adresa nebo data)
- SCE - povolení komunikace, signál je aktivní při hodnotě LOW
- GND - zem
- VOUT - výstupní pin vnitřního zdroje napětí pro napájení LCD. Na tento pin je potřeba připojit kondenzátor k zemi. POZOR! výstupní napětí na tomto pinu může být až 9V čemuž je potřeba přizpůsobit elektrolytické kondenzátory.
- RES - reset řadiče, je nutno provést pro správnou inicializaci, je aktivni při hodnotě LOW
Pro připojení displeje je tedy potřeba vyřešit propojení s průžnými kontakty, nabízí se 3 přístupy:
- Připájení vodičů přímo ke kontaktům, zde je potřeba mít pevnou ruku. Na obrázku níže je pro porovnání velikostí přiložen odpor.
- Vytvoření malé DPS s ploškami podobnými těm ne originální DPS. Problémem však bude vytvoření dostatečného přítlaku ke kontaktům a jejich oxidace (originál je zlacený).
- Využití původní DPS? Nějak uřezat a dobastlit dle vlastní šikovnosti...
Mé řešení tedy bylo napájení kontaktů k kabelu s konektorem PSL10. Propojení vodičů mezi konektorem a displejem je uvedeno na obrázku, čísla odpovídají číslu žíly plochého vodiče.
![](images/napajene_kontakty_nahled.jpg)
![](images/psl10_nahled.jpg)
Schéma zapojení displeje k procesoru ATmega32:
![](images/schema_nahled.png)
Na obrázku je uvedeno připojení displeje k SPI rozhraní procesoru. Pro současné připojení ISP programátoru k procesoru je doporučeno použití oddělovacích odporů 1kOhm.
Software - ATmega32
Vykreslování na tento displej se provádí jednoduše komunikací s použitým řadičem (PCD8544) připojeným k rozhraní SPI.
Podrobnosti samotné komunikace zde uvádět nebudu, vše je snadno nastudovatelné z přiložených knihoven a datasheetu. Raději se tedy podíváme na to, jak vypisovat na displej potřebné informace pomocí přiložené knihovny.
Struktura jednoduchého programu pro komunikaci vypadá takto:
- Inicializace SPI rozhraní. Jedná se o nastavení registru SPCR,
displej je schopen pracovat s frekvencemi sběrnice 0-4MHz, není tedy
potřeba žádné nastavení měnit.
spi_init();
- Inicializace a spuštění displeje.
Sekvence příkazů potřebná pro správnou inicializaci displeje je uvedena v datasheetu řadiče, stačí opět použit nadefinovanou funkci pro inicializaci. Jediný parametr který je potřeba nastavit je kontrast displeje. Zde bych měl jen poznámku že některé displeje které jsem měl k dispozici nedovolovaly změnu kontrastu, při jakémkoliv parametru byl kontrast vždy stejný (naštěstí tak akorát).
kontrast = 25;
LCD_init();
Nyní je displej správně inicializován a připraven k vykreslování.
- Pro vypisování textu/kreslení obrázků na displej bylo vytvořeno
několik základních funkcí:
- LCD_clear(); - smaže aktuální obrazovku
- LCD_kresli(); - vykreslí nadefinovaný obrázek v rozlišení 84x48
- LCD_pis("text %d", promenna); - vypíše libovolný text. Zalamuje řádky a umožňuje přímé vkládání proměnných
- LCD_pis_velke(radek, sloupec, "cislo %d", promenna) - vypisuje velké číslice. Je potřeba zadat řádek (0-5) a sloupec (0-83)
Tvorba obrázků
Pro vytváření dat pro obrázky v rozlišení 84x48 je možno použít jednoduchý prográmek FastLCD (nebo nějaký jiný který dokáže generovat data v požadovaném formátu). Převod jednoduchého obrázku autíčka je znázorněn ve foto návodu. Jak bude dále možno vidět, displej svým rozlišením není vhodný na kreslení nějakých extra pěkných obrázků, na jednoduché ikonky však postačí.
![](images/LCD/auto.jpg)
![](images/LCD/FastLCD_new_nahled.png)
![](images/LCD/FastLCD_insert_nahled.png)
![](images/LCD/FastLCD_prevod_dat_nahled.png)
![](images/LCD/Notepad_nahled.png)
Demontrace možností displeje
![](images/LCD/screen1_nahled.jpg)
![](images/LCD/screen2_nahled.jpg)
![](images/LCD/screen3_nahled.jpg)
Ukázkový program pro vykreslení těchto obrazek je dostupný níže.
Download
Samotné knihovny pro ovládání displeje
Kompletní vzorový projekt v AVRStudio4
Program pro převod obrázků