hi,
ok danke, habe nun folgende config:
Code:
MPU6050_writeByte(&TWIE, MPU6050_RA_PWR_MGMT_1, (MPU6050_CLOCK_PLL_XGYRO));
MPU6050_writeByte(&TWIE, MPU6050_RA_CONFIG, (MPU6050_DLPF_BW_42 | MPU6050_EXT_SYNC_DISABLED));
MPU6050_writeByte(&TWIE, MPU6050_RA_SMPLRT_DIV, 4);
MPU6050_writeByte(&TWIE, MPU6050_RA_GYRO_CONFIG, (MPU6050_GYRO_FS_500));
MPU6050_writeByte(&TWIE, MPU6050_RA_ACCEL_CONFIG, (MPU6050_ACCEL_FS_4));
Powermanagement: Clock: X-Axen Gyro
Config: DLPF_CFG:3, EXT_SYNC disabled
SampleRate: 1000/5 -> 200hz
Gyro: +-500°/s
Acc: +-4g
[...zeg wieder weg, ist alt...]
//UPDATE 10:30Uhr:
Ich vermute es sind die ACK/NACK/STOP-Bedingungen, die die Fehler verursachen.
Code:
void MPU6050_writeByte(TWI_t *twi, uint8_t regAdress, uint8_t data){
Send_Address(twi, MPU6050_ADDR, 0);
delay_ms(10);
twi->MASTER.DATA = regAdress;
while(!(twi->MASTER.STATUS&TWI_MASTER_WIF_bm));
delay_ms(10);
twi->MASTER.DATA = data;
while(!(twi->MASTER.STATUS&TWI_MASTER_WIF_bm));
delay_ms(10);
twi->MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
delay_ms(10);
}
uint8_t MPU6050_readSequence(TWI_t *twi, uint8_t regAdress)
{
uint8_t readData;
Send_Address(twi, MPU6050_ADDR, 0);
delay_ms(10);
twi->MASTER.DATA = regAdress;
while(!(twi->MASTER.STATUS&TWI_MASTER_WIF_bm));
delay_ms(10);
Send_Address(twi, MPU6050_ADDR, 1);
delay_ms(20);
readData = twi->MASTER.DATA;
// while(!(twi->MASTER.STATUS&TWI_MASTER_RIF_bm));
twi->MASTER.CTRLC = TWI_MASTER_CMD_STOP_gc;
delay_ms(10);
return readData;
}
Die initialisierung mit mehrfachem writeByte läuft nun durch, anschließend kann er einmal einen wert auslesen. Beim nächsten mal bleibt er beim senden der Adresse, also in der ersten Zeile hängen. Es kommt wohl kein ack vom MPU, da dieser noch auf etwas wartet. Was genau das ist weis ich aber nicht...
//UPDATE 23:13Uhr
UUUND der TWI läuft
Lesezeichen