Odgrzewam może trochę stary temat ale właśnie powróciłem do walki z ADS 1232
Korzystając z tej informacji oraz dokumentacji ADS1232
wojtekr51 napisał(a):
Żeby odebrać dane czekasz aż układ zakończy konwersję napięcia. Po dokonaniu konwersji na linii DOUT/DRDY pojawi się stan wysoki. Potem z tej samej linii odczytujesz 24 bity. Taktujesz sygnałem SCLK tylko odbieranie bitów. Jeżeli po odebraniu 24 bitów zrobisz jeszcze jeden dodatkowy takt to układ dokonuje wewnętrznej kalibracji i następny odczyt napięcia jest opóźniony. Tak mniej więcej to wygląda.
Poszedłem tym tropem w między czasie poprawiłem zdolności rozumienia dokumentacji i korzystając z tego

Stworzyłem następujący
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Inicjalizacja spod CubeMX więc błędów raczej nie ma:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Sprawdzam sobie analizatorem logicznym i otrzymuje następujący efekt:

Do obsługi wykorzystuje tylko dwie linie SCK i DRDY/DOUT. Pojawia mi się na pinie przerwania stan niski, skoro mam falling edge trigger przerwanie się wyzwala i podaje 25 taktów zegara 24 do odczytu bitów i ostatni do tego żeby wymusić stan wysoki na wyjściu z ADS'a. Co zaznaczyłem na czerwono na obrazku, niestety nie wiem skąd bierze mi się kolejne 25 taktów zegara, gdzieś zrobiłem błąd tylko nie wiem gdzie, więc proszę o pomoc.
Jest w sumie jeszcze druga sprawa a mianowicie sam odczyt mam spięte piny ainn i ainp razem to nie powinienem dostać samych zer? Tu akurat może wina montażu lutowania + płytki stykowej.
PS. 1 Szczerze mówiąc nie widzę tego aby komunikacja z ADS1232 była po I2C, no chyba że jestem ślepy i ktoś mnie oświeci
PS. 2. Dzięki za bibliotekę, ale wolę sam od początku do końca napisać kod aby w pełni go rozumieć w przypadku gdy robię to w celach zwiększania swojej wiedzy.