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



Teraz jest 1 gru 2024, o 00:21


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
 Tytuł: oled i2c
PostNapisane: 7 sie 2019, o 15:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

Cześć

Piszę bo już męczę to od ponad dwóch tygodni. Chcę napisać swoją bibliotekę do oled'a wykorzystując i2c. Przeczytałem dokumentację sterownika i przekonałem się, że informacje tam zawarte niestety nie sprawdzają się w praktyce.

Zacząłem od podłączenia do arduino aby szybko przetestować wyświetlacz czy jest żywy i ruszył na bibliotekach Adafruit. Zacząłem więc pisać ją w języku C i mam już wszystko napisane tylko że wyświetlacz nadal nie wstaje. Wykorzystuje sprzętowe TWI. Może ktoś z Was zauważy co robię nie tak albo poda jakiś prosty przykład który działa ? Będę wdzięczny za każdą pomoc. Napisałem już tego sporo, kosztowało dużo czasu i chciałbym to dokończyć.

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


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

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


Dodam tylko że program przechodzi do pętli WHILE i zapala diode led, ale nic poza tym się nie dzieje.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 7 sie 2019, o 18:28 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 423
Lokalizacja: Puck
Pomógł: 7

Cześć Lex_

Nic dziwnego że zapala się tylko dioda bo nic innego w pętli while pliku main nie masz
zatrzymujesz program na 10 ms zapalasz diodę i zwiększasz wartość zmiennej y2
o jeden aż do 255

nie masz ani wywołania jakiejś funkcji
ani nie dajesz w tej pętli nic innego do zrobienia oprócz zapalenia diody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 7 sie 2019, o 19:12 
Offline
Użytkownik

Dołączył(a): 09 lut 2017
Posty: 73
Lokalizacja: 51°03′22″N 15°45′48″E
Pomógł: 18

Pętla tutaj nie ma znaczenia. Oled powinien coś wyświetlić zanim program dojdzie do pętli. Przede wszystkim zmień adres na 0x78 bo 0x3C to jest adres arduinowy na 7 bitach. Ale i tak raczej nie będzie działać bo strasznie masz namieszane. Dodaj jeszcze pliki nagłówkowe bo bez nich ciężko to uruchomić i analizować. Też teraz siedzę nad biblioteką do oleda. Postaram się pomóc i Cię naprowadzić na właściwą drogę. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 7 sie 2019, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

Tak jak kolega Adam12 napisał, ten pusty while jest bez znaczenia - wyżej jest funkcja która powinna zaświecić piksel, jeśli to nie działa to reszta jest zbędna.

Podejrzewam że namieszałem, ale też już czuję że się w tym pogubiłem. Przeczytałem sporo różnych wątków na forach oprócz dokumentacji i też była mowa o adresie 0x78 ale na arduino działało właśnie na adresie 0x3C :/ w dokumentacji była mowa o wyłączeniu zasilania na czas inicjalizacji - że należy wystawić stan niski zamiast wysokiego. Efekt - TWI w ogóle nie mogło się zinicjalizować. I nie dziwi mnie to tylko po co w dokumentacji piszą takie rzeczy? Podsyłam potrzebne pliki. Mega dzięki za pomoc - na dole załącznik.
Hasło do archiwum tylko dla zainteresowanych.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 8 sie 2019, o 20:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1031
Lokalizacja: Trójmiasto
Pomógł: 190

Lex_ napisał(a):
na forach oprócz dokumentacji i też była mowa o adresie 0x78 ale na arduino działało właśnie na adresie 0x3C

