Mpu 9150 weg von der Api

OP #2886015
Lesenswert?

Hallo,

also ich habe die Mpu 9150 SDK und habe bis jetzt mit der Api 
gearbeitet. da mir diese aber die werte zulangsam liefert will ich davon 
gerne ein bisschen weg.

ich habe allerdings 2 Funktionen die mir doch noch recht nützlich sein 
könnten.
1
int msp430_i2c_write (unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char data)

und
1
int msp430_i2c_read (unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char data)

so jetzt hab ich mir das daten blatt vom dem Board angeguckt und 
eigendlich, denke ich zumindest, alles gefunden was ich brauche. bis auf 
diese slave address...

leider finde ich auch im i net nichts was mir hilf diese zu finden...
vielleicht könnt ihr mir da ja helfe...

hab hier jetzt schon paar sachen versucht aber bekomme ums Verrecken 
keine Daten ausgegeben.

und jetzt wäre es schon mal gut zu wissen, ob es vielleicht daran liegt 
das ich bei slave_addr einfach was falsches habe...

ps.: habe eigendlich extra was mit API genommen da ich in hardware 
naheren sachen nicht so bewandert bin.
OP #2886240
Lesenswert?

arg ja die pdf hatte ich noch nicht gesehn xD
wie doof
1
MPU-9150  I²C device address selection pin AD0.
2
When the pin value is low, the device address is 0x68. 
3
When the pin value is high, the device address is 0x69.

irgendwie dacht ich, ich kann low und high gleichzeitig holen...
oder ist mit low und high garnicht die low byte und high byte gemeint 
....

ps.: ich hab ja nicht das evb sondern diese sdk macht das denn nen 
unterschied?
Persönliche Seite #2886245
Lesenswert?

Jan L. schrieb:
> oder ist mit low und high garnicht die low byte und high byte gemeint

Nein, überhaupt und gar nicht. Das ist ein einzelner Pin, mit dem Du 
zwischen zwei Adressen umschalten kannst.
Das aber ist nur relevant, wenn das Ding im I2C-Slave-Modus betrieben 
wird, also von einem anderen I2C-Master angesteuert wird.

Machst Du das? Oder willst Du irgendwelche I2C-Peripherie ansteuern?
#2886454
Lesenswert?

auch wenn ich nicht ganz glaube, dass der Funktionsprototyp so aussieht:
1
int msp430_i2c_read (unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char data)
sondern zumindest so:
1
int msp430_i2c_read (unsigned char slave_addr, unsigned char reg_addr, unsigned char length, unsigned char *data)
dann dürfte dein Funktionsaufruf etwa so aussehen:
1
uint8_t buf[10];
2

3
msp430_i2c_read(0x68,0x1C,1,buf);
danach müsste in buf[0] der Wert aus dem Register 0x1C stehen.

Kann aber natürlich auch sein, dass die Funktion die Slave-Adresse 
geshiftet erwartet sowie das "lese-bit"
1
uint8_t buf[10];
2

3
msp430_i2c_read((0x68<<1)|I2C_READ,0x1C,1,buf);
OP #2886472
Lesenswert?

oh ja, keine ahnung wann das * verschwunden ist.

ok das kann ich zumindest mal versuchen aber wie kommst du jetzt auf die 
0x68?





also wahrscheinlich stimmt die da ich so was ähnliches schon mal in dem 
forum vom hersteller gelesen hatte.

hier mal das zitat von dem post:
1
1. Reset MPU9150: write 0x80 to 0x6B (PWR_MGMT_1), address 0x68 
2
2. Disable sleep: write 0x01 to 0x6B (PWR_MGMT_1), address 0x68 
3
3. Setup I2C Bypass: write 0x02 to 0x37 (INT_PIN_CFG), address 0x68
4

5
4. Set mag to single measurement: write 0x01 to 0x0A (CNTL), address 0x0C
6
5. read mag: Read 6 bytes from 0x03 (HXL), address 0x0C

was mich an derAsache dann nur verwirrt hatte, war das er da unten dann 
plötzlich auf 0x0C Schreibt. vielleicht liegt es auch nur daran das das 
mag. anders funktioniert...
#2886486
Lesenswert?

Jan L. schrieb:
> oh ja, keine ahnung wann das * verschwunden ist.
>
> ok das kann ich zumindest mal versuchen aber wie kommst du jetzt auf die
> 0x68?
hast du dir doch selbst schonmal beantwortet:
Jan L. schrieb:
> arg ja die pdf hatte ich noch nicht gesehn xD
> wie doof
>
>
1
> MPU-9150  I²C device address selection pin AD0.
2
> When the pin value is low, the device address is 0x68.
3
> When the pin value is high, the device address is 0x69.
4
>
>
OP #2887149
Lesenswert?

also ich starte die

I2C verbindung,
Resete mit dem Powermanagement,
setzte den Accel auf eine range von +-4g High Pass Filter aus
dann lese ich vom Accel
1
// Power Management reset / start
2
  w_buff[0] = 0x80;
3
  msp430_i2c_write(ADDR, 0x6B, 1, w_buff);
4

5
  w_buff[0] = 0x01;
6
  msp430_i2c_write(ADDR, 0x6B, 1, w_buff);
7

8

9

10
  //write / read Accel Config
11
  w_buff[0] = 0x01;
12
  msp430_i2c_write(ADDR, 0x1C, 1, w_buff);
13
  //msp430_i2c_read(ADDR, 0x1C, 1, r_buff);
14

15

16
  //read Accel data
17
  msp430_i2c_read(ADDR, 0x3B, 6, r_buff);
18

19
  for(i = 0; i < 10; i++)
20
      printf("r_buff[%d]: %X \t w_buff[%d]: %X\n", i, r_buff[i], i, w_buff[i]);

leider stehen nur "0" in meinem Array =(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren