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.
Bevor du das ganze Netz durchsuchst, warum schaust du denn nicht gleich
in das "MPU-9150 9-Axis Evaluation Board User Guide" (EVB) in "Table 5"?
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?
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?
also wenn du mit i2c periperie die Sensoren meinst die schon auf dem
Board sind, dann will ich die ansteuern...
brauch ich dann nur einen der beiden oder wie?
Jan L. schrieb:
> also wenn du mit i2c periperie die Sensoren meinst die schon auf dem
> Board sind, dann will ich die ansteuern...
Dann brauchst Du deren Adressen. Die musst Du Deiner Funktion als
slave_addr übergeben.
ahh mist jetzt bin ich ja so klug wie vorher XD
die haben zwar register adressen für z.b. 0x1C für Accel_Config aber das
ist ja nicht die slave adresse....
und ich bin mit meinem latein wirklich am ende wo das steht ....
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);
|
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...
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 | >
|
>
aber könnte es dann nicht auch 69 sein?
Ja, je nachdem wie AD0 angeschlossen ist.
ahhh langsam wirds klarer mal sehn ob ich ad0 noch finde xD
Jan L. schrieb:
> ahhh langsam wirds klarer mal sehn ob ich ad0 noch finde xD
Pin 24 an der Stiftleiste (bzw. Pin 9 am MPU), ist ja nicht so dass es
nicht im Manual des Eval Boards stehen würde
ahh wenn man es weiß dann ists ganz logisch xD habs jetzt auch :P
danke für deine / eure Hilfe =)
werd das alles gleich mal teste =)
edit: hier stand ein Problem was sich von allein gelöst hat...
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 =(
Was steht in ADDR?
Wie sieht die "msp430_i2c_read" aus?
Kannst du andere Register auslesen (z.B. Status oder so)?
Evtl. machst du auch den Start zu früh nach dem Reset.
Wie schon gesagt muss ADDR vielleicht um einen nach links geshiftet
werden
in addr steht 0x68 drin und wie das read aussieht weiß ich leider nicht
... aber nach dem ich das board an und ausgeschaltet hatte ging es -.-
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|