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



Teraz jest 10 lut 2025, o 21:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 22 lip 2017, o 21:11 
Offline
Użytkownik

Dołączył(a): 06 lip 2014
Posty: 131
Pomógł: 0

Cześć ma prośbę o to zeby mi ktoś wytłumaczył kawałek kodu, chodzi o funkcję do rysowania pixela, funkcja ta jest z biblioteki Mirka do Oledów ale widze że w innych bibliotekach do innych wyświetlaczy ta funkcja jest taka sama.


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


nie wiem co tutaj się dzieje jak jest obliczana ta pozycja dla pixela

dzięki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2017, o 23:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2014
Posty: 334
Lokalizacja: Rybnik
Pomógł: 55

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

x i y określają współrzędne pixela, wartość bw określa czy pixel ma zostać aktywowany(wartość bw różna od zera), czy wygaszony (wartość bw równa zero).

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


Prosty warunek, sprawdzający czy podane współrzędne nie wykraczają poza zadeklarowany rozmiar wyświetlacza i czy nie są ujemne.


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


Tutaj dzieje się cała "magia".
Warunek określa, czy pixel chcemy zapalić, czy zgasić, ale to chyba oczywiste.

Pierwsza ważna informacja, że bajty "ułożone są" pionowo, a każdy bit reprezentuje jeden pixel.

Przyda się taki prowizoryczny rysunek wycinka wyświetlacza o rozmiarze 128x16
Obrazek

Kolorem pomarańczowym zaznaczyłem Ci jeden bajt, dokładnie odwzorowany przez ssd1306_buf[0]
Każda kratka to jeden pixel.

Kolorem żółtym zaznaczyłem pixel, który chcemy zapalić, który ma współrzędne
y = 10
x = 4

Liczby na dole i na górze oznaczają kolejne indeksy tablicy bufora.

Teraz musimy policzyć, pod którym indeksem znajduje się nasz bajt, którego bit chcemy ustawić na 1.
Z rysunku widać, że jest to numer 132, więc musimy uzyskać
ssd1306_buf[132], do tego jest te równanie:

x+ (y/8)*SSD1306_WIDTH

x zawiera się z przedziału 0-127, więc bezpośrednio wskazuje na interesującą nas kolumnę.
y, tutaj jest trochę trudniej, gdyż pracujemy na całych bajtach i obliczyć musimy, w którym bajcie znajduje się interesujący nas bit, w tym celu dzielmy te wartość przez 8, tj ilość bitów w bajcie.
SSD1306_WIDTH określa szerokość wyświetlacza, tutaj 128. Wykorzystany jest w oczywistym celu. Jeśli chcemy wybrać drugą linię bajtów, musimy wpierw "przeskoczyć" 128 indeksów pierwszej linii bajtów (podkreślam, bajtów oddzielonych na rysunku linią zieloną a nie bitów).

Także policzmy dla naszego przykładu, aby zaświecić żółty pixel:

4+(10/8)*128
Pamiętając, że dzielimy na liczbach całkowitych

indeks = 4+1*128
indeks = 128+4
indeks = 132

Zgadza się z wartością wcześniej odczytaną z rysunku.


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

To już jest oczywiste, za pomocą modulo (reszta z dzielenia), wyznaczamy który bit z całego bajtu chcemy zmienić.
Z rysunku widzimy, że jest to bit 2 (liczmy od zera) bajtu 132
Nasz y wynosił 10 więc
10 mod 8 = 2
Również się zgadza, z odczytanym przez nas 2 z rysunku.

Jeśli dalej do końca nie rozumiesz, popatrz do noty SSD1306 pod hasłem GDDRAM


Autor postu otrzymał pochwałę

_________________
Amatorska stacje meteorologiczna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lip 2017, o 17:54 
Offline
Użytkownik

Dołączył(a): 06 lip 2014
Posty: 131
Pomógł: 0

Dzięki kolego że poświęciłeś czas na tak fajne wytłumaczenie. Teraz jest jasne



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO