Skocz do zawartości

Obsługa akcelerometru przez I2C


AE

Pomocna odpowiedź

Skończyły mi się pomysły co z tym fantem zrobić.

Mam problem z obsługą akcelerometru przez i2c. Jaki rejestr nie chciałbym odczytać, cały czas otrzymuje wartość 0x3C. Próbowałem już na ATmega32 i ATmega88PA. Korzystałem z konwertera napięć "samoróbki", jak i gotowego konwertera jaki można kupić. Próbuje obsłużyć MMA8452. Początkowo myślałem, że go uszkodziłem i kupiłem drugi LSM303D (ma już wbudowany stabilizator oraz konwerter napięć) i efekt jest ten sam.

W MMA8452 ustawiam rejestr 0x2A na 0x03, czyli bit FREAD oraz ACTIVE.

W LSM303D rejestr 0x20 na 0x17, czyli uruchomienie osi x,y,z oraz wyjście z trybu power-down mode.

Korzystam z biblioteki Mirka Kardasia do obsługi i2c. Poniżej jest kod do obsługi LSM303D.

#include <avr/io.h>
#include "LCD/lcd44780.h"
#include "i2c_twi.h"

int main(int argc, char **argv) {

unsigned char i2cInitBuf = 0x17;
unsigned char bufor;

i2cSetBitrate(100);
lcd_init();
TWI_write_buf(0x3A, 0x20, 1, &i2cInitBuf);
TWI_read_buf(0x3B, 0x0F, 1, &bufor);         //tutaj chcę odczytać rejestr WHO AM I
lcd_hex(bufor);

while(1) {

}
}

Oraz plik i2c.c

#include <avr/io.h>

#include "i2c_twi.h"

void i2cSetBitrate(uint16_t bitrateKHz) {
uint8_t bitrate_div;

bitrate_div = ((F_CPU/1000l)/bitrateKHz);
if(bitrate_div >= 16)
	bitrate_div = (bitrate_div-16)/2;

TWBR = bitrate_div;
}

void TWI(void) {
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
while ( (TWCR&(1<<TWSTO)));
}

void TWI_write(uint8_t bajt) {
TWDR = bajt;
TWCR = (1<<TWINT)|(1<<TWEN);
while ( !(TWCR&(1<<TWINT)));
}

uint8_t TWI_read(uint8_t ack) {
TWCR = (1<<TWINT)|(ack<<TWEA)|(1<<TWEN);
while ( !(TWCR & (1<<TWINT)));
return TWDR;
}



void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf ) {

TWI();
}



void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf) {

TWI();
}
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.