Negatywowy wyświetlacz OLED 0,96″ 128×64

Negatywowy wyświetlacz OLED 0,96″ 128×64
4 (80%) 3 votes

wyświetlacz OLED 0,96" na SSD1306, HTDS-BS96Ten negatywowy wyświetlacz OLED o doskonałej czytelności sprawia, że jego niewielkie rozmiary będą wręcz zaletą. Matryca ma rozmiar zaledwie 0,96″ co stanowi ekran o powierzchni 19 x27mm, i posiada rozdzielczość 128 x64 pikseli. Wyświetlacz zbudowany został na bazie kontrolera SSD1306. Producent zadbał również by liczba wyprowadzeń została zminimalizowana do linii zasilania i magistrali komunikacyjnej TWI (I²C) – łącznie 4.

Moduł może pracować zasilany napięciem do 6V DC i nie wymaga podświetlenia. Jego rewelacyjna czytelność nie zostanie pogorszona nawet przy kącie widzenia do 160°. Następną zaletą jest możliwość pracy w szerokim zakresie temperatur otoczenia  -30 do +70°C. Wymiary modułu przedstawia poniższy rysunek:

HTDS-BS96

Dzięki Wojciechowi mi trafił się wyświetlacz OLED firmy HelTec Automaticon o niebieskim kolorze wyświetlanych znaków. Oznaczenie producenta  to HTDS-BS96.

PCB wyświetlacza OLED 0,96" TWI, HTDS-BS96

Na PCB modułu wyświetlacza można wypatrzeć zworkę w postaci rezystorka 0Ω, do przestawiania adresu bazowego z &H78 na &H7A, co umożliwi przyłączenie do magistrali dwóch egzemplarzy wyświetlacza. Magistrala TWI posiada rezystory podciągające o wartości 10kΩ. Układ wyposażono też w regulator napięcia LDO (Dropout Voltage 250mV @ 100mA) w obudowie SOT-23-3, kodowany 662K. Pełne oznaczenie producentów to LY2508A33M, lub XC6206P332MR.
Typowe zapotrzebowanie na energię modułu wyświetlacza ma mieścić się w zakresie 0,06 do 0,08W – przy pełnym wysterowaniu matrycy. Wypada znacznie lepiej od technologii TFT, LCD i innych.

Gdy już wiadomo co i jak trzeba zabrać się za oprogramowanie by był z tego wyświetlacza pożytek. W tym momencie do wyboru mamy dwie możliwości. Można posłużyć się kodem z forum MCS, lub gotową biblioteką glcdSSD1306-I2C.lib (standardowo w katalogu lib środowiska). Tak się składa, że obydwie te możliwości nie pozwolą na posługiwanie się procedurami do rysowania znaków graficznych np PSET, LINE, BOX, BOXFILL, CIRCLE. Natomiast z powodzeniem można będzie posługiwać się grafikami, ikonami i dowolnie zdefiniowaną czcionką. Biblioteka ma jeszcze parę mankamentów: na chwilę obecną nie działa na µC serii Xmega (testował BARTek), oraz nie umożliwia sterowania dwoma wyświetlaczami, nie da się też nastawić kontrastu wyświetlacza.  Dla zmiany adresu i wartości kontrastu trzeba grzebać w kodzie biblioteki. A szkoda 😥

prezentacja fontów na wyświetlaczu OLED, HTDS-BS96Łącznie z biblioteką dla środowiska Bascom AVR dołączone zostały przykładowe zestawy kroju liter:
• font8x8.font,
• font8x8TT.font,
• font16x16.font

Teraz odpowiem sobie na pytanie ile kodu generuje taka czcionka … i tak każda o rozmiarze 8×8 ze wszystkimi zdefiniowanymi znakami w pełnym zakresie ASCII zajmuje 1788 bajtów, znowu czcionki o rozmiarze 16×16 pikseli 3076 bajtów. Natomiast każde wywołanie / deklaracja użycia czcionki instrukcją SETFONT np  Setfont Font8x8tt pochłania 12 bajtów. Jak widać zastosowanie tej funkcjonalności w µC o niewielkiej przestrzeni flash jest niemożliwe, ale czy na pewno ? 😉

Powyższy kod to zawartość pliku definicji kroju czcionki. Na wstępie można wywalić wszystko po znaku o kodzie 126 albo i wcześniej gdy nie jest planowane używanie znaków innych oprócz standardowych. Jeżeli ktoś będzie chciał modyfikować zawartość pliku definicji czcionki to trzeba wiedzieć, że bardzo istotne są linie o numerach 1 oraz 3. Linia pierwsza to etykieta / nazwa fonta przywoływana później w kodzie instrukcją SETFONT, a linia 3 zawiera dane definiujące parametry liter. W tym przykładzie mamy do czynienia z danymi:

gdzie:
• pierwsza  cyfra – 1 określa wysokość czcionek w pełnych bajtach,
• druga cyfra – 8 określa szerokość czcionki w pikselach
• trzecia cyfra – 8 rozmiar bloku czcionki
• czwarta cyfra – 2 definiuje odstęp między literami, w pikselach

W tym momencie powiem że, moją uwagę przyciągnęły znikome różnice w zawartości plików z definicją czcionek font8x8TT.font i font8x8.font. Gdzie pierwszy ma zdefiniowany odstęp między literami jako 0 a drugi jako 2. W związku z tym zacząłem eksperymentować z tym parametrem. Oto wynik :

prezentacja wyświetlacza HTDS-BS96 w pracy z małym fontem o różnych odstępachprezentacja wyświetlacza HTDS-BS96 w pracy z dużym fontem o różnych odstępachOdstępy między znakami w prezentacji fontów zdefiniowane są na 1, 2, 3, i 4 piksele. Na początku każdej linii widać ikonki, które wykonałem, nie są one istotne dla tej prezentacji. Ciekawym zjawiskiem natomiast jest jaśniejsze świecenie ikonek, w liniach gdzie nie ma napisów. Zaobserwować to można na pierwszej fotce z prezentacją małych liter.

Dla dociekliwych cyfra 0 jako ostatni parametr definiuje odstęp, na połowę szerokości czcionki. Zjada to zasadniczo dużo miejsca, zawężając liczbę znaków jaką możemy zmieścić w jednej linii małego wyświetlacza. Przy małej czcionce odstęp zdefiniowany na 1 piksel to w moim odczuciu zbyt mało i pogarsza czytelność, ale napis w takim przypadku może być zdecydowanie dłuższy. Na witrynie MSC przeczytamy opis tego ostatniego parametru, który ma się nijak do moich obserwacji, bo znajduje zastosowanie do definicji czcionek nie będących typem TT (true type):

The third line contains 4 bytes: 1 (height in bytes of the font) , 8 (width in pixels of the font), 8 (block size of the font) and a 0 which was not used before the ‚truetype’ support, but used for aligning the data in memory. This because AVR object code is a word long.

This last position is 0 by default. Except for ‚TrueType’ fonts. In BASCOM a TrueType font is a font where every character can have it’s own width. The letter ‚i’ for example takes less space then the letter ‚w’. The EADOG128 library demonstrates the TrueType option.

In order to display TT, the code need to determine the space at the left and right of the character. This space is then skipped and a fixed space is used between the characters. You can replace the 0 by the width you want to use. The value 2 seems a good one for small fonts.

Pozostałe linie w pliku definicji czcionki to linie danych, określające znaki wyświetlane na wyświetlaczu, mające swoje odpowiedniki według kodów ASCII.

Teraz może przedstawię krótki przykład zastosowania biblioteki do obsługi wyświetlacza oraz małe czary mary z plikiem definicji czcionki:

Ten kod to brudnopis zawierający dużo zakomentowanych linii, po usunięciu których zostanie parę linijek obsługujących wyświetlacz. Oczywiście jeśli ktoś zechce go przetestować otrzyma u siebie wynik daleki od oczekiwanego, gdyż na wyświetlaczu ukaże mu się napis $#$&’% a nie kaktus jak na fotkach. Definicje i wywołanie ikonek oczywiście trzeba usunąć bądź stworzyć sobie pliki graficzne o takich nazwach. To dlatego, iż jak wcześniej zaznaczyłem w celu zmniejszenia objętości pliku definicji czcionki, jego zawartość poważnie zmodyfikowałem. Te rozwiązanie przedstawię w osobnym opisie bo uważam że warto 😉

Kod jest modyfikacją przykładu załączonego do środowiska IDE. I po zastosowaniu wszystkich dostępnych sztuczek i wyświetlaniu grafik zajmuje 2292 bajtów pamięci flash :mrgreen: jednak nadaje się do wyświetlania jedynie sześciu znaków – liter.

A.D. 2016-02-12 Xmega i biblioteka glcdSSD1306-I2C.lib

Jak informuje kolega BARTek, obsługa tego wyświetlacza została naprawiona, w oprogramowaniu występował bug związany z komunikacją I2C. Na chwilę obecną powstały nowy driver i nowa biblioteke Xmega.lib do przetestowania przez BARTka. Pewno trzeba poczekać na oficjalną informację, i udostępnienie plików przez firmę MCS.

wyświetlacz OLED "biały" A.D. 2016-03-31 Otrzymałem nowy wyświetlacz. Tym razem biały. Ten wydaje się bardziej czytelny, w porównaniu do poprzedniego egzemplarza. Niebieski za to bardziej cieszy oko  😉

 

A.D. 2017-07-20 Po konsultacjach kolegi Michała mamy nową porcję wiedzy:

Tak wiem, jestem zarejestrowany i zalogowany na forum.

Chyba w takim razie coś nie tak ze mną 🙂
wybieram wyświetlacz SSD1306 – wyświetla mi się strona:
jednak na tej stronie są jedynie 2 zdjęcia i link do forum, nie ma tam nic więcej – przynajmniej ja tam nie widzę nic więcej.
widzę kilka załączników, przewertowałem wszystkie posty na 4 stronach.
Załączniki to głównie programy do konwersji grafiki lub generowania fontów.
Na stronie nr.3 – ostatni post na samym dole, napisany przez użytkownika „Mrshilov” jest załącznik w postaci biblioteki o nazwie: SSD1306 buf.zip tyle że ta biblioteka wprawdzie ma obsługę lini i kół, lecz powoduje migotanie wyświetlacza – nie jest to chyba biblioteka o której piszesz w swoim artykule?
Trochę powalczyłem i osiągnąłem pewien „sukces” 🙂
Wprawdzie nie udało mi się uzyskać zadowalającego efektu na bibliotece SSD1306 buf.zip  pomimo wielu starań wyświetlacz nadal miga – prawdopodobnie coś jest nie tak już w momencie inicjalizacji wyświetlacza, ponieważ gdy już coś na nim wyświetlę i odepnę linie SDA i SCL wyświetlacz nadal wyświetla ostatni obraz i nadal miga – nie jest to więc wina odświeżania zawartości. Kombinowałem również z I2C sprzętowym i programowym, z różnymi prędkościami I2C ale nadal nic.
Dodatkowo okazało się że mój wyświetlacz 1,3″ ma kontrolet SH1106 a nie SD1306, są one wprawdzie bliźniacze ale nie każda biblioteka sobie z nim radzi, objawia się to tym że wyświetlacz nie wyświetla nic, albo wyświetla obraz przesunięty o kilka pikseli. Biblioteka SSD1306 buf.zip nie radziła sobie z nim zupełnie, wyświetlacz cały czas był czarny.
Pogrzebałem trochę w sieci i znalazłem ten temat na niemieckim forum: https://bascomforum.de/index.php?thread/390-ssd1306-oled-display/ są tam linki do bibliotek a właściwie do całych paczek z przykładami i bibliotekami.
Jest tam między innymi biblioteka do SH1106, ale najlepsza jest paczka: SSD1306 128×64-I2C.zip obsługuje ona zarówno SSD1306 jak i SH1106, obsługuje wszystkie polecenia rysowania kół, linii i prostokątów, działa rewelacyjnie z oboma typami wyświetlaczy (nic nie miga, wszystko działa poprawnie), nie ma niestety obsługi kontrastu tak jak SSD1306 buf.zip ale to nie jest mi potrzebne.
Jedyna wada to nie jest to biblioteka, a plik przykładu w którym wszystko jest robione na subach, ale moje założenia spełnia w 100% i jestem tym przykładem zachwycony.

nota katalogowa układu LDO XC6206P332MR.pdf (245 pobrań)
nota katalogowa kontrolera LCD SSD1306.pdf (275 pobrań)

Share Button
Tagi , , , , , , , , , , .Dodaj do zakładek Link.

8 odpowiedzi na „Negatywowy wyświetlacz OLED 0,96″ 128×64

  1. Marek mówi:

    Świetnie. Ja mam takie wyświetlacze po SPI i nie udało mi się wyświetlić grafiki BGF. Czy mógł bym liczyć na jakąś pomoc? Dodam że napisy z czcionkami font wyświetla bez problemu, natomiast jak dodam showpic to kompilator wyrzuca mi błąd 5.

    • kaktus mówi:

      Witaj Marku.
      Zaglądnąłem szybciorem tutaj ale nic nie mi nie przychodzi do głowy w tej chwili. Ogólnie mówiąc, każdy błąd zgłaszany przez kompilator, w 99% przypadków spowodowany jest błędami programisty.
      Najtrudniejsza i przynoszącą najwięcej satysfakcji z kolei jest sztuka – umiejętność znajdowania swoich błędów. W ten sposób można się bardzo wiele nauczyć. Wiem z autopsji 😀

      Powiedz jakbym mógł pomóc w rozwiązaniu Twojego dylematu? Zaznaczam, że nie posiadam wersji tego wyświetlacza z interfejsem SPI.

  2. LeVy mówi:

    Witam.

    Jest już dostępna biblioteka obsługująca komendy box, pset, line itp jak i rowniez kontrast na forum mcselec.

  3. Domino mówi:

    Witam.

    Nie mogę znaleźć tej biblioteki z obsługą np. pset. Możecie dać namiary?

    Z góry dziękuję.

  4. Domino mówi:

    Ahaaaa. Dziękuję uprzejmie.

  5. Domino mówi:

    Problem w tym, że mam demo a oni chcą dane rejestracji produktu.

     

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

eighteen − three =

This site uses Akismet to reduce spam. Learn how your comment data is processed.