Serwisy partnerskie:
Close icon
Serwisy partnerskie

Wokół Arduino: wyświetlacze graficzne cz.4 - moduły, budowa, zadania

Obecnie największe zainteresowanie elektroników budzą małe kolorowe wyświetlacze i ekrany dotykowe. Budzą zainteresowanie, ale też liczne pytania, wątpliwości i obawy. Nic dziwnego, sytuacja rynkowa szybko się zmienia, dostępne są liczne mniejsze i większe wyświetlacze o różnych właściwościach i co ważne, mające różne, często niezbyt wygodne do wykorzystania interfejsy. W niniejszym kilkuczęściowym artykule przedstawione są różne aspekty zagadnienia, które osobom zainteresowanym rozjaśnią obraz sytuacji i pomogą praktycznie wykorzystać różne wyświetlacze i ekrany.
Article Image

W trzech pierwszych artykułach z cyklu „Wokół Arduino” dotyczących wyświetlaczy graficznych dowiedzieliśmy się, że po pierwsze tak naprawdę chodzi o wyświetlacze matrycowe, zawierające x kolumn i y linii, co daje x*y pikseli na ekranie. Sterowanie matrycowe pozwala znacząco zmniejszyć liczbę niezbędnych linii sterujących, niemniej w wyświetlaczach o dużej rozdzielczości liczba linii sterujących matrycą jest duża, równa sumie x+y.

Przykładowo malutki jak na dzisiejsze czasy wyświetlacz monochromatyczny 128×64, zawierający 8192 pikseli, musi mieć 128 + 64, czyli 192 linie sterujące. Jakiś układ scalony lub kilka układów scalonych musi podać na te 192 linie odpowiednie napięcia. Na pewno potrzebne są 192 wyprowadzenia układu scalonego lub układów scalonych. Tak wygląda sytuacja od strony matrycy, ekranu.

Po drugie, wiemy już, że wyświetlacze graficzne są dołączane do mikrokontrolera za pomocą standardowych interfejsów, bardziej lub mniej popularnych, zawierających niewiele linii. Niewielkie wyświetlacze mogą być sterowane za pomącą powolnego, dwuliniowego interfejsu I2C. Szybszą transmisję zapewnia szeregowy, 3- albo 4-liniowy interfejs SPI. Bardzo szybkie są interfejsy z linią różnicową rodziny LVDS, zawierające kilka linii. Nawet równoległy interfejs 24-bitowy ma liczbę linii nieporównanie mniejszą, niż wynosi liczba linii sterujących matrycą.

Dwa podstawowe zadania modułu wyświetlacza do Arduino

Oczywiste jest, że moduł wyświetlacza musi mieć wbudowany układ scalony lub kilka układów scalonych, które po pierwsze obsłużą linie i kolumny matrycy, a po drugie będą współpracować z interfejsem, dostarczającym informacje z mikrokontrolera. W największym uproszczeniu można to zobrazować jak na rysunku 1a.

Ta podstawowa idea jest prosta i jasna. Jednak pomału wkraczamy w zagadnienia obszerne i skomplikowane, gdzie napotkamy najróżniejsze rozwiązania, a liczba tych rozwiązań, związanych z nimi opcji i innych szczegółów może spowodować zawrót głowy. Nie sposób tego wszystkiego przedstawić krótko i zwięźle, dlatego musimy podchodzić do zagadnienia kilkakrotnie, z różnych stron.

Rys.1 Moduł wyświetlacza - rysunek

Rysunek 1a pokazuje, że obwody sterujące w module wyświetlacza muszą zrealizować przynajmniej dwa podstawowe zadania:

  • dogadać się z mikroprocesorem,
  • obsłużyć matrycę.

Do tego powinny zawierać pamięć grafiki (GRAM) do zapamiętania co najmniej treści jednego obrazu. Można więc byłoby przypuszczać, że w module wyświetlacza zgodnie z rysunkiem 1b montowanych jest kilka układów scalonych:

  • dedykowany sterownik takiego czy innego interfejsu,
  • pamięć (G)RAM,
  • dedykowany sterownik matrycy (LCD, OLED albo LED).

Mogłoby tak być, ale zwykle jest inaczej. Przegląd rozwiązań zacznijmy od przypomnienia budowy starszych odmian wyświetlaczy.

