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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 4 maja 2025, o 01:28


    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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: 430
    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: 75
    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: 1033
    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: 75
    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: 75
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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: 75
    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 0 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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO