e-paper: wyświetlacze w teorii i praktyce [2]
Uwaga! Wszystkie odcinki kursu są dostępne pod adresem.
Przygotowanie bitmapy wyświetlanej przez wyświetlacz e-paper odbiega od przygotowania bitmapy dla wyświetlaczy LCD. Standardowa bitmapa charakteryzuje się rozmiarem proporcjonalnym do rozmiaru wyświetlacza w pikselach i do głębi koloru. Dla monochromatycznych wyświetlaczy bez odcieni szarości jeden bit bitmapy odpowiada jednemu pikselowi, ale dla kolorowych wyświetlaczy z 16-bitową głębia kolorów potrzeba aż 2 bajty bitmapy żeby zapisać informację o jednym pikselu.
Wiemy, że e-paper jest wyświetlaczem monochromatycznym i że napięcie na każdym z pikseli jest zakodowane na 2 bitach. Można próbować tworzyć do wyświetlania bitmapy o 1- bitowej głębi koloru i w trakcie przesyłania do rejestrów SOURCE każdy bit bitmapy konwertować na 2 bity (według zasady podanej w tabeli 1 w pierwszej części artykułu). Przy pierwszych próbach z wyświetlaczem tak właśnie zrobiłem. Niestety okazało się, że ten sposób nie jest dobry. Bitmapa co prawda wyświetlała się, ale z przekłamaniami i z bardzo małym kontrastem. Bitmapę trzeba przekonwertować do postaci monochromatycznej z 2–bitową głębią kolorów i wtedy wyświetla się prawidłowo.
Bitmapa o odpowiednim rozmiarze (w naszym przypadku 800×600 pikseli) przeznaczona do wyświetlania musi być w pierwszym kroku przekonwertowana z postaci kolorowej na postać czarno- białą z zachowaniem odcieni szarości. Do tego celu nadaje się bardzo dobrze dowolny program graficzny potrafiący wykonać taka konwersję. Może to być na przykład GIMP lub Photoshop.
Po otwarciu pliku (rysunek 10) wykonujemy konwersję na postać czarno-białą poleceniem Obraz->dopasowania->czarno-biały. Potem za pomocą krzywych opcjonalnie można przekonwertowany obraz przyciemnić lub zwiększyć kontrast.
Rys. 10. Konwersja na postać czarno-białą w Photoshopie
Tak przygotowaną bitmapę trzeba przekonwertować na postać z 2-bitową głębią kolorów i zapisać w postaci tablicy, która będzie można skompilować w języku C. Do tego celu wykorzystamy darmowy program uC/GUI – Bitmap Convert – rysunek 11. Plik otwieramy standardowym poleceniem File-> Open. Potem konwertujemy ja na wersję z 2-bitową głębią kolorów poleceniem Image ->Convert Into->Gray4.
Rys. 11. Bitmapa otwarta w programie uC/GUI – Bitmap Convert
Przekonwertowaną mapę trzeba zapisać poleceniem File->SaveAs. Do wyboru są formaty: „C” bitmap File, Windows Bitmap File i „C stream”. Dla naszych celów wybieramy format „C” bitmap file. Program generuje plik tekstowy z rozszerzeniem .c zawierający tablicę static GUI_CONST_STORAGE unsigned char z zapisanymi bajtami przekonwertowanej bitmapy. Trzeba ten plik otworzyć w edytorze tekstowym, skopiować zawartość tablicy i wkleić ją do tablicy programu. Po skompilowaniu i przesłaniu kodu wynikowego do pamięci Flash mikrokontrolera otrzymamy na ekranie przygotowany obraz.
Podsumowanie
W artykule pokazaliśmy jak można w praktyce programowo sterować wyświetlaczem e-paper. W testowanym wyświetlaczu KAmodEPAPER producent zastosował prosty driver HX8705 pozwalający na zapisywanie danych do rejestru przesuwnego odpowiadającego z wyświetlanie jednej linii i na automatyczne wybieranie kolejnych linii. Wykonywanie wszystkich sekwencji wyświetlania oraz organizacja pamięci obrazu spoczywa na programie sterującym. Nie jest to zadanie trudne do wykonania dla szybkiego i dobrze wyposażonego mikrokontrolera, ale zajmuje czas procesora. Jednak w układach z uruchomionym systemem RTOS, czy w aplikacjach opartych na przerwaniach, może to nie mieć większego znaczenia. Jak zwykle w przypadku wyświetlaczy o dużych rozdzielczościach problemem są duże objętości plików z bitmapami. W praktyce zapewne trzeba będzie wyposażyć układ sterowania w pamięć masową, na przykład kartę SD zapisanymi bitmapami, lub złącze USB po którym będą przesyłane dane bitmap.
Sam wyświetlacz charakteryzuje się znakomitym kontrastem oraz długim czasem wyświetlania informacji bez odświeżania. Jednocześnie trzeba sobie zdawać sprawę z tego, że zmiana wyświetlanej informacji wymaga w porównaniu do klasycznego LCD relatywnie długiego czasu oraz, że w trakcie zmiany wyświetlacz robi się najpierw czarny, a potem biały i w końcu pojawia się wyświetlana informacja.
Przedstawiony tutaj sposób wyświetlania uwzględnia tylko zapisanie całej bitmapy. Nie ma możliwości zapisania tylko pewnego obszaru po to, by na przykład wyświetlić fragment tekstu. Po to by realizować takie funkcje trzeba by było utworzyć bufor w pamięci RAM mieszczący całą bitmapę, modyfikować ten bufor i w całości zapisywać do wyświetlacza. Bitmapa rozmiarach (800x600x2)/800 piksele ma rozmiar 120000 bajtów. Realizacja tak dużego bufora w pamięci RAM mikrokontrolera może być trudna. Dlatego wydaje się, że tego typu wyświetlacz najlepiej sprawdzi się w aplikacjach, które nie wymagają częstych zmian wyświetlanej informacji, ale ważny jest za to bardzo mały pobór prądu, oraz duży kontrast przy braku podświetlania. Mamy tu tez do czynienia z właściwością do tej pory niespotykaną w elementach tego typu: wyświetlana informacja pozostaje czytelna przez długi czas (dni a nawet tygodnie) po całkowitym zaniku zasilania i czytelna bez utraty jakości. Daje to możliwość wielu nowych zastosowań, które teraz trzeba będzie wymyśleć.