Widzisz, kluczem do zrozumienia tych rozbieżności jest zrozumienia zasady działania magistrali TWI/I2C.
Na początku transmisji należny zaadresować urządzenie dla którego przeznaczona jest paczka danych, i adres ten jest wysyłany w pierwszym bajcie, ale tylko 7 najstarszych bitów jest za niego odpowiedzialna, bo najmłodszy bit oznacza w zależności czy jest jedynką czy zerem, zapis bądź odczyt z urządzenia.
I teraz jak się przyjrzysz adresom 0x3C i 0x78 w postaci binarnej, okaże się że różnią się one tylko przesunięciem o jeden bajt:
0x3C => 0b00111100
0x78 => 0b01111000
Różnica jest tylko w tym że arduinowcy przyjęli sobie adres w takiej formie, że bit zapisu/odczytu na żywca wycinają i adresem nazywają to co zostało. Nie wiem może dla niektórych taki zapis jest bardziej logiczny, ale nawet chińczyki na oledach które mają możliwość wyboru adresu zapisuję je jako 0x78 lub 0x7A więc nie wiem skąd w arduino wziął się ten inny zapis, a jest to zapis nieoptymalny z punktu widzenia programu ponieważ aby wysłać taką postać adresu na magistralę trzeba zrobić dwie operacje: przesunąć bitowo o 1 w lewo i dokleić bit zapisu/odczytu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Natomiast ta druga wersja adresu w najmłodszym bicie ma już miejsce na bit zapisu/odczytu (w adresie zapisuje się tam, czyli na najmłodszym bicie, zawsze poprostu 0) więc nie trzeba robić przesunięcia tylko wrzucenie bitu zapisu/odczytu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak widzisz, adres można sobie zapisać na różne sposoby, trzeba tylko później odpowiednio program napisać by we właściwej formie go wysłał na magistralę TWI/I2C.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 8 sie 2019, o 21:46 
Offline
Użytkownik

Dołączył(a): 09 lut 2017
Posty: 73
Lokalizacja: 51°03′22″N 15°45′48″E
Pomógł: 18

Ok, Twoja biblioteka już działa. Tak jak pisałem, oprócz adresu miałeś strasznie namieszane w funkcjach wysyłania komend i danych przez i2c. Poza tym w funkcji ustawiania bitrate też był błąd. Dzisiaj już nie dam rady, ale jutro postaram się to dokładniej opisać.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 9 sie 2019, o 22:13 
Offline
Użytkownik

Dołączył(a): 09 lut 2017
Posty: 73
Lokalizacja: 51°03′22″N 15°45′48″E
Pomógł: 18

Powinno działać. Pliki nagłówkowe, oprócz i2c.h, pozostają bez zmian.

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


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


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


main.c
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  
 Tytuł: Re: oled i2c
PostNapisane: 10 sie 2019, o 12:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 lut 2014
Posty: 164
Pomógł: 3

Dzięki za pomoc, teraz widzę jakie zmiany były potrzebne. Uruchamiałeś to na atmedze32 jakim zegarem taktowaną ?
Nie wiem o co chodzi bo nadal nie uruchamia się ten wyświetlacz, może kupiłem jakiś wybrakowany szmelc. Pokombinuje jeszcze.

Schemat połączeń:
OLED - ATB
------------------
VCC <-> VCC
GND <-> GND
DIN <-> SDA
CLK <-> SCL
RST <-> PINx

EDIT:
Ogarnąłem. Musi być podłączony jeszcze reset i wysterowany tak jak miałem początkowo w inicjalizacji. Teraz ruszył. Dla potomnych - OLED 0.96 dwukolorowy 128x64px spi / i2c

_________________
::::::: C ::::::::::
:::::: C++ :::::::::



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: oled i2c
PostNapisane: 10 sie 2019, o 13:06 
Offline
Użytkownik

Dołączył(a): 09 lut 2017
Posty: 73
Lokalizacja: 51°03′22″N 15°45′48″E
Pomógł: 18

No ja akurat mam OLED'a od Mirka ze sklepu i tam nie ma resetu. Jest to wersja tylko i2c i szczerze mówiąc dopiero teraz się zainteresowałem jak jest podłączony. :)



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

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