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: kontrast

Taky jsem měl hodně světlé body, tak jsem upravil následující dvě řádky v knihovně "Nokia5110.cpp":

LcdWrite(LCD_CMD, 0xC0); // Set LCD Vop (Contrast). //0xB1<-0xC0
LcdWrite(LCD_CMD, 0x13); // LCD bias mode 1:48. //0x14<-0x13

Popis těch příkazů je v katalogovém listě na stranách 15 a 16:
https://www.sparkfun.com/datasheets/LCD/Monochrome/Nokia5110.pdf

Přiznám se ale, že jsem to nějak nepochopil.
Takže to byl spíš pokus-omyl až jsem to nakonec naladil na dobře čitelný kontrast.

Datum
Vložil
Titulek

Re: Re: kontrast

Díky moc ! doporučuju všem, o hodně lepší

Datum
Vložil
Titulek

Číslo

ahoj chtěl bych se zeptat jak na display napsat číslo (například typu float) nebo jak změnit formát float na string. díky

Datum
Vložil
Titulek

Re: Číslo

Ja by som to tiež potreboval vedieť, dalo sa mi požiť toto"

char strBuffer[30];
itoa(sensorValue,strBuffer,10);
lcd.LcdString(strBuffer);
ale asi to nebude dobré, pretože keď je sensorValue nad 100 alebo 1000, tak to neprepisuje správne

Datum
Vložil
Titulek

Re: Re: Číslo

alebo toto
char buf [10];
sprintf (buf, "%i", sensorValue);
lcd.LcdString(buf);
len neviem ako sa zbavit prebytočných čísel po prechode desiatok smerom dole

Datum
Vložil
Titulek

Re: Re: Re: Číslo

například si projít ten buf[] a rozpoznat si co tam chceš a co ne, upravit to tam a za poslední znak vložít znak s kódem 0 (konec řetězce)

Datum
Vložil
Titulek

Obrazky

Caute

Bolo by mozne menit na display-i obrazky v zavislosti od otacania potenciometra? Vyzeralo by to ako animacia keby som tocil potenciometrom.

Vdaka za odpoved

Datum
Vložil
Titulek

Sériová komunikace

Dobrý den,

chtěl jsem se zeptat jestli je možné na displej posílat text z prostředí arduino pomocí nástroje Serial Monitor, popřípadě z terminálu ve windows.

děkuji

Datum
Vložil
Titulek

Re: Sériová komunikace

nevím v čem vidíš problém, lcd.LcdString(Serial.read());

Datum
Vložil
Titulek

funguje to nekomu

Prosim, funguje to nekomu podle tohoto navodu?
Me se na display nezobrazi vubec nic. A piny uz mam spravne. Jine priklady(ne odsud) mi na display Nokia5110 funguji.
Dekuji za jakoukoliv reakci.

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

Vyhledávání

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