ATNEL tech-forum https://forum.atnel.pl/ |
|
SSD1306 OLED - Przesuwanie się bitmap. https://forum.atnel.pl/topic23630.html |
Strona 1 z 1 |
Autor: | Draxter32 [ 23 lut 2021, o 16:49 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Spróbuj zmienić w funkcji mk_ssd1306_drawBitmap_P, linię (numer 7 poniżej): język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. na coś takiego: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. lub takiego |
Autor: | Morales [ 23 lut 2021, o 19:17 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Niestety nie pomogło ;/ |
Autor: | Draxter32 [ 23 lut 2021, o 23:00 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Nie wiem jakiego kompilatora używasz i jakiej architektury ale może spróbuj zmienić typ zmiennej z int na przynajmniej uint8_t lub uint16_t. Być może dochodzi do overflow jeśli użyty int faktycznie posiada przedział wartości <-128 ... 127> |
Autor: | Morales [ 23 lut 2021, o 23:19 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Próbowałem już wcześniej zmienić typy zmiennych int na uint16_t, jednak żadnego efektu to nie przeniosło... Problem musi tkwić albo w funkcji mk_ssd1306_drawBitmap_P albo mk_ssd1306_setPixel. Ewidentnie wywołanie bitmapy powoduje przesunięcie się jakby punktu początkowego całego obrazu w prawą stronę. Tak przesunięty obraz "wychodzi" z drugiej strony i przesuwa logo... Analizowałem obie te funkcję i naprawdę nie widzę tam błędu. W filmach Pana Mirka takie rozwiązanie działało... Dodam, że używam wyświetlacza z pinami D/C, CS, REST |
Autor: | xentis [ 24 lut 2021, o 17:38 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Morales napisał(a): Problem musi tkwić albo w funkcji mk_ssd1306_drawBitmap_P albo mk_ssd1306_setPixel No to nie "albo" tylko sprawdź to na żywym organizmie. Zamiast bitmapy wysyłaj jeden piksel i będziesz widział czy też się przesuwa...
|
Autor: | xentis [ 25 lut 2021, o 21:23 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
W drugim listingu kodu z pierwszego posta (nazwanego "Funkcję do obsługi wyświetlacza:") w linijce 143 powinno być CS_LOW, nie wiem czy to to jest problemem, ale dziwne że wogule cokolwiek się wyświetla na wyświetlaczu bo w takim wypadku przed wysyłką bufora wyświetlacz nie jest aktywowany do komunikacji... |
Autor: | Morales [ 25 lut 2021, o 21:38 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Poprawiłem tę linijkę i kompletnie nic to nie zmieniło... Próbowałem również funkcji z najnowszej wersji Adafruit bo tam odrobinę się one różnią i również nie pomogło... Myślałem również, że może mam za dużo zajętej pamięci RAM i że do wartości tych współrzędnych trafiają śmieci, ale mam zajęte 54% RAM, więc jeszcze mam trochę zapasu oraz bitmapy i narysowane linie, zawsze przesuwają się o taką samą wartość, więc to nie mogą być śmieci... |
Autor: | xentis [ 25 lut 2021, o 21:47 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
Ok, to może inaczej, oprócz funkcji o których wspomniałeś, za to co się wyświetla na ekranie odpowiedzialna jest również ta do wysyłania bufora czyli mk_ssd1306_display(). Ja bym zrobił to tak: w buforze umieściłbym 1 piksel, po czym samej zawartości bufora bym już nie ruszał, a cyklicznie co np 1 sekundę wysyłałbym bufor do wyświetlacza (ewentualnie można by tu podpiąć migniecie jakąś diodą przy każdej wysyłce by ewentualnie dla oka wiedzieć kiedy jest wysyłka) jeśli piksel będzie nieruchomy to wiemy że funkcja wysyłająca bufor jest ok, i można szukać dalej... |
Autor: | Morales [ 25 lut 2021, o 23:26 ] |
Tytuł: | Re: SSD1306 OLED - Przesuwanie się bitmap. |
To był dobry strzał! Bufor się wysyła, ale pixel nadal się przesuwa. Dodatkowo na ekranie pojawiły się 3 dziwne pixele, nie określone przeze mnie w buforze. Pojawiają się i od razu znikają. Wychodzi na to, że problem musi być w tych 3 funkcjach... język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. EDIT : Wychodzi na to, że problem został zażegnany... Te 3 komendy co wymieniłem powyżej okazały się niepotrzebne. Nawet jak użyłem dokładnych komend, które wykorzystuje Adafruit w swojej bibliotece to problem nadal występował. Ostatecznie spróbowałem wgrać kod, beż nich i sukces! Bitmapy zmieniam przy pomocy przycisku i nic się nie przesuwa! Bardzo dziękuję za pomoc użytkownikowi xentis. Fajnie mnie nakierowałeś... Wychodziłem z założenia, ze display() jest poprawnie napisana i szukałem w dwóch pozostałych funkcjach. Dzięki! Poprawna funkcja: |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |