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



Teraz jest 28 mar 2024, o 22:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 8 sty 2022, o 08:34 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Witajcie.
W końcu postanowiłem zgłębić tajniki obsługi wyświetlacza lcd tft. Padło na wyświetlacz 2,8" na sterowniku ili9341. Sterownik uruchomiony na magistrali SPI sprzętowo.
Oczywiście zajęło mi sporo czasu doprowadzenie do prawidłowej komunikacji, ale się udało. Testy na atmega16 i atmega32 z kwarcem 18 432 000. Korzystam z różnych bibliotek Adafruit, arduino, które w miarę możliwości mojej skromnej wiedzy udało się zaadoptować do tego wyświetlacza. W sumie samą inicjalizację samego TFT, zasadę działania, co z czym..... w miarę dobrze rozumiem, ale niektóre "rozwleczone kody" nie zawsze są dla mnie w pełni jasne. Po prostu użyłem, działa i tyle.

Wszelkie figury, linie, kropki działają prawidłowo. Tekst, pojedyncze znaki ok. Jakby podstawy ogarnąłem. Ale zaczęły się schody. kiedy zacząłem wrzucać jakieś konkretne dane np. typu pomiar z przetwornika ADC. Utworzyłem funkcję zamieniającą wynik pomiaru na string. Funkcja działa prawidłowo, czyli kręcąc potkiem mam wyświetlaną wartość od 0-1023. I tu nie mogę zakończyć tego etapu. Kiedy zmieniam wartość napięcia, to wynik staje się nie czytelny. Zamalowują się cyfry w kwadraty i takie tam różne twory.

Jeśli dobrze rozumiem, to nie są kasowane poprzednie piksele, ponieważ kiedy wyłączę i włączę ponownie zestaw, to wynik jest prawidłowy. Rozumiem, ze trzeba w pełni zrozumieć ideę wyświetlania na takich LCD. Do tej pory używałem typowych 2x16, 4x20 znaków. Tam wyglądało to inaczej.

Jeśli w pętli głównej najpierw wyświetlam prostokąt, jako tło i następnie na nim funkcję do pomiaru ADC, to wynik jest poprawny, czyli czyszczę ten fragment ekranu tłem, ale występuje migotanie cyfr i wiem, że to na pewno babol. Rozwiązanie tego tematu na pewno pozwoli mi ogarnąć kolejne działania z tym LCD.

W tym miejscu proszę o wytłumaczenie, jak prawidłowo podejść do tego zagadnienia. Nie proszę o gotowca oczywiście, ale o teoretyczne wytłumaczenie, jak się do tego zabrać, a żeby było poprawnie. Jakieś fragmenty kodu, link do przykładu, gdzie mógłbym załapać oczywiście byłoby pomocne.

Jak to powinno wyglądać praktycznie. Z tego, co zauważyłem, to potrzebne funkcje (nazwy przykładowe) tft_string();, tft_char(); i na ich podstawie utworzenie funkcji tft_int(); którą napisałem. Są one ze sobą powiązane i zależne. Oczywiście pomijam inne funkcje pozycjonowania, pojedynczy piksel, kwadrat itp, gdzie one również żyją i są powiązane z całością.

Akurat w tych funkcjach, które użyłem, brakuje zmiennej "tło" i tu jest na pewno pierwsza przyczyna.

Proszę o pomoc, jak to rozwiązać. Zamieszczam przykładowy kod, który aktualnie stosuję. Dzięki z góry za zainteresowanie.


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



Main:


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


Wchile:


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



Wiem, że w tym przypadku nie ma tła.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2022, o 13:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2015
Posty: 183
Pomógł: 10

Myślę, że warto w tym przypadku wykorzystać funkcję setTextColor() z bilbioteki Adafruit GFX.

Do problemu możona podejść np. w ten sposób:

1. Zdefiniować bufor na dane w postaci np. tablicy char mojeDane[20]
2. Do aktualizacji bufora wykorzystać funkcję sprintf(). Jednocześnie możesz formatować dane.
3. Przed wejściem do głownej pętli programu, dokonać inicjalizacji wyświetlanych danych np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

4. W głównej pętli programu (wątku), odświeżać dane w buforze i na wyświetlaczu np.:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2022, o 14:40 
Offline
Użytkownik

Dołączył(a): 05 sty 2015
Posty: 393
Lokalizacja: Mielec
Pomógł: 14

Ja bym podeszedl do tego tak:

Dwa bufory, buf1=nowe dane, buf2=stare dane już wyswietlone,
W petli for bym je maskował jeśli w buf1 jest zapisane 0 a w buf2 jest 1 to ma być 0 (pixel zgaszony to zapisać to do buf3=gotowe do wyswietlenia
Natomiast jeśli w buf1 jest 1 a w buf2 jest 0 to ma być 1 i zapis do buf3,
Jesli w buf1 i buf2 jest 1 to do buf3 też zapis 1. Nie tracimy czasu na clf dla tft.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2022, o 16:00 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Dzięki wielkie za zainteresowanie i chęć pomocy.
Będę próbował coś z tego zastosować i dam znać. Mam tylko pytanie o delay_ms(500); w pętli. Rozumiem, że to tylko taki przykład ? No bo jeśli miałoby tak być na stałe, to wiadomo, co by się stało. Jeśli to opóźnienie jest konieczne, to mogę zrobić w przerwaniu, ale po co w ogóle ma być opóźnienie ?

Sorry za tak banalne pytanie, ale jak pisałem wcześniej, to ten typ lcd jest dla mnie nowością i muszę się trochę przestawić z myśleniem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2022, o 02:55 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Dzięki wielkie Draxter32 za pomoc.

Działa wyśmienicie :) Nie wiem, czy prawidłowo napisałem, ale wyświetlanie jest właściwe. Teraz jeszcze muszę wymyślić, jak wyświetlić bardziej przyjazne napięcie. Na poprzednich wyświetlaczach z Mirka książka nie było problemu. Tutaj muszę chwilę pogłówkować.

Szofer.
Gdybyś mógł bardziej przybliżyć Twój patent. Trochę naskrobać, a ja bym dopracował. Ciekaw jestem tej metody.

Main:


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



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



While:


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




Obrazek



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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

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