Element ten jest dość nietypowy. Na pierwszy rzut oka wyglądem zewnętrznym, budową, wymiarami oraz sposobem montażu przypomina popularny, miniaturowy wyświetlacz OLED o przekątnej ekranu 0,49”. Podobieństwo do wyświetlacza OLED dotyczy także wyświetlanego obrazu – standardowo są to białe punkty na czarnym tle. Tak naprawdę jest to jednak wyświetlacz LCD, z tłem podświetlanym białą diodą LED. Wyposażono go w kontroler firmy Sitronix typu ST7567A, który komunikuje się z otoczeniem przez interfejs I2C. Wejście zasilania i wszystkie sygnały sterujące wyświetlaczem HMC6432-03 są wyprowadzone na złącze krawędziowe, umieszczone na końcu giętkiej taśmy przeznaczonej do wlutowania w obwód drukowany. Opis sygnałów występujących na złączu wyświetlacza umieszczono w tabeli 1.
Układ aplikacyjny wyświetlacza HEM6432-03 jest nieskomplikowany. Do poprawnej pracy wyświetlacz wymaga jedynie dołączenia dwóch kondensatorów (na schemacie – C1 i C2) o pojemności od 100 nF do 1 mF, które są elementami konwerterów DC/DC wyświetlacza. Zalecane jest także filtrowanie zasilania wyświetlacza kondensatorem ceramicznym. W prezentowanym module użyto w tym celu połączonych równolegle kondensatorów o pojemności 100 nF i 10 mF (kondensatory C3 i C4).
Linie SCL i SDA wyświetlacza są przeznaczone do bezpośredniego dołączenia do wyprowadzeń mikrokontrolera, dokładnie do sprzętowego lub realizowanego w sposób programowy interfejsu I2C. Linia RES może być natomiast sterowana przez jeden z portów I/O mikrokontrolera lub też przez zewnętrzny układ generowania sygnału zerowania, jeżeli taki jest dostępny. W celu uproszczenia sposobu połączenia modułu wyświetlacza z zestawami ewaluacyjnymi mikrokontrolerów wszystkie trzy linie sygnałowe zaopatrzono w rezystory pull-up i przyłączono do napięcia zasilania modułu. Dla celów testowych wyświetlacz zamontowano na jednostronnej płytce drukowanej wykonanej metodą termotransferu. Wygląd tej płytki w widoku od spodu pokazano na fotografii 2, a w widoku od góry na fotografii 3.
Format transmisji
Podstawowym problemem przy implementacji we własnym projekcie wyświetlacza HEM6432-03 jest brak dostępności pełnej dokumentacji technicznej tego elementu. W Internecie można znaleźć jedynie fragmentaryczne dane tego wyświetlacza. Niestety, nie jest też dostępna dokumentacja kontrolera ST7567A. Co prawda można znaleźć karty katalogowe starszej wersji tego układu, tj. ST7567, jednak kontroler LCD w tej wersji nie obsługuje interfejsu I2C, który został użyty w wyświetlaczu HEM6432-03. Na szczęście analiza kart katalogowych innych sterowników monochromatycznych wyświetlaczy LCD produkowanych przez firmę Sintronix pokazuje, że producent ten we wszystkich swoich układach implementuje w interfejsie I2C ten sam protokół komunikacji. Pokazano go na rysunku 4.
Jak wspomniano, za pośrednictwem interfejsu I2C nie jest możliwy odczyt danych ze sterownika ST7567A. Wyświetlacz HEM6432-03 nie obsługuje więc wszystkich komend kontrolera ST7567A, a tylko te związane z operacjami zapisu. Ich listę zawiera tabela 2.
Inicjalizacja wyświetlacza
Obsługa wyświetlacza HEM6432-03 nie różni się od programowania innych wyświetlaczy z wbudowanym układem kontrolera. Pierwszym krokiem jest zawsze skonfigurowanie modułu do pracy. Konfiguracja wyświetlacza HEM6432-03 rozpoczyna się od wygenerowania impulsu reset na linii RES#. Minimalny czas trwania impulsu reset jest równy 1 ms, aczkolwiek w opisie aplikacji kontrolera ST7567 firma Sintronix zaleca minimalny czas trwania impulsu reset równy 5 ms. Reset wyświetlacza następuje maksymalnie po czasie 2 ms od narastającego zbocza impulsu resetu, chociaż i w tym miejscu producent w opisie aplikacji kontrolera zaleca oczekiwanie przez minimum 5 ms przed podjęciem kolejnego kroku inicjalizacji wyświetlacza. Warto wspomnieć, że na tym etapie konfiguracji wyświetlacza sprzętowy reset nie może zostać zastąpiony komendą Reset, ponieważ programowy reset układu nie inicjalizuje wszystkich obwodów kontrolera ST7567A. Dokładny wykaz różnic pomiędzy tymi dwoma rodzajami resetu kontrolera można znaleźć w dokumentacji układu ST7567.
Zestaw komend konfigurujących wyświetlacz dla obu orientacji ekranu (tj. normalnej i odwróconej) oraz kod funkcji inicjalizującej lcdHEM_Init() przedstawiono na listingu 2. Kod ten jest przeznaczony dla mikrokontrolera STM32F107 i był testowany za pomocą zestawu uruchomieniowego STM32 Butterfly. Warto zauważyć, że funkcja lcdHEM_Init() inicjalizująca wyświetlacz wykorzystuje do odmierzania opóźnień w trakcie generowania impulsu resetu funkcję niższego poziomu dwt_Delay(). Funkcja ta zapewnia odmierzanie skalibrowanych opóźnień w oparciu o odczyt stanu licznika zliczającego takty zegara jednostki centralnej. Licznik ten znajduje się w module DWT (tj. Data Watchpoint and Trace), który jest standardowo implementowany w rdzeniach Cortex-M3/M4/M7 jako jeden z układów wspomagających debugowanie programu i monitorowanie pracy mikrokontrolera.
Pamięć obrazu
Kontroler ST7567A jest w stanie obsługiwać wyświetlacz LCD o maksymalnej rozdzielczości 132×65 pikseli. W tym celu jest on wyposażony w pamięć DDRAM liczącą 8580 bitów, której każdy bit odpowiada jednemu pikselowi. Pamięć ta jest zorganizowana w postaci 9 stron po 132 bajty. Każda strona pamięci odpowiada 8 kolejnym liniom obrazu i 132 kolumnom, natomiast każdy bajt na stronie odpowiada 8 kolejnym pikselom w kolumnie obrazu, przy czym najmłodszy bit odpowiada pikselowi w linii o najniższym numerze. Wyjątkiem jest ostatnia strona pamięci (tj. strona o adresie 8), na której zaimplementowano w słowach pamięci tylko najmłodszy bit b0. Podstawowym przeznaczeniem tej strony pamięci jest sterowanie wyświetlaniem ikon.
Zapis danych do pamięci DDRAM wyświetlacza HEM6432-03 rozpoczyna się od ustawienia adresu strony pamięci komendą Set Page Address oraz adresu kolumny komendami Set column address (MSN) i Set column address (LSN). Proponowaną funkcję realizującą tę operację przedstawiono na linstingu 3. Następnie do pamięci mogą być zapisywane dane obrazu. Po zapisie każdego bajtu danych adres kolumny jest automatycznie inkrementowany, aż do osiągnięcia końca przestrzeni adresowej na danej stronie pamięci (tj. wartości 131), po czym licznik adresujący kolumny zatrzymuje się. Adres strony pamięci nie jest automatycznie inkrementowany. Zmiana adresu strony pamięci wymaga wysłania do wyświetlacza komendy Set Page Address oraz ustawienia licznika adresującego kolumny na początku strony komendami Set column address (MSN) i Set column address (LSN).
Zaimplementowany w kontrolerze ST7567A sposób organizacji pamięci obrazu w połączeniu z brakiem możliwości odczytu danych z tej pamięci przez interfejs I2C powodują, że tworzenie grafiki bezpośrednio na ekranie wyświetlacza HEM6432-03 jest w zasadzie niemożliwe. Najprościej jest w tym celu używać lokalnego bufora obrazu, na którym przeprowadzane są wszystkie operacje graficzne, a którego zawartość jest następnie przepisywana do pamięci DDRAM wyświetlacza. Ewentualnie można poprzestać na ładowaniu do pamięci wyświetlacza predefiniowanych grafik, przechowywanych w programie w postaci tablic.
Dysponując przedstawionymi powyżej informacjami, można bez większego trudu napisać bardziej zaawansowane funkcje wyświetlające na wyświetlaczu HEM6432-03 teksty czy też predefiniowane grafiki. Dołączony do artykułu kod demonstracyjnego programu zawiera w module lcdHEM6432.c kompletną bibliotekę obsługi omawianego wyświetlacza, wspierającą również oferowane przez ten wyświetlacz sprzętowe tryby obsługi obrazu, np. inwersję (fotografia 8).
Aleksander Borysiuk
alex_priv@wp.pl
Bibliografia:
1. HEM6432-03 LCD Display, Karta katalogowa układu
2. ST7567. 65×132 Dot Matrix LCD Controller/Driver, Karta katalogowa układu, Sitronix
Tabela 1. Rozmieszczenie wyprowadzeń wyświetlacza HEM6432-03 i ich funkcje |
||
Numer wyprowadzenia |
Sygnał |
Opis |
1 |
C2P (XVO) |
Konwerter DC/DC |
2 |
C2N (VO) |
Konwerter DC/DC |
3 |
C1P (VG) |
Konwerter DC/DC |
4 |
C1N (VSS) |
Konwerter DC/DC |
5 |
A |
Anoda diody LED podświetlenia ekranu |
6 |
NC |
Styk nieużywany |
7 |
VSS (K) |
Masa / Katoda diody LED podświetlenia ekranu |
8 |
VDD |
Napięcie zasilania z zakresu +2,4…3,3 V |
9 |
RES# |
Reset (wejście, aktywny poziom niski) |
10 |
SCL |
Linia zegara interfejsu I2C (wejście) |
11 |
SDA |
Linia danych interfejsu I2C (typu OD) |
12 |
NC |
Styk nieużywany |
13 |
NC |
Styk nieużywany |
14 |
NC |
Styk nieużywany |