Hej
Mam taki problem: gdy transmituję bajt który kończy się 1 nie dostaję potwierdzenia. Wiem że potwierdzenie w I2C jest realizowane tak że master powinien zwolnić linię SDA i wtedy Slave podciąga ją do GND.
W moim przypadku próbuję się skontaktować pomiędzy procesorem STM32F103C8T6 a akcelerometrem LSM303DLH którego logika działa na napięciu 1.8V więc po drodze jest jeszcze "bidirectional logic level translator" ADG3300. Po obu stronach Linie SCL i SDA są podciągnięte do plusa przez rezystory 4k7. ADG3300 nie powinien być problemem ponieważ maksymalna częstotliwość sygnału jaki może przenosić to 50MBPS, a ja działam z zegarem 100KHz więc do granicy mam jeszcze spory zapas.
Czy możliwe że po prostu procesor nie zdąża zwolnić SDA i dlatego nie dostaję potwierdzenia?
Czy może właśnie naprawdę nie dostaję potwierdzenia tylko gdy ostatnim bitem jest zero jest to odczytywane jako potwierdzenie?
Co mogę zrobić aby temu zaradzić?
-Mogę zmienić pull-up (na jakie?), Czas narastania sygnału ( szybszy?),
Oto fragment kodu aby zobrazować o co mi chodzi:
Przykład gdy się wiesza przy ustawianiu wartości rejstru:
Przykład gdy program zawiesza się przy wyborze rejestru
Przykład gdy wszystko działa
Dodam jeszcze dtrki jak by ktoś miał jakiś pomysł tylko potrzebował sprawidzić co i jak
http://www.kamami.pl/dl/lsm303dlh.pdf
http://www.kamami.pl/dl/stm32f103_x6_x8_xb.pdf
http://www.analog.com/static/imported-files/data_sheets/ADG3300.pdf
I interesujący fragment schematu
Ja już naprawdę nie wiem co mogę zrobić więc naprawdę liczę na was!
Mam taki problem: gdy transmituję bajt który kończy się 1 nie dostaję potwierdzenia. Wiem że potwierdzenie w I2C jest realizowane tak że master powinien zwolnić linię SDA i wtedy Slave podciąga ją do GND.
W moim przypadku próbuję się skontaktować pomiędzy procesorem STM32F103C8T6 a akcelerometrem LSM303DLH którego logika działa na napięciu 1.8V więc po drodze jest jeszcze "bidirectional logic level translator" ADG3300. Po obu stronach Linie SCL i SDA są podciągnięte do plusa przez rezystory 4k7. ADG3300 nie powinien być problemem ponieważ maksymalna częstotliwość sygnału jaki może przenosić to 50MBPS, a ja działam z zegarem 100KHz więc do granicy mam jeszcze spory zapas.
Czy możliwe że po prostu procesor nie zdąża zwolnić SDA i dlatego nie dostaję potwierdzenia?
Czy może właśnie naprawdę nie dostaję potwierdzenia tylko gdy ostatnim bitem jest zero jest to odczytywane jako potwierdzenie?
Co mogę zrobić aby temu zaradzić?
-Mogę zmienić pull-up (na jakie?), Czas narastania sygnału ( szybszy?),
Oto fragment kodu aby zobrazować o co mi chodzi:
Przykład gdy się wiesza przy ustawianiu wartości rejstru:
Kod: C / C++
Przykład gdy program zawiesza się przy wyborze rejestru
Kod: C / C++
Przykład gdy wszystko działa
Kod: C / C++
Dodam jeszcze dtrki jak by ktoś miał jakiś pomysł tylko potrzebował sprawidzić co i jak
http://www.kamami.pl/dl/lsm303dlh.pdf
http://www.kamami.pl/dl/stm32f103_x6_x8_xb.pdf
http://www.analog.com/static/imported-files/data_sheets/ADG3300.pdf
I interesujący fragment schematu
Ja już naprawdę nie wiem co mogę zrobić więc naprawdę liczę na was!