środa, 18 lipca 2018

ILI9163 = ST7735 kolorowy wyświetlacz LCD - biblioteka dla PIC32MM.

 Tym razem bierzemy na widelec kolorowy wyświetlacz LCD o rozdzielczości 128x160 i przekątnej ekranu 1,8" oparty na sterowniku ILI9163 Tajwańskiej firmy ILITEK. Inspiracją do zainteresowania się tym wyświetlaczem  była prośba czytelnika bloga o pomoc w konwersji biblioteki dla 32-bitowego MCU PIC32MM firmy Microchip. Wyświetlacz do testów zakupiłem w  cenie ok 25 zł . Trudno się dopatrzyć producenta , ktoś się boi sygnować gotowy produkt swoim logo z tego względu do poważniejszych projektów taki produkt raczej nie ale dla hobbysty czemu nie . Wygląda schludnie zobaczymy jak sobie radzi z wyświetlaniem.

Dokumentacja w postaci datasheet jest raczej beznadziejna , sprawia wrażenie jakby nie dotyczyła naszego wyświetlacza i w sumie tak jest bo dotyczy tylko samego chipsetu osadzonego w jakimś kosmicznym wyświetlaczu. W linkach mamy odnośnik do dokumentacji. Z wyświetlaczem rozmawiamy po SPI. Po rewersie wyświetlacza znajduje się gniazdo kart SD w sumie to chyba zaleta :), można na niej trzymać np. bitmapy do wyświetlania. Wadą jest pamięciożerność, do opisu 1 pixela potrzebujemy typowo aż 16 bitów i niezbyt duża szybkość pracy, przydałoby się sterowanie równoległe 16-bitowe. Ale jak już wspomniałem dla celów hobbystycznych jest oki. Wyświetlacz z tym chipsetem znajdziemy w sprytnej płytce Microchipa : PIC16F18446 Sensor Board i zasadniczo do płytki tej znajdziemy również kod dla PIC16 8-bitowego ale ja postanowiłem zrobić konwersję innej biblioteki , która wpadła mi pierwsza w oko. Najłatwiej konwertuje się biblioteki napisane dla PIC lub AVR i takie właśnie znalazłem na GitHub-ie. Ostatecznie z kilku bibliotek wybrałem to co mi się w nich podobało plus dodałem coś od siebie i w efekcie mamy jedną fajną bibliotekę dla PIC32MM.



Na początek garść podstawowych informacji  :

Specyfikacja

Sterownik ILI9163
Sterowanie 3-wire SPI (MOSI + CLK + CS)
Rozdzielczość 128*160
Wymiar wyświetlacza 1.8"
Kolor pixeli kolorowy RGB , 1 pixel opisany jest na  16bitach
Kąt widzenia >?
Temp. pracy (℃) -40~85
Napięcie pracy3.3V / 5 V


Opis wyprowadzeń


SYMBOLDESCRIPTION

LED Napięcie zasilania podświetlenia 3.3V

SCK serial clock SPI

SDA MOSI - serial data SPI

A0 komenda/dana, high level for command, low level for data

RESET Reset pin is active low (0 = reset, 1 = ready)

CS Chip select,, aktywny - stan niski

GND masa

VCC zasilanie +3.3V lub +5 V


Wyświetlacz podłączam do mojej płytki developerskiej dla PIC32MM. W bibliotece nie korzystamy ze sprzętowego SPI ale z prostej programowej implementacji. Takie podejście jest bardziej uniwersalne i jeśli ktoś zechce skonwertować moją skonwertowaną :) bibliotekę na procek innego producenta to będzie to bardzo proste. Wato jednak mieć na uwadze, że na sprzętowym SPI  wyświetlacz działa znacznie szybciej . Połączenia jakie zastosowałem pomiędzy PIC32MM a LCD wyglądają następująco :

PIC32MM0256GPM048 --> LCD ILI9631

RB3 --> SDA (MOSI)
RB8 --> SCK
RC5 --> CS
RC3 --> A0
RC4 --> RESET

Jest możliwe zejście z 5-pinów sterowania do 3 ale ja do testów biblioteki wykorzystam wszystkie 5 pinów.
Największą frajdę z obcowaniem z wyświetlaczem powinna dać konwersja bitmap i sprawdzanie efektu końcowego na wyświetlaczu :) W linkach poniżej artykułu zamieściłem odnośnik do dwóch na szybko znalezionych programów konwertującego bitmapy do kodu w C  , takich programów  jest wiele.  Warto też rzucić okiem na program GLCD font creator za pomocą , którego możemy stworzyć swoją czcionkę czy dowolne znaki, program jest naprawdę fajny.


Warto wiedzieć, że chipset ILI9163 jest tożsamy z ST7735 więc biblioteka powinna działać na obu LCD tak samo.
W bibliotekach dla ILI9163 z którymi się zetknąłem w necie, autorom umknęła jedna ważna funkcjonalność, która jest bardzo pożądana. Mianowicie wyświetlanie liczb typu integer lub float. O ile ktoś z większym doświadczeniem w języku C bez trudu sobie z tym poradzi o tyle dla początkujących może to być poważny problem. W mojej bibliotece dla PIC32MM i ILI9163 znajdziemy funkcję do wyświetlania liczb typu integer i float i bez trudu wyświetlimy wartości liczbowe takie jak np. czas, temperatura czy odczyty z ADC. I to wszystko z możliwością skalowania wielkości wyświetlanych znaków. Jak dla mnie rewelacja.
Bibliotekę w prosty sposób możemy przenieść z GitHuba do MPLABX-IDE za pomocą opcji CLONE, którą znajdziemy w menu Team w MPLABX-IDE, prościej i wygodniej się już nie da.
W pliku main.c zakomentowane zostały przykładowe funkcje, aby zobaczyć efekt ich działania trzeba je kolejno odkomentować i podziwiać efekt na wyświetlaczu.

Początkowo byłem trochę sceptycznie nastawiony do wyświetlacza ale w miarę uruchamiania kolejnych funkcji w bibliotece coraz bardziej się do niego przekonywałem. Niewątpliwą zaletą jest możliwość zrobienia efektownej i kolorowej prezentacji danych czy też zrobienie miłego dla oka menu sterującego etc. Kreatywny graficznie hobbysta może tutaj poszaleć. Nie wiem przypadkiem czy jakiś kolejny projekt płytki developerskiej MCU nie oprę na tym wyświetlaczu.

UWAGA :
Postanowiłem rozszerzyć artykuł o alternatywną bibliotekę opartą o sprzętowy SPI , moc i szybkość będzie z nami. Pójdziemy dalej i  zminimalizujemy ilość połączeń z LCD z 5 szt do 3 . Będzie się działo ....

Dla sprzętowej biblioteki SPI , połączenia jakie zastosujemy będą następujące :

PIC32MM0256GPM048 --> LCD ILI9631

RB3 --> SDA (MOSI)
RB8 --> SCK
RC3 --> A0 
               CS --> Ground
               RESET --> RC (10k + 10uF)

Widzimy zatem, że pozbyliśmy się połączenia CS i RESET. Linię CS od strony wyświetlacza łączymy do masy a RESET podłączamy do układu RC (w/g rysunku poniżej) co umożliwia automatyczny reset sprzętowy LCD po podaniu zasilania.





Zapraszam do korzystania z biblioteki z programowym SPI i sprzętowym ze zminimalizowaną ilością pinów sterujących. Można się naocznie przekonać jak szybko sprzętowa wersja chodzi w porównaniu do programowej symulacji SPI.

Nadmienię tylko, że do obsługi sprzętowej SPI nie korzystam z funkcji od Microchipa z MCC , zrobiłem ją sam, najprościej jak tylko się dało. SDI w konfiguracji SPI jest wyłączone, nie korzystamy z informacji zwrotnych bo takowych brak. Biblioteka korzysta z SPI2 dla którego można prawie dowolnie przyporządkować piny za pomocą PPS. Prędkość SPI2 jaką ustawiłem to ok 12.5 MHz . LCD daje radę tak szybko przyjmować dane więc efekt jest zarąbisty. W wersji sprzętowej biblioteki po wgraniu wsadu odłączyć zasilanie i ponownie włączyć (patrz RESET)


Pozdrawiam
picmajster.blog@gmail.com



Linki :

ILI9163 - biblioteka z programowym SPI dla PIC32MM na GitHub
ILI9163 - biblioteka ze sprzętowym SPI i ograniczoną ilością pinów dla PIC32MM na GitHub
ILI9163 - datasheet
Program do konwersji bitmap do C dla Win.
Program do konwersji bitmap do C dla Win, Linux, OS
Konwersja zdjęć do zadanego wymiaru.
GLCD-font-creator ,rewelacyjny program do tworzenia własnych znaków i czcionek

2 komentarze:

  1. Kreatywny graficznie hobbysta szaleje :) , Ten ILI9163 + PIC32 z 256kb flash pozwalają naprawdę ponieś się wodzy fantazji . Świetna robota PICmajster

    OdpowiedzUsuń
  2. Dziękuję za uznanie. Tak te 256 kB Flasha i 32 kB RAM w PIC32MM nie ogranicza kreatywności :)
    Pozdrawiam
    PICmajster

    OdpowiedzUsuń