Lekce 7 - modul displeje z NOKIE 5110

15.02.2013 15:59

Zdravím všechny při naší další lekci, ve které si k Arduinu připojíme modul dipleje z dnes již legendárního mobilního telefonu NOKIE 5110. Jeho velikost je 1,6" s rozlišením 84 na 48 bodů. Jedná se samozřejmně o monochromatický displej. K sehnání je již jako osazený modul (viz fotografie) se zabudovaným podsvětlením. Jeho cena se bude pohybovat okolo 100 Kč. 

Zapojení vývodů na modulu:

  • 1. RST
  • 2. CE
  • 3. IN
  • 4. CLK
  • 5. +3,3V
  • 6. Podsvětlení - na mém modulu připojeno k zemi
  • 7. GND

Zapojení vývodů modulu se může na modulech od různých výrobcu lišit, přočtetě se dokumentaci od výrobce. Napájení displeje je realizováno z Arduina pomocí pinu s vyvedeným napětím 3,3V hned vedle 5V pinu (pozn.: Zkoušel jsem napájet displej i napětím 5V a nic se nestalo a zlepšil se dokonce kontrast. Vzhledem k omezeným informacím od výrobce, lze mít za to že napájení 5V je též možné). V mém případě je to:

 LCD (pin) Arduino (pin)                                            
1 7
2 6
3 5
4 4
5 3
6  +3,3V (5V ??)
7 GND
8 GND

 

   K ovládání jsem vytvořil knihovnu pro modul displeje. Z části jsem vytvořil již napsaný kód  a upravil jsem ho a nějaké nové funkce jsem přidal. Vám bude stačit stáhnout knihovnu zde (alternativní odkaz v rar) a zkopírovat jí jako v předchozí lekci do adresaře libraries. 

    Schéma zapojení zde nedávám. Přesto si můžete stáhnou obrázky zapojení zde a taky zde Důležité je jen zapojit správně datové vývody a napájení modulu. K Arduino je možné zase zapojit i více těchto displejů, záleží pouze na počtu volných pinů.

Program

Ted něco málo (více) k programu (ke stažení zde). Dle komentářů je snad vše jasné. Důležité je vytvořit objekt displeje pomocí funkce LCDnokia5110 lcd(7,6,5,4,3)a správně napsat čísla pinů do kterých je displej v Arduinu zapojen. Poté stačí displej inicalizovat funkcí lcd.LcdInitialise();Dále již můžeme s diplejem pracovat. Po spuštení by se na dipleji měl objevit nápis Arduino a poté obrázek žárovky s textem Lekce 7 a šipkou. a následně ukázkový text s různými šiřkami mezer, abecedou a nějakými znaky. Všechny znaky jsou uloženy v knihovně jak se sami můžete podívat. Je tam uloženo prvních 127 znaků ASCII code. Česká diakritika chybí ale knihovnu si o daší znaky můžete rozšířit. Jak je vidno, každé písmeno se skláda z pěti 8 bitových vertikálních proužků. Poslední nejvišší bit je vždy 0. Pro názornou ukázku na obrázku, jak vytvořit data pro vykřičník:

Data pro tento znak tedy budou:

 

 {0x00, 0x00, 0x00, 0x00, 0x00} // 20
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
...

TIP

Já jsem si ještě v knihovně modifikoval znak ' (apostrof) na ° (stupně) a to z důvodu potřeby zobrazovatudaje o teplotě pro moje jiné projekty. V knihovně , kterou jsem vám dak k dispozici ke stažení jsem tuto modifikaci ponechal, protože si myslím, že stupně využijete častěji než apostof. Podkud tedy bude chtít zobrazit znak °, odešlěte na displej znak ' (apostrof - ALT+39). Pro příklad  39,6'C -- > 39,6°C.

 

Zde funkce z knihovny NOKIA5110:

lcd.ShowLogo(int miliseconds) - zobrazí na určený počet milisekund obrázek z nápisem Arduino (tuto funkci jsem přidal do knihovny NOKIA5110 jako ukázku. Data k obrázku jsou uložena již v samotné knihovně. 

lcd.Clear() - smaže diplej

lcd.GotoXY(int index_bodu_zleva, int radek) - přesune kurzor na určené místo na displeji (příklad lcd.GotoXY(3,2); - přesune kurzor na 4. bod 3. řádku)

lcd.LcdString(char[]) - zobrazí na dipleje určený text (příklad lcd.LcdString("Ahoj"); - zobrazí na pozici kurzoru text Ahoj)

int lcd.CharSpace - nastaví paramer mezer mezi jednotlivými znaky. Defaultně ja nastaveno ja 1. (nastavitelná hodnota je od 0 do 2). Rozdíl je vidět na ukázkovém programu. (příklad lcd.CharSpace = 2; - nastaveví mezeru mezi znaky na 2 body)

lcd.ShowImage(const unsigned char[], int delka_zobrazeni) - zobrazí obrázek na displeji pro požadovanou dobu v milisekundách. Jak v našem ukázovém programu můžete vidět, tak data obrázku jsou uložena např. v proměné logo_lekce. Tyto data vygeneruje dobrý malý prográmek s názvem LcdAssistant (ke stažení zde). Do tohoto programu nahrajete obrázek ve formátu bmp s rozměry přesně 84 x 48 v jednobitovém rozlišení (černá - bílá). Toto by měla zvládnout většina editorů obrázků. Prográmek vygeneruje již hotová data v souboru, ze kterého jej zkopírujete do vašeho programu. Dodržujete zadané rozměry a nastavení jako na obrázku níže.

  

   Tak doufám, že vám prográmek funguje a že vše bylo pro vás pochopitelné. Kdyby byly nějaké problémy, nebo kdyby jste našli v textu chybu, nebojte se napsat buď na mail nebo do komentářů pod článek. Na závěr přidávám video jak by měl výsledek vypadat.

 

Zpět

Lekce 7 - modul displeje z NOKIE 5110

Datum
Vložil
Titulek

Re: Re: Re: float hodnota

String cas = String(millis()/1000, DEC);
// vytvoření pomocné proměnné tisk pro
// uložení v tisknutelném tvaru,
// číslo 10 udává počet znaků zprávy
char tisk[10];
// převod proměnné cas do proměnné tisk
cas.toCharArray(tisk, 10);
// vytištění informace na displej
lcd.LcdString("Cas ");
lcd.LcdString(tisk);

Datum
Vložil
Titulek

delka

Dobrý den mohl bych se zeptat jak mám udělat aby mi to tam vypsalo text a po určité době zobrazilo další?
Dík za odpověď

Datum
Vložil
Titulek

České znaky

Jak propašovat české znaky na LCD? Například
0x30, 0x49, 0x4A, 0x49, 0x20, // ASCII-159 0x9F c s hackem

Datum
Vložil
Titulek

Re: České znaky

Aký koľvek znak sa da nakodiť , len otvor subor nokia5110.c a poprepisuj hodnoty v void LCDnokia5110::LcdCharacter(char character)
uplne easy Lukaši :D

Datum
Vložil
Titulek

Re: Re: České znaky

Díky Jaro, to je taky řešení, ale jak přímo posílat z arduina znaky bez konverze z nepoužívaných znaků?

Myslím tím: LcdString ("Čau světe");

THX

Datum
Vložil
Titulek

Re: Re: Re: České znaky

To by mě taky zajímalo jak na to, zorvna to tu řeším, ale nedaří se.

Datum
Vložil
Titulek

Pauza před resetovacím impulzem

Díky za návod.

Chtěl bych se podělit o jednu zkušenost.

Když jsem připojil displej k Arduinu "NANO", tak všechno fungovalo, jak má.
Když jsem ale ten samý displej připojil k Arduinu "MINI", tak se po zapnutí napájení jen rozsvítil podsvět, ale nic se nezobrazilo. Musel jsem ručně stisknout resetovací tlačítko na "MINI" a pak to teprve začalo fungovat.

Zjistil jsem, že je to způsobeno tím, že se displej v tom "MINI" nestačil zresetovat po zapnutí napájení.
"MINI" totiž nemá bootloader a program se začne vykonávat okamžitě po zapnutí napájení.
Podle katalogového listu je potřeba před RESETovacím impulzem displeje počkat alespoň 30ms od náběhu napájení.

Jednou z možností by bylo nastavení některého FUSE bajtu, který se stará o časovou prodlevu startu programu po zapnutí napájení.
Vzhledem k tomu, že jsem si první Arduino totálně zablokoval právě kvůli operacím s FUSEmi, tak jsem se do toho raději nehrabal.

Druhá možnost byla přidání 30ms pauzy před ten resetovací impulz v podprogramu:
"void LCDnokia5110::LcdInitialise(void)"
v souboru "Nokia5110.cpp"

.....
delay(30);
digitalWrite(PIN_RESET, LOW);
delay(1);
digitalWrite(PIN_RESET, HIGH);
.....

S touhle úpravou už to nabíhá bez problému.

Datum
Vložil
Titulek

Více obrázků za sebou?

Zkoušel někdo 4 různé obrázky za sebou?
Jde o to, že když funkce obsahuje 4 a více různých obrázků, začne to vypisovat nesmysly. Nikde nevidím žádnou spojitost čím by to mohlo být.

Datum
Vložil
Titulek

Re: Více obrázků za sebou?

Tak asi nikdo :-D zjistil jsem, že se do RAMky nevejdou víc jak 3 obrázky, takže přetékala. Vyřešil jsem to tím, že tahám obrázky z externí paměti, konkrétně z SD karty

Datum
Vložil
Titulek

kontrast

Dobrý den,
je možné zvýšit kontrast displaye? Zkusil jsem ho napájet 5 V místo 3 a je to lepší, ale furt nic moc. Když se na display dívám z úhlu cca 45°, tak je to lepší.
Děkuji

<< 1 | 2 | 3 | 4 | 5 >>

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.