LCD COB i kaktusa „zabawy”

LCD COB i kaktusa „zabawy”
3.5 (70%) 2 votes
moduł LCM1602 IIC

moduł LCM1602 IIC

Właściwie tytuł trochę sprowadza na manowce bo co prawda będę opowiadał o wyświetlaczach czy wyświetlaczu LCD, lecz temat będzie trochę szerszy i dotyczyć będzie LCD I²C. Precyzując, przestawię sposób co prawda nie nowy, ale bardzo ciekawy i praktyczny, w jaki sterować zwykłym wyświetlaczem znakowym LCD, skonstruowanym na sterowniku HD44780 przez magistralę TWI (I²C) w Bascom AVR.

Tajemnicza nazwa z tytułu – LCD Chip On Board określa rodzaj konstrukcji wyświetlacza i że tak powiem są to pospolite wyświetlacze jedno, dwu i cztero wierszowe. Swego czasu, a było to w maju 2013 roku, w końcu zdecydowałem się na zakup modułu o nazwie LCM1602 IIC. Określę go nazwą interfejsu sprzętowego LCD I²C. Wyśmienity pomysł polega na podłączeniu do wyprowadzeń zwykłego wyświetlacza znakowego LCD, expandera IO magistrali I²C. Moduły te wygrzebałem w sieci internet dużo wcześniej, lecz nie czułem się na sile samodzielnie oprogramować komunikacji do wyświetlacza za pośrednictwem takiego interfejsu. Niby nic skomplikowanego bo trzeba by dorwać specyfikację sterownika HD44780, poczytać i poćwiczyć wysyłanie odpowiednich bajtów … ale komu by się chciało skoro jest gotowa biblioteka dla środowiska Bascom AVR ;-D Można ją pobrać ze strony producenta środowiska programistycznego dla µC AVR MCS Elecrtonics. Ha – sęk w tym, iż modułów takich na dziś dzień jest już kilka wersji i różnią się między sobą nie tylko topologią wyprowadzeń do wyświetlacza. Więc w tamtym to czasie zacząłem się przyglądać i bibliotece i modułowi oczywiste było to, że kod biblioteki nie pasował do modułu i wtedy to, nie za bardzo wiedziałem jak go poprawić. 🙄
Przygotowałem sobie w tamtym czasie ściągawkę z opisem wyprowadzeń i coś tam grzebałem, grzebałem aż temat przysechł. Rozwiązanie bardzo mi się podobało z uwagi na fakt, że zwykły wyświetlacz jest sterowany za pomocą dwóch pinów µC – magistrali TWI, oraz że tak sterowanych wyświetlaczy może być kilka, co jest nie tak błahą i łatwą do uzyskania zaletą. Przy okazji wyświetlacz może powędrować na „większą” odległość od jednostki MCU, która nim zarządza. (Detale jak osiągnąć sporą długość magistrali przy okazji mojego opisu I²C TWI – jak kaktus “dawał po garach” ;-D) A z tytułu użycia tego interfejsu i jego oprogramowania mamy możliwość programowego załączania i wyłączania podświetlenia wyświetlacza. Wszystko również dzięki komunikacji magistralą TWI. Sterowanie załączaniem podświetlenia odbywa się wyprowadzeniem P3 portu expandera. Normalnie same zalety.
Moduł został skonstruowany tak aby sposób sterowania podświetleniem można było zmienić, bez integracji w obwód PCB. Dzięki takiej funkcjonalności można też pokusić się o wykonanie płynnej regulacji podświetlenia wyświetlacza. Ja w tym celu nie grzebał bym w bibliotece do obsługi nowego interfejsu, a rozłączył zworkę i odpowiedni pin wysterował sygnałem PWM, doprowadzając dodatkowy przewód od µC.

Tak się składa, że to tematu powracałem kilkakrotnie lecz ciągle było coś bardziej istotnego i moduł trafiał do szuflady 😉 Przez ten cały okres naczytałem się wiele o różnych dysfunkcjach spowodowanych nieprawidłowym funkcjonowaniem biblioteki, powodującym z kolei nieprawidłowe inicjowanie sterownika wyświetlacza … Aż pewnego razu przeglądając forum http://www.mcselec.com znalazłem ulepszoną wersję biblioteki prezentowanej na początku tego artykułu. :mrgreen: Nie występują w niej problemy z wyświetleniem zdefiniowanych znaków oraz uczynniona została funkcjonalność załączania podświetlenia – względem poprzedniej wersji.

Mając do dyspozycji narzędzie w postaci nowej biblioteki  bl_lcd_i2c.lib z obsługi wyświetlacza korzystamy tak jak dotychczas, dzięki standardowym rozkazom BascomAVR. Dodać należy jedynie „kawałek konfiguracji”.

Zamieszczony kod dostosowałem do swoich potrzeb, i prezentuje on „nowe” możliwości. Proszę zauważyć, że praktycznie nic się nie zmieniło w programowej obsłudze wyświetlacza. Doszła jedynie nowa deklaracja biblioteki:

oraz najistotniejsze:

od góry:
konfiguracja topologii wyprowadzeń,
deklaracja niezbędnych zmiennych,
przypisanie poprawnych wartości nowym zmiennym.

Uwagi może wymagać kwestia omówienia zmiennej _lcd_e, do której przypisujemy odpowiednią wartość zależną od tego którą linię wyświetlacza – E mamy „uczynnić”. Z założenia biblioteka miała być uniwersalna i obsługiwać wyświetlacze z dwoma wyprowadzeniami E.

;define a constant named PCF8574_LCD pointing to the i2c address
;dimension _lcd_e as byte to control the E-lines (4 lines LCD:s)
;_lcd_e should have one of the following values
;128 to enable E1, 64 to enable E2, 192 to enable both E1 and E2 (cls, deflcdchar)
;Connect the following pins from PCF8574 to LCD
;
;P0 – D4
;P1 – D5
;P2 – D6
;P3 – D7
;P4 – RS
;P5 – RW (not used, set to 0 to ground for write)
;P6 – E2 (on 1 or 2 line display nc)
;P7 – E1

Tak wygląda zapis autora w oryginale biblioteki.
W naszym zastosowaniu jej funkcjonalność została zmodyfikowana na rzecz możliwości sterowania podświetleniem. Niemniej potrzeba podania wymaganego stanu na pin E pozostała.

Więc od tej pory obsługa wyświetlacza znakowego przez temu podobny interfejs magistrali TWI nie powinna przysporzyć problemów – nie wolno zapominać jedynie o przypisaniu odpowiedniego adresu w kodzie, pod którym zgłosi się ekspander PCF8547. Wracając jeszcze do samej konstrukcji modułu, warto wspomnieć, iż sterowanie podświetleniem buforowane jest tranzystorem J3Y – S0850. Oraz nowsze wersje modułu posiadają rezystory pull-up dla wejść adresowych!

Praktycznie do tematu wróciłem gdy dostałem do przetestowania bardzo interesujący wyświetlacz COB – LCD 1602A Qapass o organizacji 16 znaków w 2 wierszach. Oznaczenie producenta Eone Qapass – 1602A.  Jako wyświetlacz negatywowy charakteryzuje go doskonała czytelność nawet z większej odległości i nie koniecznie jak określa producent z kierunku godziny 6. Dodatkowe walory i nutę ekskluzywności zapewnia niebieskie tło dla białych  napisów. Test zlecił Wojciech prowadzący sklep i witrynę firmową moduliki.pl.

testowany moduł LCD moduł interfejsu LCD I²C

testowany moduł LCD Eone Qapass – 1602A
moduł interfejsu LCD I²C fotka dobrze oddaje kolor wyświetlacza lecz słabo wyszła ostrość

z tytułu kolorowego oświetlenia w pomieszczeniu kolory przekłamane ale idealnie uchwycona wyrazistość wyświetlacza

z tytułu kolorowego oświetlenia w pomieszczeniu kolory przekłamane ale idealnie uchwycona wyrazistość wyświetlacza

Korzystając ze sposobności, iż omawiam stosowanie wyświetlaczy znakowych LCD w nowej odsłonie, poruszę jeszcze jeden istotny fakt. Dotyczy on sprzętu i wymaganych elementów zewnętrznych niezbędnych aby wyświetlacz pracował prawidłowo. Mianowicie mam na myśli ustawianie kontrastu, oraz sterowanie podświetleniem. Wszyscy przywykliśmy do tego, że podświetlenie po prostu włączamy lub wyłączamy. Do celów komunikacji z użytkownikiem produktu finalnego w postaci opracowanego urządzenia, możemy sterować jasnością wyświetlacza lub wręcz mrugać podświetleniem. A jako bajer użytkownik może mieć możliwość ustawienia sobie maksymalnej jasności, czy intensywności podświetlenia. Odmienną sprawą jest ustawienie kontrastu, gdzie „lekceważąco wszyscy konstruktorzy wtykają” na PCB potencjometr montażowy, który w końcowym efekcie ukryty jest w czeluściach urządzenia. Jednak zwrócę uwagę na to, że obie nastawy mogą być realizowane programowo w „nastawach urządzenia” (menu), oczywiście o ile udostępnimy taką możliwość. Jak to zrobić? – można wykorzystać w tym celu hardware lub software PWM. I doprowadzić dwie linie do wyświetlacza, z których jedna może bezpośrednio sterować podświetleniem, a druga przez układ całkujący (RC) odpowiedzialna będzie za nastawę kontrastu. Przez programową modyfikację wypełnienia generowanego przebiegu prostokątnego PWM, wpływać będziemy na efekt wizualny.przykład podłączenia sterowania wyświetlaczem LCDOczywiście na dziś dzień są dostępne w sprzedaży wyświetlacze LCD z wbudowaną obsługą magistrali TWI, lecz w chwili obecnej ich cena dużo przewyższa koszt zakupu prostego wyświetlacza i modułu omawianego interfejsu.


nota katalogowa IC expandera PCF8574-expander_IO.pdf (318 pobrań)
nota katalogowa wyświetlacza eone-QAPASS_1602a1.pdf (244 pobrania)
nota katalogowa tranzystora J3Y_S8050LT1.pdf (249 pobrań)


jeśli ktoś zechce osobiście „przerobić temat” przydatne mogą okazać się linki:

http://www.avr-praxis.de/forum/showthread.php?2130-I2C-LCD-%28-auch-Arduino-%29-mit-PCF8574-OHNE-LIB-betreiben/page12
http://forum.atnel.pl/topic4578.html
http://www.elektroda.pl/rtvforum/topic2721360.html
http://bascom-forum.de/archive/index.php/t-4045.html?s=31c6341cda392fbfb262e98e75ba2401
http://rn-wissen.de/wiki/index.php/LCD-Modul_am_AVR
http://www.mikrocontroller.net/topic/47219

Share Button
Tagi , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

11 + 6 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.