Budowa modułu wyświetlacza do Arduino

Wiemy, że w małych popularnych modułach wyświetlaczy znakowych (nie graficznych), zawierających jedną lub dwie linie po 16 znaków, wykorzystywany jest układ scalony Hitachi HD44780 lub jego odpowiedniki. Większe wyświetlacze znakowe wymagają większej liczby takich scalonych sterowników, jak widać na fotografii 2, pokazującej wyświetlacz znakowy 20×4, zawierający aż pięć zalanych czarną masą układów scalonych (zgodnych z) HD44780.

Być może już coś słyszałeś o scalonych sterownikach wyświetlaczy graficznych, takich jak KS0108/0107B, SED1520 KS0713 M66004, T6963C PCD8544 (Nokia 3310) czy S1D15G14 (Nokia 3510i). Fotografia 3 pokazuje tylną stronę wyświetlacza graficznego 128×64 z trzema sterownikami KS0108/0107.

Fot.2 Wyświetlacz znakowy 20×4

Analogicznie można się spodziewać, że wyświetlacze graficzne o większej rozdzielczości oraz kolorowe będą zawierać jeszcze większą liczbę układów scalonych.

NIE! Wymienione sterowniki graficzne, poczynając od KS0108, są już mocno przestarzałe. Dziś wszystkie obwody sterujące i zasilające najczęściej zintegrowane są w jednym układzie scalonym. Taki pojedynczy układ scalony po pierwsze przeznaczony jest do konkretnego typu matrycy: albo OLED, albo LCD. Warto też nadmienić, że matryce klasycznych diod LED zwykle są obsługiwane nieco inaczej i z uwagi na niewielką popularność graficznych wyświetlaczy LED nie będziemy tego omawiać.

Po drugie, konkretny scalony sterownik przeznaczony jest do obsługi matrycy o określonej liczbie linii i kolumn. Co prawda zdarza się, że matryca ma nieco mniej linii lub kolumn, niż mógłby obsłużyć współpracujący scalony sterownik (co jest wspomniane w Kursie Arduino w kontekście SH1106), jednak generalnie dany sterownik jest przeznaczony do konkretnego wyświetlacza o określonej liczbie pikseli (linii i kolumn), ewentualnie dla rodziny wyświetlaczy o bardzo zbliżonych parametrach, albo LCD, albo OLED.

Fot.3 Tylna strona wyświetlacza graficznego 128×64 z trzema sterownikami KS01080107

Układ sterujący musi mieć wiele linii wyjściowych, sterujących matrycą. Aby wysterować monochromatyczną matrycę zawierającą x kolumn oraz y rzędów, czyli zawierającą x*y pikseli, sterownik musi mieć x+y przeznaczonych do tego wyjść – wyprowadzeń. Natomiast do wysterowania kolorowego ekranu RGB takich wyjść - wyprowadzeń sterownik musi mieć 3 razy więcej, bo każdy piksel składa się z trzech subpikseli RGB.

Mówimy tu o układach scalonych, ale trzeba podkreślić, że są to bardzo specyficzne układy scalone, które są maleńkie, mają co najmniej setki wyprowadzeń, nie mają obudowy i są w zaskakujący sposób montowane. Współczesne moduły wyświetlaczy graficznych nie zawierają tylu części, co starsze moduły z fotografii 2 i 3. Oto szczegóły.

Obwody wyjściowe sterownika - wyświetlacze OLED

Dla popularnych maleńkich wyświetlaczy OLED 128×64 potrzebny jest scalony sterownik lub sterowniki z 192 wyjściami. Do obsługi najpopularniejszych dziś wyświetlaczy OLED 128x64 służy pojedynczy układ scalony SSD1306 albo SH1106, który może wysterować matrycę 132×64.

Dla małego kolorowego wyświetlacza RGB 128×128 potrzebnych jest 512 wyjść (3×128 + 128)!

Tak! Ponad 500 końcówek wyjściowych! I scalony sterownik SSD1351 dla wyświetlaczy OLED RGB 128×128 ma 595 wyprowadzeń!

Dla niewielkiego kolorowego wyświetlacza RGB 240×320 potrzeba 1040 (3×240 + 320) wyprowadzeń! Popularny scalony sterownik ILI9341 dedykowany do małych wyświetlaczy LCD RGB 240×320 ma w sumie 1278 wyprowadzeń!

Często jednak nawet po rozebraniu modułu wyświetlacza jest kłopot ze znalezieniem scalonego sterownika!

Nic dziwnego! Układ scalony SSD1306 ma 281 wyprowadzeń i wymiary 6,76mm×0,86×0,3mm. Wspomniany SSD1351 ma 595 wyprowadzeń i wymiary 10,7×1,5×0,3mm. A 1278-wyprowadzeniowy ILI9341 ma rozmiary 15,56×0,65×0,28mm.

Rys.4 Rozmieszczenie wyprowadzeń scalonego sterownika SSD1306

Sterowniki te nie mają obudów, a wszystkie wyprowadzenie umieszczone są na jednej stronie płytki krzemowej. Rysunek 4 pokazuje rozmieszczenie wyprowadzeń scalonego sterownika SSD1306. Te wyprowadzenia to nie są typowe końcówki lutownicze, nazywane pads, co można przetłumaczyć jako punkty lutownicze. Po angielsku pad to podkładka, wkładka, poduszka. Wyprowadzenia te nazywane są też bumps, co znaczy wybrzuszenia, pagórki, guzy, wyboje.

Rysunek 5 wzorowany na karcie katalogowej ILI9341 pokazuje szczegóły. Ponieważ wymiary i przerwy między wyprowadzeniami (pads, bumps) są tu rzędu 0,014...0,085mm (14–85 mikrometrów), wymagana jest ogromna dokładność, a ścieżki na płytce czy szkle mogą mieć jeszcze mniejsze szerokości.

Rys.5 Wymiary bumps - ILI9341

Ta „strona czynna” sterownika scalonego (chip) jest bowiem montowana albo na płytce drukowanej, zwykle elastycznej, albo wprost na szkle wyświetlacza. Dwa przykłady zamontowania scalonego sterownika pokazane są na rysunku 6.

Najbardziej dociekliwi Czytelnicy mogą dokładniej zbadać fascynujące zagadnienia związane z montażem takich układów, a właściwie gołych scalonych struktur na różnych podłożach. W tym celu można wpisać w wyszukiwarkę takie hasła jak: COF (Chip-On-Film, Chip On Flexible), COP (Chip-On-Plastic), COG (Chip-On-Glass) czy dotyczący „montażu z dziurą” TCP (tape carrier package).

W każdym razie współczesne wyświetlacze zawierają specjalizowane, dedykowane, maleńkie scalone sterowniki, montowane bez obudowy, ewentualnie zalewane klejem. Sterowniki te mają setki, a nawet ponad tysiąc wyprowadzeń.

Rys.6 Przykłady zamontowania scalonego sterownika

Wyjścia sterujące w wyświetlaczach większej rozdzielczości

W wyświetlaczach o większej rozdzielczości sumaryczna liczba wyjść sterujących matrycą musi być dużo większa niż 1000. Przykładowo sterownik OTM8009A przeznaczony dla wyświetlaczy 480RGB×864, o rozmiarach 24,0×1,38×0,2mm, ma 2075 wyprowadzeń. Sterownik ILI9881C przeznaczony do wyświetlaczy 800RGB×1280, o rozmiarach 27,84×0,86mm, ma 3094 wyprowadzenia! Ponad trzy tysiące!

Rozmiary padów i przerw między nimi są w nim rzędu 0,015mm (15 mikrometów), co stwarza bardzo wysokie wymagania przy montażu na płytkach. Dla porównania grubość (średnica) ludzkiego włosa to przeciętnie 0,06...0,08mm, czyli 60...80 mikrometów.

Dlatego w przypadku wyświetlaczy o większej rozdzielczości stosuje się więcej niż jeden układ scalonego sterownika. Współczesne telewizory, monitory i smartfony mają ekrany zawierające ponad 2...4 tysięcy kolumn i rzędów, a wymagana liczba wyjść do sterowania ich subpikselami RGB przekracza 10 tysięcy. Realizacja układu scalonego z kilkunastoma tysiącami wyprowadzeń, nawet jeśli możliwa, to jest z kilku powodów niepraktyczna. Stąd podział i zastosowanie kilku układów scalonych.

