Wpis z mikrobloga

@kazmir: nie byłoby najprościej znaleźć jakiś akcelerometr na I2C i zbierać z niego dane programem, i potem robić z nimi co tam trzeba? Z tego co pamiętam to w Pythonie obsługa I2C i OneWire była dość prosta
  • Odpowiedz
@xerxes931: i dokładnie tak to jest pospinane. RPI nawet wykrywa prawidłowo akcelerometr na odpowiednim adresie. Ale teraz zaczynają się schody - akcelerometr zwraca 0 na każdej osi lub maksymalne wartości...i to zarówno dla akcelerometru ADXL345 jak i MMA8452Q.
Oba cyfrowe z obsługą i2c. Coś źle połączone? Coś niedokonfigurowane? Miał ktoś coś takiego?
  • Odpowiedz
@kazmir: jeśli zwraca min albo max, to znaczy że cały czas dostajesz albo stan niski albo stan wysoki magistrali, obstawiałbym że problem leży w komunikacji. SDA i SCL masz podciągnięte do 3.3V przez rezystory 10k? Jesteś pewien że te akcelerometry można zasilać z 3.3V?
Możliwe też że najpierw musisz "włączyć" akcelerometr, zapisując pewnie jedynkę w jakimś rejestrze. Jak robiłem zegarek na DS1307 też żeby zaczął działać musiałem najpierw do pewnego rejestru
  • Odpowiedz
@xerxes931: input voltage 2.0-3.6, SDA i SCL podpiete z rezystorami podciagajacymi 4.7k (10k sa dla 5V), bit startujacy ustawiony pod odpowiednim adresem...i wlasnie jak kumpel wlacza to dostaje po pierwszym uruchomieniu same 0, a potem kazde wywolanie zwraca skrajną wartość.
  • Odpowiedz
10k sa dla 5V


@kazmir: no niekoniecznie, nie ma generalnie znaczenia czy to będzie 4.7k czy 10k czy ile, ważne żeby była to duża wartość, ten rezystor ma jedynie wymuszać spoczynkowy stan magistrali jako wysoki (stąd nazwa pullup, czyli podciągnięcie do stanu wysokiego).
Nie mam niestety pojęcia co może być nie tak, jesteś pewien że masz dobrze ustawione te wszystkie ACK i NAK? W datasheecie powinno być opisane kto i kiedy
  • Odpowiedz
używam bibliotek pythonowych (smbus) które ACK/NACK załątwiają za mnie. Choć w sumie faktycznie teraz błąd wygląda dla mnie tak jakby po uruchomieniu nie coś się zacinało...nie wskakuje poziom niski? Jest za wysoko ustawiony (VCC, SDA i SCL mam ustawione na 3.3V)? We wszystkich wykresach i tutorialach jest bezpośrednie podpięcie pod piny na RPI (nawet bez pull-up resistors, bo te niby są już wbudowane w akcelerometr ADXL345)...

Co do ustawień wpisów
  • Odpowiedz
@kazmir: akcelerometry freescle mają w zwyczaju autoinkrementować zwracany adres z pamięci po wsyłaniu żądania odczytu pierwszego bajtu osi X, potem już automatycznie nadaje aż do końca Z. Weź to pod uwagę bo sam na początku nie ogarniałem i miałem problemy. Częstotliwość komunikacji I2C masz prawidłowo? W przypadku tej rodziny akcelerometrów chyba max jest 200kHz.
  • Odpowiedz
@Tymian: używane były MMA8452Q oraz GY-291(bazujący na ADXL345). Jakto autoinkrementować? akcelerometr daje mi dane na adresach 0x32-0x37 (po 2 8-bitowe adresy na oś), to jak wtedy miałyby się zmienić te adresy? na 0x33-0x38?
częstotliwość zmieniałem od 200 w dół. Obecnie mam ustawione na 25Hz.
  • Odpowiedz
@kazmir: autoinkrementacja adresu. Po rozkazie odczytu pierwszego bajtu, akcelerometr sam wysyła wszystko do końca czyli pozostałe 5 bajtów. Poszukaj dokładnie w dokumentacji tego akcelerometru. A częstotliwość komunikacji z którą pracuję z moim to 200 000Hz
  • Odpowiedz