ATNEL tech-forum
https://forum.atnel.pl/

oled i2c
https://forum.atnel.pl/topic22474.html
Strona 1 z 1

Autor:  Lex_ [ 7 sie 2019, o 15:03 ]
Tytuł:  oled i2c

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.

Autor:  miki53 [ 7 sie 2019, o 18:28 ]
Tytuł:  Re: oled i2c

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

Autor:  Adam12 [ 7 sie 2019, o 19:12 ]
Tytuł:  Re: oled i2c

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

Autor:  Lex_ [ 7 sie 2019, o 21:56 ]
Tytuł:  Re: oled i2c

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.

Autor:  xentis [ 8 sie 2019, o 20:42 ]
Tytuł:  Re: oled i2c

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:  Adam12 [ 8 sie 2019, o 21:46 ]
Tytuł:  Re: oled i2c

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:  Adam12 [ 9 sie 2019, o 22:13 ]
Tytuł:  Re: oled i2c

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:  Lex_ [ 10 sie 2019, o 12:06 ]
Tytuł:  Re: oled i2c

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

Autor:  Adam12 [ 10 sie 2019, o 13:06 ]
Tytuł:  Re: oled i2c

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

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/