Wsparciem dla głównego, bardzo skomplikowanego sterownika mogą być prostsze układy pomocnicze, służące tylko do sterowania elektrodami wspólnymi (w wyświetlaczach TFT LCD nazywane są one Gate Drivers). W dużych wyświetlaczach LCD stosuje się kilka głównych sterowników (tzw. Source Drivers) i kilka pomocniczych (Gate Drivers) według rysunku 7 (wg materiałów Solomon Systech).

Nazwy Source/Gate Drivers związane są z budową ekranów LCD z aktywną matrycą. Otóż ekrany OLED i LCD o niezbyt dużej liczbie linii, powiedzmy do 64, mogą być i są realizowane jako proste matryce pasywne. I właśnie najpopularniejsze dziś wyświetlacze OLED 128×64 mają zwyczajną matrycę pasywną. Pasywne mogą być też małe matryce LCD.

Rys.7 Wyświetlacz TFT LCD z 3 głównymi i 2 pomocniczymi sterownikami

Ważne znaczenie ma tam współczynnik wypełnienia (Duty Cycle), wyznaczony przez liczbę rządków wyświetlacza. Jeśli rządków jest 8, to współczynnik Duty Cycle, czyli wypełnienie impulsów, wynosi co najwyżej 1/8. W matrycy pasywnej każda z 64 linii jest pobudzana tylko przez co najwyżej 1/64 czasu/okresu/cyklu odświeżania, a w przypadku LED i OLED impuls prądu musi mieć wartość 64 razy większą niż średnia wartość prądu tego segmentu. Mała wartość wypełnienia rodzi problemy zarówno związane z wydajnością prądową sterownika, jak też właściwościami diod OLED, które muszą pracować przy silnych impulsach prądu.

Podobny problem jest z pasywnymi matrycami LCD (PM LCD). Dlatego w wyświetlaczach o większej rozdzielczości wręcz konieczne jest stosowanie matryc aktywnych (Active Matrix). Aktywne matryce LCD zawierają z reguły jeden tranzystor polowy na każdy (sub)piksel, jak pokazuje rysunek 8.

Rys.8 Aktywna matryca LCD

Nie wchodząc w szczegóły, można powiedzieć, że w danej chwili krótki impuls pobudza jeden cały poziomy rząd (row) przez podanie impulsu na poziome linie połączone z bramkami (gates) tranzystorów, więc służy do tego „sterownik bramek”, czyli Gate Driver. W tym czasie, gdy pobudzane są bramki tranzystorów danego rządka, na pionowe linie połączone ze źródłami (sources) tranzystorów podawane są napięcia, które najprościej biorąc, zadecydują o jasności poszczególnych pikseli tego aktywnego w danej chwili rządka. Sterowane są tu źródła (sources) tranzystorów matrycy, stąd nazwa Source Drivers.

Obwody Source Drivers są wielokrotnie bardziej skomplikowane niż obwody Gate Drivers, ponieważ muszą nie tylko sterować jasnością, ale też dodatkowo zrealizować tak zwaną korekcję gamma. Korekcja gamma jest wymagana z uwagi na nieliniowość ludzkiego wzroku i nieliniowość wyświetlacza, a celem jest to, żeby przesyłane z procesora cyferki od 0 do wartości maksymalnej, powodowały wrażenie liniowej zmiany jasności.

Większe matryce OLED też są aktywne (AMOLED), tylko zawierają co najmniej dwa tranzystory na każdy (sub)piksel – szczegóły na rysunku 12 w EdW 9/2019 str 39.

W matrycach aktywnych: AMOLED i AM LCD (TFT LCD) nie ma problemu współczynnika wypełnia, który może wynosić 0,1% lub jeszcze mniej. Nie ma, ponieważ nawet tak wąski impuls wystarczy, by naładować pojemność (sub)piksela, która poniekąd pełni funkcję pamięci stanu tego (sub)piksela.

W każdym razie jeden układ scalonego sterownika lub kilka układów, muszą mieć taką liczbę wyjść, jaka jest sumaryczna liczba rzędów i kolumn matrycy obsługiwanego wyświetlacza.

Omówiliśmy z grubsza obwody wyjściowe sterujące matrycą. A jak wyglądają pozostałe obwody?

Omówimy je w następnym odcinku.

Tematyka materiału: OLED
AUTOR
Źródło
Elektronika dla Wszystkich luty 2020
Udostępnij
UK Logo