Arduino Uno + Siemens M55 LCD ekranas

27 06 2012

Siemens M55 buvo mano vienas pirmųjų telefonų. Dar ir dabar jis gulėjo stalčiuje kol nesugalvojau, kad man reikia LCD ekrano. Taigi papasakosiu kaip pajungti Siemens M55ekranėlį prie Arduino Uno ir su juo nuveikti bent jau ką nors.

Pirmiausiai apie patį ekranėlį: turint 101×80 taškų rezoliucija ir 4096 spalvas nelabai ką nuveiksi, bet mažam projektui, kuriame nėra labai daug duomenų manau pakaks.

Pajungimas

Pats LCD ekranėlis išmontuotas atrodo šitaip:

spodg

Jo valdymui bus naudojami 10 kontaktų kurie pažymėti raudonai. Pastarųjų kontaktų reikšmės yra sekančios:

  • Pin1 – Cs: Serijinio įrenginio pasirinkimo kanalas.
  • Pin2 – Reset: Perkrovimo kanalas.
  • Pin3 – Rs: Komandų tipo perjungimo kanalas.
  • Pin4 – Sclk: Perduodamų duomenų laikrodi.
  • Pin5 – Sdta: Perduodami duomenys.
  • Pin6 – Vcc: Maitinimas loginei daliai, +2.9V.
  • Pin7 – Gnd: Žemė loginei daliai.
  • Pin8 – Led1 VCC: Maitinimas pirmai apšvietimo lemputei, +2.9V.
  • Pin9 – Led1+Led2 GND: Žemė apšvietimui.
  • Pin10 – Led2 VCC: Maitinimas antrai apšvietimo lemputei, +2.9V.

Arduino Uno turi vidinę +3,3V maitino liniją, tad ilgai nežaisdamas visus maitinimo įvadus užmaitinau būtent +3,3V. Mažas perteklius, bet nenumirs. Didesnė problema yra loginių kanalų srovė. AVR mikrokontroleriai savo išėjimuose siunčia +5V kaip High, tačiau šiuo atveju mūms to perdaug.

Tam panaudojau po viena 4,7kOm rezistorių prie kiekvienos linijos. LCD pajugiame prie Arduino pagal čią schemą:

images6ny

Kadangi programuodamas nenaudoju SPI jungties, todėl duomenų kanalus galima jungti prie bet kurio Arduino I/O. Vėliau mano sukurtoje bibliotekoje pakas tiesiog nurodyti kurį Pin kur pajungėte.

Biblioteka

Bandydamas prakalbinti LCD ekraną radau šį puslapį: http://www.drzasiek.cba.pl/ m55 .php . Čia radau AVR skirtą biblioteką, kuri programiniu budu bendrauja su M55 LCD ekranu. Kadangi ši bibioteka netiko naudojimuiArduino IDE viduje, todėl ją perdariau. Perdarydamas papildomai įterpiau Pin kontaktų nurodymą inicijuojant LCD klasę.

Biblioteką parsisiūsti galite čia.

Archyve rastą M55LCD katalogą perkelkite į Arduino IDE katalogo “libraries” pakatalogį ir toliau beliks tik ką nors suprogramuoti.

Programavimas

Kodo pražioje nepamirškite įterpti biblioteką:

#include <M55LCD.h>

Vėliau sukuriame lcd kintamajį, per kurį pasieksime M55LCD klasės valdymo metodus. Kurtami kintamajį jam nurodome kur yra jungt LCD valdymo kanalai:

M55LCD lcd(6,5,4,3,2);

Šiuo atveju valdymo kanalai yra pajungti taip:

Arduino Pin6 – SDTA;
Arduino Pin5 – SCLK;
Arduino Pin4 – RS;
Arduino Pin3 – RESET;
Arduino Pin2 – CS;

Toliau Setup skiltyje inicijuojame LCD ekraną ir ustatome jo kontrastą:

void setup() {
lcd.init_lcd();
lcd.contrast_lcd(0x11c);
delay(100);
}

Šiuo atveju kontrasto reikšmė yra keičiama keičiant paskutinį baitą iš šių tryjų, kur C yra didžiausias ryškumas. 100 milisekudžių pauzė daroma kad ekranas atliktu vidinį pasirengimą.

M55 LCD vadymui yra nemažai metodų. Jų sąrašas:

void window_lcd(unsigned char xstart, unsigned char ystart, unsigned char xend, unsigned
char yend);
void pixel_lcd(unsigned char x, unsigned char y,unsigned int color);
void send_lcd(unsigned char dat);
void line_lcd(unsigned char x1,unsigned char x2, unsigned char y1, unsigned char y2,
unsigned int color);
void area_lcd(unsigned char x1,unsigned char x2, unsigned char y1, unsigned char y2,
unsigned int color);
void frame_lcd(unsigned char x,unsigned char y, unsigned char height, unsigned char width,
unsigned char size, unsigned int color);
void chr_lcd( char chr, unsigned char x, unsigned char y, unsigned int size, unsigned int
color_font, unsigned int color);
void str_lcd(char *str, unsigned char x, unsigned char y, unsigned int size, unsigned int
color_font,unsigned int color);

Taip pat bibliotekoje aprašytos kelios pagrindinės spalvos:

#define WHITE 0xFFF
#define BLACK 0x000
#define RED 0xF00
#define GREEN 0x0F0
#define BLUE 0x00F
#define CYAN 0x0FF
#define MAGENTA 0xF0F
#define YELLOW 0xFF0
#define BROWN 0xB22
#define ORANGE 0xFA0
#define PINK 0xF9E

Kaip šios komandos ir spalvos veikią galite pamatyti šiame pavyzdiniame video:

Kaip pastebėjote ekrano perpiešimas nėra įtin greitas. Galbūt tai yra todėl kad nenaudotas SPI
metodas.


Veiksmai

Information

3 responses

11 12 2012
Airidas

Ar apsimoka pirkti sena telefa uz 20 lt ir islupti ekrana, ar geriau lcd ekraneli is kokios lemonos uz 35 lt? Noreciau automobilyje tureti temperaturos rodikli pasvieciamu ekranu, nes nusipirkti galima tik nepasvieciamu, ir nemaitinimu is auto akumo ji uzvedus. 🙂

12 12 2012
mindogas

Vien tekstinei informacijai siulau pirkti 16×2 ekraneli iš ebay. Ten ju nusipirkti galima uz ~3 dolerius: http://www.ebay.com/sch/i.html?_trksid=p5197.m570.l1311&_nkw=lcd+16×2&_sacat=0&_from=R40 Viena tokių turiu su melinu apsvietimu, veikia gerai ir greitai, apsvietimas ryškus. Siemensu ekrana labiau tiktu naudoti labiau grafinei informacijai pakeikti.

15 02 2013
Wyświetlacz ze starego Siemens'a M55 sterowany przez Arduino + TERMOMETR DS18B20 » Majsterkowo.pl

[…] tego poradnika należy dać rezystory 4.7kΩ ja dałem 10kΩ (takie posiadałem) czyli większe i działa […]

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: