
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 pracy | 3.3V / 5 V |
Opis wyprowadzeń
SYMBOL | DESCRIPTION | |
---|---|---|
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.
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
Kreatywny graficznie hobbysta szaleje :) , Ten ILI9163 + PIC32 z 256kb flash pozwalają naprawdę ponieś się wodzy fantazji . Świetna robota PICmajster
OdpowiedzUsuńDziękuję za uznanie. Tak te 256 kB Flasha i 32 kB RAM w PIC32MM nie ogranicza kreatywności :)
OdpowiedzUsuńPozdrawiam
PICmajster