Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 2 gru 2024, o 01:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 16 paź 2015, o 19:41 
Offline
Użytkownik
Avatar użytkownika

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 :P ).

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:
Obrazek

Jak widać, nie ma większego problemu, aby dolutować się tam z taśmą.

Minimalne podłączanie wygląda następująco:
Obrazek

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ń
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Widzę, że syntax coś niepoprawnie wyrównuje niektóre wartości.

font.c -nasza podstawowa czcionka
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


No i w końcu najważniejsze:
display.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
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:
Składnia: [ Pobierz ] [ Ukryj ]
język c
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ń:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak widać, proste jak drut :D

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 :oops: ).

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 :lol:

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.

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO