roske napisał(a):
Dalej podajesz nie ten adres. Teraz jest to 0x0d przesunięty w lewo, czyli 0x1a (zapis) i 0x1b (odczyt). Kody statusów wskazują brak błędów więc przypuszczam, że na magistrali masz jakieś inne urządzenie i2c o tym właśnie adresie.
Z adresami IIC jest istna kołomyjka: jedni podają, jak ja to nazywam, slave address - siedmiobitowy adres, który do urządzania trzeba wysłać przesunięty w lewo o jeden z dodanym najmłodszym bitem WRITE lub READ. Inni podają write address i read adress - ośmiobitowe adresy, już przesunięte w lewo, z już ustawionymi bitami write/read - te podaje się tak jak są. Dataszit Twojego czujnika podaje tę drugą wersję.
No i teraz Ty read address (na dodatek błędny) poddajesz przesunięciu w lewo i jeszcze dodajesz bit write/read. Przemyśl na spokojnie te operacje na adresach.
Wiem, jak to całe i2c powinno działać, tylko gdyby tak było to wysłałbym adres z dokumentacji i odbierał po kolei dane tak jak to robię z RTC. A tutaj próbuje na dziesiątki sposobów i nic. Więc sprawdziłem przeleciałem magistralę skanerem i tu zaskoczenie nie pojawia mi się w konsoli adres 0x3C tylko 0x0D. Skaner korzysta z tej samej biblioteki co kod powyżej:

Inkrementuje uinta w każdej iteracji pętli. Gdy coś na magistarli odpowie na adres zwraca uinta do konsoli, w tym wypadku 0x0D.
I właśnie w poście wyżej użyłem tego adresu w dokładnie ten sam sposób co skaner, co wreszcie dało jakieś rezultaty. Nie ma możliwości, żeby odpowiadał inny slave, kompas jest podłączony prosto do uC, więc jak dla mnie to z tym układem jest coś nie tak.