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