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



Teraz jest 28 mar 2024, o 11:39


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 13 wrz 2016, o 20:06 
Offline
Użytkownik

Dołączył(a): 05 lut 2015
Posty: 53
Pomógł: 0

Jak to jest z komunikacją między ADS1232 (two wire serial interface) a STM32. Generalnie się zastanawiałem nad wykorzystaniem sprzętowego SPI ale tutaj mamy więcej przewodów czyli chyba raczej odpada, chyba że się jakoś da to zrobić. Rozwiązanie jakie widzę na ten moment to zrobienie komunikacji softwarem. Tylko tak jak przetwornik ADC wykonuje 80 pomiarów (lub 10) w ciągu sekundy to jak jest z czasem odbieranego sygnału. To jak wygląda kwestia odbioru tego sygnału w sensie czy muszę odebrać wszystkie pomiary. W sensie wyzwalam start "nadawania" przez ADS1232 potem generuje "sygnały zegarowy" o długości każdego stanu 1ms, po kolei odbieramy bity nadawane przez ADC i zapisuje do zmiennej. Czy ADS1232 przechowuje jakoś wynik konwersji czy bezspośrednio wysyła na output dane bez żadnego bufora, chodzi o to że czy istnieje możliwość, że jakieś dane zgubie albo odczytam jeden bit jako dwa itp. Tak jak patrze na to co napisałem to wystarczyłoby przetestować i wszystko byłoby jasne tylko nie wiem jak skontrolować czy otrzymany wynik jest poprawny, jest na to jakiś sposób, bo teraz nic mi do głowy nie przychodzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2016, o 21:16 
Offline
Użytkownik

Dołączył(a): 10 lip 2015
Posty: 334
Pomógł: 32

Jaki masz konkretnie uC? Nawet F030 ma 2x I2C.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2016, o 21:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 wrz 2016, o 01:11 
Offline
Użytkownik

Dołączył(a): 26 lip 2012
Posty: 291
Lokalizacja: okolice Opola
Pomógł: 20

Podsyłam nawet małą bibliotekę do obsługi co prawda ADS1234 ale to praktycznie to samo. Napisana trochę na szybko bo była taka potrzeba ale nawet działa. Zwraca wynik obcięty do 19 bitów, dalej przy wzmocnieniu 128x to i tak większość szumu. I nie ma obsługi zmiany kanału musiałbyś sobie dopisać mi wtedy nie było potrzebne.
ads1234.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


ads1234.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i obsługa:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lut 2017, o 18:05 
Offline
Użytkownik

Dołączył(a): 05 lut 2015
Posty: 53
Pomógł: 0

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
Obrazek
Stworzyłem następujący
Składnia: [ Pobierz ] [ Ukryj ]
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:
Składnia: [ Pobierz ] [ Ukryj ]
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:
Obrazek
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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lut 2017, o 16:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Wykonanie tych kolejnych 25 taktów, jest może spowodowane nieprawidłowym wyzerowaniem flagi zdarzenia od zbocza opadającego DRDY/DOUT. Chodzi mi o linię 8 w pierwszym listingu, czy GPIO_PIN_3 określa to zdarzenie? W przebiegu który przedstawiłeś, widać że są w sumie 2 zbocza opadające DRDY/DOUT.

Jeżeli chodzi o odczytywaną wartość, to zależy ona też od tego jak masz podłączone wejścia REFP i REFN.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2017, o 00:40 
Offline
Użytkownik

Dołączył(a): 05 lut 2015
Posty: 53
Pomógł: 0

Dzięki problem rozwiązałem. Okazało się że miałem w przegródce ze stabilizatorami 3,3V zapodziany 5V z rozpędu nie sprawdziłem i ADS zasilany z 5V nie chciał się dogadać z STM32 na 3,3 V. Po zmianie wszystko zaczęło działać bez najmniejszych problemów.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO