Witam,
od kilku dni próbuję uporać się z problemem odczytu danych z akcelerometru ADXL345 przez standard TWI/I2C.
W nocie katalogowej jest napisane, że jeżeli SDO podłączone jest do GND, akcelerometr przyjmuje adresy 0xA6 read i 0XA7 write. Tak też zrobiłem. Pin CS podłączony do +5V. Do ATmegi8 podłączony mam rezonator kwarcowy 16 MHz. Prędkość TWI ustawiłem na standardową prędkość 100 kHz. Wyliczyłem to za pomocą wzoru ((16 MHz/100 kHz)-16)/2= 72 => TWBR = 0x48.
Mój problem polega na tym iż nie mogę odczytać i wyświetlić danych z akcelerometru.
Konfiguracja ADXL345 przebiega poprawnie (przez co wnoszę, że adresy są poprawne). Kiedy program chce odczytać dane z osi X znajdujące się pod adresem 0x32, zawiesza się. W kodzie programu zaznaczyłem to miejsce dość widocznie. Gdy zaneguje tę operację program przechodzi dalej wyświetlając "odczytane dane" i wchodzi w ostatnią pętlę, migając diodą.
Wszystko zasilane jest przy pomocy USBASP_ATB ? czy to może generować mój problemem?
Może źle coś przeliczyłem lub podłączyłem? Bardzo proszę o pomoc!
Schemat oraz kod programu znajduje się poniżej.
Żeby wyprzedzić już niepotrzebne pytania. Tak, są rezystory podciągające do SCL oraz SDA, są one widoczne na schemacie.
Jak wynika z kodu, odczytuję jeden bajt danych osi X ? być może i tu jest problem. Może powinienem od razu całą paczkę odczytywać?

Żeby nie było niedomówień - na schemacie ATmegi8 piny SV1 należą do P1 na schemacie płytki ADXL345, drugi analogicznie.
Ostatnią przyczyną błędów może byś po prostu uszkodzone urządzenie, niestety nie mam jak tego sprawdzić. Pozostaje mi jedynie zamówić kolejny...
od kilku dni próbuję uporać się z problemem odczytu danych z akcelerometru ADXL345 przez standard TWI/I2C.
W nocie katalogowej jest napisane, że jeżeli SDO podłączone jest do GND, akcelerometr przyjmuje adresy 0xA6 read i 0XA7 write. Tak też zrobiłem. Pin CS podłączony do +5V. Do ATmegi8 podłączony mam rezonator kwarcowy 16 MHz. Prędkość TWI ustawiłem na standardową prędkość 100 kHz. Wyliczyłem to za pomocą wzoru ((16 MHz/100 kHz)-16)/2= 72 => TWBR = 0x48.
Mój problem polega na tym iż nie mogę odczytać i wyświetlić danych z akcelerometru.
Konfiguracja ADXL345 przebiega poprawnie (przez co wnoszę, że adresy są poprawne). Kiedy program chce odczytać dane z osi X znajdujące się pod adresem 0x32, zawiesza się. W kodzie programu zaznaczyłem to miejsce dość widocznie. Gdy zaneguje tę operację program przechodzi dalej wyświetlając "odczytane dane" i wchodzi w ostatnią pętlę, migając diodą.
Wszystko zasilane jest przy pomocy USBASP_ATB ? czy to może generować mój problemem?
Może źle coś przeliczyłem lub podłączyłem? Bardzo proszę o pomoc!
Schemat oraz kod programu znajduje się poniżej.
Żeby wyprzedzić już niepotrzebne pytania. Tak, są rezystory podciągające do SCL oraz SDA, są one widoczne na schemacie.
Jak wynika z kodu, odczytuję jeden bajt danych osi X ? być może i tu jest problem. Może powinienem od razu całą paczkę odczytywać?
Code: c


Żeby nie było niedomówień - na schemacie ATmegi8 piny SV1 należą do P1 na schemacie płytki ADXL345, drugi analogicznie.
Ostatnią przyczyną błędów może byś po prostu uszkodzone urządzenie, niestety nie mam jak tego sprawdzić. Pozostaje mi jedynie zamówić kolejny...