Okrągły wyświetlacz OLED (1)

Okrągły wyświetlacz OLED (1)
Pobierz PDF Download icon

Okrągły wyświetlacz nie jest podzespołem często stosowanym przez elektroników, chociaż jest idealny w niektórych zastosowaniach. Pierwszym, naturalnym wydaje się budowanie zegarów elektronicznych, w tym zegarków naręcznych typu smartwatch. W artykule opisano sposób aplikacji takiego wyświetlacza ? część pierwsza zawiera omówienie technik programowania sterownika wyświetlacza w języku C, natomiast druga opis zestawu ewaluacyjnego.

W trakcie swojej długoletniej przygody z elektroniką wielokrotnie spotykałem się z koniecznością zastosowania wyświetlacza będącego głównym elementem graficznego interfejsu użytkownika. Nie powinno to dziwić, bo przecież najprostszy nawet wyświetlacz znacznie poszerza możliwości w zakresie interakcji urządzenia z użytkownikiem, dając przy okazji spore pole do popisu programiście czy grafikowi. Muszę przyznać, że najciekawsze z mojego punktu widzenia były zawsze graficzne wyświetlacze OLED, ponieważ, po pierwsze, pozwalają popuścić wodze fantazji w kwestii projektowania interfejsu użytkownika, a po drugie, dzięki niewiarygodnej wręcz jakości obrazu, czynią każde urządzenie niesamowicie atrakcyjnym wizualnie. Niestety w przypadku tych podzespołów pewien problem zawsze stanowiła cena, gdyż nie należą one do rozwiązań budżetowych. Na szczęście sytuacja ta uległa „dobrej zmianie” i niewielki graficzny wyświetlacz OLED możemy zakupić już za kilkanaście złotych, czego dobrym przykładem jest jeden z moich ostatnich projektów „Watch. Zegarek naręczny” opublikowany na łamach „Elektroniki Praktycznej” 12/2015 i 01/2016. Zastosowany w nim niewielki wyświetlacz OLED o rozdzielczości 128×64 piksele może stanowić niezły punkt startowy dla wielu urządzeń przenośnych.

Nie byłbym jednak sobą, gdybym spoczął na laurach i zadowolił się tanim, chińskim modułem, który, z uwagi na swoją grubość, nie będzie optymalnym wyborem w przypadku każdego urządzenia tego typu. Tak się ostatnio złożyło, iż dość dobrze znana na rynku tego rodzaju produktów tajwańska firma Winstar wprowadziła do sprzedaży okrągłe, niewielkie wyświetlacze OLED z kontrolerem na szkle (COG), które idealnie wpisują się w dzisiejszą modę urządzeń z rodziny „wearable” czy IoT, a których to cena zachęca do zastosowań w konstrukcjach amatorskich. Mowa o serii wyświetlaczy WEO128128B, które charakteryzują się następującymi, ważniejszymi parametrami:

- Rozdzielczość 128×128 pikseli.
- Możliwość wyświetlania 16 poziomów szarości, co poprawia estetykę wyświetlanych piktogramów.
- Średnica obszaru aktywnego 30 mm.
- Wymiary modułu 37 mm×41 mm×2 mm (tylko 2 mm grubości!).
- Wbudowany kontroler typu SSD1327ZB.
- Zasilanie 3 V.
- Szeroki wybór dostępnych interfejsów sterujących: równoległy 6800/8080, szeregowe I2C oraz SPI.
- Mały pobór mocy.
- Dostępne kolory świecenia: żółty, biały, niebieski.
- Długi czas bezawaryjnej pracy (rzędu 50 tys. godzin)
- Jasność 100 cd/m2.
- Kontrast 2000:1.
- Szeroki kąt patrzenia w pionie i poziomie rzędu 160°.

Wygląd wyświetlacza OLED z rodziny WEO128128B pokazano na fotografii 1.

Prawda, że wyświetlacz robi wrażenie? Idealnie nadaje się do budowy wszelkiego rodzaju zegarków naręcznych, pulsometrów, urządzeń wspomagających aktywny tryb życia czy wykorzystujących technologię GPS.

Opisując te arcyciekawe peryferia mógłbym, wzorem innych moich publikacji z tego zakresu, ograniczyć się do szczegółowego opisu procedur sterujących niezbędnych do ich obsługi, jednak tym razem będzie inaczej. Postanowiłem opracować ciekawy moduł ewaluacyjny, za którego pomocą zainteresowani czytelnicy będą mogli przetestować prezentowane oprogramowanie, jak też, bez wielkich przeróbek, wykonać praktyczne urządzenie przenośne. Moduł będzie opisany w drugiej części artykułu.

Niezależnie od wszystkiego, tak, czy inaczej, zacząć musimy od bohatera naszego artykułu – modułu wyświetlacza OLED typu WEO128128BLPP3N00000. Jest to wyświetlacz o białym kolorze pikseli, wyposażony w giętką, 24-wyprowadzeniową taśmę FPC przeznaczoną do wsunięcia w gniazdo ZIF o rastrze wyprowadzeń 0,5 mm. Rozkład i opis wyprowadzeń umieszczono w tabeli 1. Zgodnie z tym, co napisano i o czym można się przekonać spoglądając na tab. 1, nowe wyświetlacze z rodziny WEO128128B mają kilka rodzajów interfejsów sterujących, jednak z uwagi na fakt, iż w naszym docelowym systemie mikroprocesorowym nie dysponujemy bardzo szybkim mikrokontrolerem posłużymy się równoległym, 8-bitowym interfejsem danych/rozkazów sterujących, dla którego piny BS[2:1] wyświetlacza powinny zostać połączone z napięciem zasilania. Tego typu rozwiązanie pozwoli na osiągnięcie maksymalnej szybkości transmisji danych, co przełoży się na szybkość rysowania grafik ekranowych. Co więcej, zastosujemy jeszcze dwie inne „sztuczki” sprzętowe, które w dalszym stopniu przyczynia się do zwiększenia wspomnianej prędkości transmisji. Po pierwsze, sygnał wyboru sterownika ekranu CS podłączymy na stałe z masą zasilania aktywując sterownik SSD1327, przez co funkcje odpowiedzialne za transmisję danych nie będą musiały obsługiwać tego sygnału. Po drugie, przyjmiemy, że stanem spoczynkowym sygnału wyboru rodzaju danych DC będzie logiczna jedynka, co oznacza, że przesyłane dane są domyślnie danymi treści obrazu. To pozwoli na dalsze przyspieszenie stosownych funkcji graficznych. Nasza biblioteka nie będzie również obsługiwać sygnału odczytu magistrali sterującej RD, gdyż nie korzystamy w niej z możliwości odczytu danych ze sterownika ekranu. Sygnał ten będzie stale logiczną jedynką.

No dobrze, mamy już garść podstawowych informacji dotyczących naszego wyświetlacza, więc pora zacząć „zabawę” w programowanie! Aby jednak zacząć współpracę z tym arcyciekawym peryferium niezbędne są dwie podstawowe funkcje, które pozwolą na wysłanie do OLED rozkazów sterujących, dzięki którym możliwa jest konfiguracja sterownika SSD1327 lub też danych obrazu. Interpretacja rodzaju danych, które mają być odebrane przez sterownik ekranu jest determinowana poziomem na wejściu DC. Jest to typowe rozwiązanie w sterowaniu wyświetlaczami. Poziom niski na tym wyprowadzeniu decyduje o tym, iż przesyłana wartość zinterpretowana zostanie jako komenda sterująca, natomiast wysoki, iż dana zostanie zinterpretowana jako dana pamięci ekranu. Wspomniane, podstawowe funkcje zamieszczono na listingu 1.

Dysponując funkcjami z list. 1 możemy przystąpić do inicjalizacji naszego wyświetlacza, ponieważ wymaga on skonfigurowania szeregu rejestrów sterownika ekranu, których to wartości zależne są od właściwości kontrolowanego wyświetlacza OLED, jak i specyfikacji producenta modułu. Funkcję inicjalizacyjną pokazano na listingu 2. Brak przeprowadzenia inicjalizacji w zasadzie uniemożliwia poprawne funkcjonowanie modułu OLED, gdyż domyślne ustawienia rejestrów sterujących układu SSD1327 zwykle odbiegają od tych, wymaganych przez producenta wyświetlacza OLED. Aby jednak w pełni zrozumieć znaczenie poszczególnych ustawień sterownika ekranu, niezbędna jest znajomość zawartości stosownego pliku nagłówkowego, którego treść zamieszczono na listingu 3. Dalej, na listingu 4 pokazano funkcję odpowiedzialną za ustawienie aktywnego obszaru ekranu, w którego ramach jest przeprowadzany zapis do pamięci ekranu sterownika SSD1327. Jej użycie upraszcza a zarazem znacznie przyspiesza wyświetlanie obrazów, których wielkość jest inna, aniżeli całkowita, fizyczna rozdzielczość ekranu. Co ważne, dla uproszczenia zapisu do wspomnianej pamięci obrazu, przyjmuje się, iż dopuszczalne wartości argumentów dla osi X muszą być parzyste, co wydaje się być niewielkim ograniczeniem przedstawionej powyżej funkcji jak i następnych. Wynika to z faktu, iż sterownik SSD1327 ma dość nietypową organizację pamięci obrazu, gdzie każdy bajt tejże pamięci przechowuje dane dla 2 kolejnych pikseli obrazu (stąd możliwe jest wyświetlenie 16 poziomów jasności każdego piksela). Czas na funkcje odpowiedzialne za rysowanie prostych elementów graficznych, to jest funkcje umożliwiające wyświetlanie wypełnionego i „pustego” prostokąta na ekranie wyświetlacza, których to treść pokazano na listingu 5.

Teraz z kolei, przedstawię funkcję pozwalającą wyświetlać proste grafiki ekranowe. Jako, że zgodnie z tym, co napisano powyżej, sterownik SSD1327 ma dość nietypową organizację pamięci ekranu, do przygotowania tablic zawierających przeznaczone do wyświetlenia grafiki niezbędne okazało się wykorzystanie specjalistycznego oprogramowania. W tym celu posłużono się najnowszą wersją programu OLEDesigner (v.1.2), którego autorem jest Marcin Popławski. Jest to, co oczywiste, jedno z możliwych rozwiązań tego problemu, lecz moim zdaniem na tyle uniwersalne, komfortowe i łatwe w użyciu, iż może być podstawowym narzędziem dla monochromatycznych wyświetlaczy OLED o takiej organizacji pamięci obrazu. Wygląd okna najnowszej wersji programu OLEDesigner przedstawiono na rysunku 2. Za pomocą tego łatwego w użyciu, ale jakże użytecznego narzędzia, jesteśmy w stanie zaprojektować dowolny element przyszłego interfejsu użytkownika projektowanego urządzenia. Co więcej, bieżąca wersja programu obsługuje następujące formaty danych:

- OPF (Oled Picture File) czyli plik binarny o odpowiedniej strukturze przeznaczony do zastosowań w kompilatorze Bascom.
- BMP o dowolnej palecie barw, gdyż program automatycznie przekształci taki obrazek do trybu monochromatycznego (oraz „przytnie” do formatu 128×128, jeśli rozdzielczość obrazka będzie nieodpowiednia).
- C z tablicą wzorca obrazka zapisaną przy użyciu kompresji mRLE (zmodyfikowany algorytm RLE).
- C z tablicą wzorca obrazka zapisaną przy użyciu typowej kompresji RLE.

Otrzymany w ten sposób obraz możemy dowolnie edytować jak i zapisywać/odczytywać korzystając z dowolnego z dostępnych formatów danych. Sama edycja jest bardzo intuicyjna. Po wyborze odpowiedniego koloru z rozwijanej listy i wciśnięciu lewego przycisku myszy nanosimy wybrany kolor na obraz. W celu łatwiejszej identyfikacji kolory w palecie są ponumerowane. Pod prawym przyciskiem myszy kryje się gumka, za pomocą której usuwamy niepotrzebny kolor. Pliki OPF jak i C mają następująca strukturę danych:

pierwszy bajt określa szerokość obrazka,

drugi bajt określa wysokość obrazka,

pozostałe bajty to dane kolejnych pikseli obrazu poddane prostemu algorytmowi kompresji, przy czym zgodnie z organizacją pamięci sterownika SSD1327, każdy wspomniany bajt przechowuje informację o dwóch, kolejnych punktach obrazu.

Jak pokazały testy praktyczne, najlepszy stopień kompresji obrazków przechowywanych w ten sposób daje zmodyfikowany algorytm RLE (nazwany tutaj mRLE), którego ideę działania przedstawia tabela 2. Pomimo swojej prostoty zapewnia on całkiem spory stopień kompresji, co zdecydowanie przekłada się na zmniejszenie zajętości pamięci Flash mikrokontrolera. Pamiętamy przecież, że stosowne wzorce przechowujemy zazwyczaj w pamięci Flash. Na listingu 6 przedstawiono funkcję odpowiedzialną za odczytanie, dekompresję i wyświetlenie tak zapisanego obrazka.

W tej chwili przyszedł czas na obsługę ostatniego elementu interfejsów graficznych, czcionek ekranowych! Aby jednak umożliwić wygodną obsługę wielu czcionek ekranowych, konieczne było wprowadzenie nowego typu danych, którego definicję pokazano na listingu 7. Bazując na zdefiniowanej powyżej strukturze, wprowadzono funkcję, która korzystając z globalnej zmiennej static fontDescription CurrentFont pozwala na ustawienie bieżącej czcionki ekranowej – pokazano ją na listingu 8. Wreszcie przyszedł czas na funkcję umożliwiającą rysowanie znaków przy użyciu bieżącej czcionki ekranowej – zamieszczono ją na listingu 9.

Jak zwykle, do wygenerowania plików zawierających wzorce czcionek, oparte na czcionkach systemu Windows, polecam doskonały program PixeLab autorstwa Marcina Popławskiego, którego szczegółowy opis znalazł się w Elektronice Praktycznej 06/2015.

Robert Wołgajew, EP

 

Autor składa podziękowania panu Sławomirowi Szweda z firmy Unisystem za dostarczenie wyświetlacza opisywanego w artykule. Więcej informacji nt. wyświetlacza oraz karta katalogowa są dostępne na stronie www.unisystem.pl.

DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik październik 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje październik 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna październik 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich październik 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów