Dołączył(a): 17 mar 2014 Posty: 334 Lokalizacja: Rybnik
Pomógł: 55
Kilka słów wstępu: Od zawsze miałem słabość do kolorowych wyświetlaczy LCD. Gdy zaczynałem moją przygodę z programowaniem (bascom), chciałem jak najszybciej nauczyć się obsługi takich wyświetlaczy. Potem gdzieś w sieci ujrzałem ten filmik, autorstwa Pana Mirka:
I można by powiedzieć, że był on takim wzorem dla mnie, co chciałbym osiągnąć. Jakiś czas temu wykorzystałem już jeden wyświetlacz z Siemensa C65, w projekcie, który z resztą prezentowałem tutaj na forum, "namiastka komputera pokładowego". Ale to był bascom...
Ktoś może zapytać, po co bawić się "nieznanymi" wyświetlaczami, skoro teraz można kupić dedykowany w dość dobrej cenie. A no można, ale większość z nas posiada duże ilość starej elektroniki, no i co tu z tym zrobić? Wyrzucić szkoda, trzeba wykorzystać.
Tym razem na celownik wziąłem troszkę większy wyświetlacz, pochodzi z telefonu Siemens C75. Kiedyś te telefony były popularne i pewnie u niejednego gdzieś się taki wala. Jego rozdzielczość 132x176 16bitów. W telefonach tych były montowane dwa rodzaje wyświetlaczy, jeden z zieloną płytką o oznaczeniach LPH9157-2 (biblioteka jest właśnie dla niego), oraz drugi z żółtą płytką, nazywany ALPS.
Jako, że w połowie września podjąłem decyzję o nauce C i zakupiłem BB, uznałem że najlepszym sposobem do nauki będzie wykonanie czegoś w praktyce (oczywiście po wcześniejszym przeczytaniu książki od A do Z ).
O wyświetlaczu nie miałem za dużo informacji, jedynie gdzieś na zagranicznych stronach jakieś komendy sterujące. Prawdę mówiąc do tej pory nie wiem, jaki dokładnie sterownik tam siedzi, wiem że jest on w większości zgodny z ILI9163. I to na podstawie dokumentacji tego sterownika opierałem się podczas wszelkich testów. Różnice są między innymi w rozdzielczości wyświetlacza, ilość wysyłanych parametrów.
Na początku opis wyprowadzeń wyświetlacza:
Jak widać, nie ma większego problemu, aby dolutować się tam z taśmą.
Minimalne podłączanie wygląda następująco:
Oczywiście to jest minimalne, warto dodać jednak rezystor od CS do plusa zasilania. Co do pinu RST mamy dwie możliwości, podłączyć go na stałe do plusa zasilania, lub do mikroprocesora. Trzeba to wybrać też w bibliotece. Jeśli podłączamy do plusa, wykonywany jest podczas inicjalizacji reset programowy, jeśli sterujemy linią RST wykonywany jest reset sprzętowy, są tam minimalne różnice co do wartości kilku rejestrów po resecie, mało istotne z naszego punktu obsługi wyświetlacza.
Gdyby kogoś przerażała potrzeba dodatkowego napięcia 12V dla zasilenia podświetlenia spokojnie, są dedykowane układy driverów step-up. Piny GND i LED- nie są połączone.
Wyświetlacz ten zasilany jest typowo(w telefonie) napięciem 2,9V, jednak z napięciem 3.3V również poprawnie działa.
A więc aby nie zanudzać kod: display.h -tutaj dokonujemy wszelkich ustawień
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak można zauważyć, w bibliotece wykorzystuję bibliotekę PetitFS, przystosowaną do tego celu. Tam w pliku diskio.h ustawiamy podłączenie pinu CS karty pamięci:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Cała biblioteka lekkimi zmianami w załączniku wraz z moją biblioteką do obsługi LCD.
Jak widać w pliku display.h mamy możliwość włączania/wyłączania z kompilacji pewnych funkcji. A co dostajemy? -Możliwość wyświetlenie zmiennej jako liczby dziesiętnej w dowolnym miejscu wyświetlacza, wraz z skalowaniem czcionki, -Możliwość wyświetlenia tekstu z pamięci programu w dowolnym miejscu wyświetlacza, wraz z skalowaniem czcionki, -Możliwość czyszczenia wyświetlacza dowolnym kolorem, -Możliwość rysowania dowolnej linii według podanych współrzędnych początku i końca, -Możliwość rysowania prostokątów według podanych współrzędnych dwóch rogów, -Możliwość rysowania okręgów według podanych współrzędnych środka oraz promienia, -Możliwość wyświetlania bitmap 16 bitowych RGB565 oraz 24 bitowych RGB888 prosto z karty SD w dowolnym miejscu wyświetlacza.
Te funkcje wystarczą nam, do stworzenia naprawdę dużej ilości efektów.
W tym samym pliku mamy jeszcze kilka ustawień, są stosowne komentarze.
Fajnie, biblioteka jest ale. No właśnie trzeba było iść na pewne kompromisy: -Zdecydowałem się na wykorzystanie jedynie sprzętowego SPI z powodu prędkości. Jeśli ktoś chce, nie jest problemem zmiana na SPI programowe Więcej ograniczeń jest, jeśli chodzi o wyświetlanie bitmap: -Rozmiar bitmapy nie może przekroczyć 176x132 piksele -Obsługiwane bitmapy 16 bitów są w RGB565, nie windowsowy RGB555 -Z powodu sposobu mapowania pamięci bitmapy na kartę muszą być ładowane obrócone o 90 stopni w lewo -Wysokość bitmapy (czyli po obróceniu o 90 stopni szerokość) musi być podzielna przez 4. Wynika to z struktury pliku, a chciałem aby funkcja działała możliwie szybko.
Wypisane są wszystkie przetestowane przeze mnie komendy sterujące, nie wszystkie wykorzystuję w bibliotece, jednak opisałem je, jeśli ktoś chciałby je wykorzystać. Wyświetlacz obsługuję paletę 8 bitów, 12 bitów i 16 bitów. Biblioteka umożliwia korzystanie jedynie z 8 i 16 bitów, przy czym bitmapy wyświetlać można jedynie w trybie 16 bitowym.
Myślę, że przyda się również przykład pliku main.c, aby nie było niedomówień:
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak widać, proste jak drut
Teraz kilka słów podsumowania: Od czasu gdy zakupiłem BB minął zaledwie miesiąc, świadczy to o tym, jak szybko ta książka uczy. Pomogło również to, że liznąłem w życiu już kilka różnych języków. Nie prawdą jest to co mówią, że trudno jest przejść z bascom na C. Fakt, pewne przyzwyczajenia pozostają i może są jakieś błędy w kodzie, dlatego proszę o wyrozumiałość, w C piszę bardzo krótko. Jedno jest pewnie, napisanie tej biblioteki wiele mnie nauczyło, pomogło rozumieć wskaźniki, podział na pliki i zastosowanie tablicy wielowymiarowej (w bascomie tego nie miałem ).
No i na koniec, pragnąc dogonić wzór, efekty. Mam nadzieję, że Pan Mirek nie obrazi się, że kopiowałem jego efekty oraz, że wykorzystałem jego wizerunek -to dla dobra nauki
Testy wykonywane na Atmega644, kwarc 17,720MHz. Niestety nie udało mi się uzyskać ładnej animacji kota, mimo ładowania tylko małej ramki z miejscem, które ulega zmianie. Ładowanie z karty SD jest za wolne, może moja funkcja ładowania grafiki jest jakaś ociężała, może Pan Mirek ładował to z pamięci programu -nie wiem.
Niemniej, gdyby kogoś interesowało rysowanie linii, okręgów, prostokątów jeden po drugim jest programowo opóźniane dla efektów, funkcje z biblioteki działają stosunkowo szybko.
Załączniki:
Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników