Energooszczędne wyświetlacze dla mikrokontrolerów
Wyświetlacze pozwalają mikrokontrolerom na wystawienie interfejsu użytkownika
. Mini komputery jak Raspberry Pi mogą użyć większe kolorowe wyświetlacze ze złączem HDMI kosztem większego zapotrzebowania na prąd.
W tym artykule przyjrzę się wyświetlaczom OLED dostępnych dla mikrokontrolerów.
Wyświetlacze OLED
Technologia OLED wykorzystuje organiczne diody elektroluminescencyjne. W odróżnieniu od wyświetlaczy LCD spotykanych na co dzień w ekranach komputerów i laptopów ekrany OLED nie wymagają podświetlenia przez co mogą zaoferować lepszy kontrast (lepsza czerń), czy znacznie mniejsze zapotrzebowanie na prąd. Dostępne w sklepach z elektroniką gotowe moduły z wyświetlaczami OLED wykorzystują zazwyczaj tanią technologię PMOLED, która pozwala na produkcję tylko bardzo małych wyświetlaczy (do 3 cali). Na rynku konsumenckim stosuje się bardziej zaawansowane technologie jak AMOLED pozwalające na tworzenie znacznie większych wyświetlaczy ze znacznie większą ilością pikseli. Wyświetlacze AMOLED można spotkać w niektórych smartphonach, czy telewizorach.
Wyświetlacze OLED zużywają mniej prądu niż wyświetlacze LCD - tym mniej im mniej pikseli jest używanych. Mały wyświetlacz 4" HDMI LCD dla Raspberry Pi pobiera około 0,2A na samo podświetlenie (około 0,25A przy wyświetlaniu obrazu; 5V). 2,7" OLED przeważnie zmieści się poniżej 0,1A (5V).
W sklepach z elektroniką popularne są płytki uOLED (microOLED) z pinoutem I2C lub SPI i rozdzielczości 0,96 lub 1,3" (128x64px, monochromatyczny lub kolor) za kilkadziesiąt złotych. Adafruit oferuje także monochromatyczne białe OLEDy o przekątnej 2,4" i 2,7" i tej samej rozdzielczości 128x64px. Za te wyświetlacze zapłacimy już ponad sto złotych.
Wyświetlacze OLED i Arduino
Powszechnie dostępne wyświetlacze OLED z interfejsem SPI lub I2C posiadają kontroler SH1106 i są obsługiwane przez biblioteki udostępnione na rhydolabz.com. Na githubie można też znaleźć inne biblioteki dla tego kontrolera. Niektórych chińskie
wyświetlacze OLED mogą mieć inny kontroler i będą wymagały innej biblioteki. Wyświetlacze Adafruit jak i niektóre inne wykorzystują kontroler SSD1325 i są obsługiwane przez biblioteki Adafruit GFX/SSD1325.
Wyświetlacze z kontrolerem SH1106 działają na 3.3V, ale można użyć ich z płytkami Arduino pracującymi na 5V (choć zaleca się jednak konwersję do 3.3V lub użycie płytki pracującej na tym napięciu). Wyświetlacze z interfejsem SPI wykorzystują 3 piny tego interfejsu - MOSI, CLK oraz CS (MISO nie jest potrzebne). Dodatkowo potrzebne są dwa piny GPIO - DC oraz RESET. Biblioteki mogą wymagać podania numeru tych dodatkowych pinów. Sposób połączenie i przykład użycia dla Arduino dostępny jest na rhydolabz.com i nie będę go tu już powtarzał.
Wyświetlacze 2,4" i 2,7" Adafruit pracują na 3.3V i do pracy z 5V wymagają konwertera stanów logicznych (dołączonego do zestawu). Całość opisana jest w przewodniku. Ja po prostu przestawiłem Arduino Uno Waveshera na 3.3V (poręczna opcja dodana przez tego producenta) i pominąłem konwerter. Demo ssd1325test
z biblioteki Adafruit SSD1325 może posłużyć do szybkiego sprawdzenia wyświetlacza. Domyślnie demo to używa softwarowego SPI i jeżeli planujemy używać inne urządzenia SPI to trzeba użyć oddzielnego konstruktora wykorzystującego sprzętowy SPI do obsługi tego wyświetlacza (próby użycia sprzętowego i softwarowego SPI mogą wywołać konflikty).
Tekst i grafika na wyświetlaczach OLED
Monochromatyczne wyświetlacze mogą wyświetlać tekst lub proste grafiki. Kolorowe wyświetlacze OLED mogą wyświetlać dość proste kolorowe grafiki, lecz i tak nie będzie to jakość jak w przypadku zwykłych kolorowych ekranów LCD. Wyświetlanie tekstu to zazwyczaj nie problem. Grafiki w postaci bitmap są w przykładach dla kontrolerów SH1106 i SSD1325 zapisane jako tablice bitów, np w przykładzie Adafruit znajdziemy:
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{
...
};
Dla monochromatycznych wyświetlaczy grafikę zapisujemy jako 1-bitowy plik BMP (dwa kolory: biały i czarny) i następnie konwertujemy za pomocą image2cpp, TheDotFactory czy bmp2hex. Generują one tablicę z bajtami gotową do wklejenia do kodu w Arduino IDE (czasami potrzebna drobna modyfikacja, np. wycięcie wymiarów grafiki z tablicy generowanej przez bmp2hex). Testując wyświetlacz Adafruit na ESP32 zapis liczbowy też działał bez problemu.
Wyświetlacze LCD i AMOLED ze smartphonów
Na rynku jest bardzo dużo wyświetlaczy-zamienników do smarphonów. Większość z nich używa interfejsu MIPI-DSI. Użycie takich wyświetlaczy we własnych projektach nie jest łatwe, ale są dwa możliwe rozwiązania - mikrokontrolery STM lub konwerter
do HDMI z wykorzystaniem układu FPGA.
Niektóre mikrokontrolery STM obsługują ten interfejs i są w stanie wykorzystać takie ekrany - choć wymaga to trochę analizy i debuggowania. Kilka przykładów znajdziemy na blogu andybrown.me.uk.
Drugą opcją jest konwerter HDMI pozwalający wykorzystać taki ekran np. z Raspberry Pi. Opisana płytka nie jest jednak dostępna w sprzedaży.
Sharp Memory LCD
Sharp oferuje kilka małych wyświetlaczy Memory LCD, w tym nowy o przekątnej 4,4". Technologia ta coś w rodzaju połączenia ePapieru i LCD. Niskie zapotrzebowanie na prąd i wysoki kontrast wyświetlacza. Rozdzielczość nie jest duża, ale interfejs SPI jest łatwy do wykorzystania. Na tindie.com dostępny jest adapter do tych wyświetlaczy. Jeden z małych wyświetlaczy jest też dostępny jako gotowa płytka w sklepie Adafruit. Efekt podobny do wyświetlaczy OLED.
ePapier - eInk
Wyświetlacze ePapierowe znane z czytników ebooków są też dostępne jako gotowe komponenty do wykorzystania we własnych projektach. Są energooszczędne, mają dobry kontrast, kilka odcieni szarości... jak i relatywnie wysoką cenę i słabszą dostępność. Jako gotowe komponenty dostępne są małe wyświetlacze. Największy to chyba 4,3" Waveshare z własną biblioteką do Arduino. Dodatkowym ograniczeniem tych wyświetlaczy jest zazwyczaj brak zdolności do szybkiego odświeżania obrazu jak i praca tylko w dodatnich temperaturach.
Alfanumeryczne ekrany LCD
Tanie powszechnie dostępne wyświetlacze alfanumeryczne ze sterownikiem HD44780 pozwalają na wyświetlanie tekstu w kilku (zazwyczaj 2-4) wierszach. Połączone z konwerterem do I2C, czy UART są łatwe do wykorzystania we własnych projektach. Kontrast i czytelność tekstu wraz z regulowanym podświetleniem jest bardzo dobra. Niemniej ograniczenie do znaków alfanumerycznych może okazać się czasami zbyt duże i potrzebować będziemy jednego z powyższych wyświetlaczy.
Powiązane artykuły
- Odtwarzanie danych audio na mikrokontrolerach
- Konwersja plików audio na potrzeby przetworników cyfrowo-analogowych
- Odczyt i zapis danych na chipach flash dla mikrokontrolerów
Comment article