Liste der Anhänge anzeigen (Anzahl: 2)
I2C Verbindung bleibt hängen
Hallo,
ich versuche gerade einen MPU6050 über I2C anzusprechen, nur leider scheitere ich schon in der Initialisierungsphase.
Nutze ich als Dev-Adresse 0x68 dann hängt er sich bei "i2c_start_wait(Devaddr+I2C_WRITE);" auf.
Nutze ich als Dev-Adresse 0x69 dann hängt er sich bei "i2c_write(0x6B);" auf.
Änderung durch zusätzliche Pullup-Widerstände:
Als Anhang gibs noch Mitschnitte einmal mit Adresse 68 und einmal mit 69
bei 68 sendet er sich tot, immer wieder die gleiche Abfolge (die zu sehen ist)
bei 69 nur so wie gezeigt danach bleibt Clock auf Low und Data ist wider High
Ich nutze die Lib von Peter Fleury
Woran kann das liegen? Wie sprech ich das kleine Teil an?
Sourcecode:
Code:
#include <avr/interrupt.h> //UART
#include <avr/io.h>
#include <stdlib.h>
#include <stdint.h>
#include "test.h"
#include <inttypes.h>
#include <util/delay.h>
#include "uart.h"
#include "i2cmaster.h"
#define Devaddr 0x69 // device address of MPU6050 0x68 oder 0x69
//screen /dev/ttyS5 9600 8N1
int main(void)
{
unsigned char ret;
_delay_ms(1000);
i2c_init(); // init I2C interface
uart_init();
sei();
uart_puts("Started\r\n");
i2c_start_wait(Devaddr+I2C_WRITE); // set device address and write mode
i2c_write(0x6B);// Register Adress
i2c_write(0x01);// Data send
i2c_stop();
while (1)
{
_delay_ms(2000);
}
return 0;
}
Liste der Anhänge anzeigen (Anzahl: 1)
AD0 ist High
Ich verstehe die Welt nicht mehr:
i2c_start(0b11010010); //Write Mode geht
ABER: i2c_start_wait(Devaddr+I2C_WRITE); //Devaddr=0x69, I2C_WRITE=0 geht nicht
jetzt klappt das schreiben schon mal
beim Lesen gibt es aber Probleme:
Code:
uart_puts("Started\r\n");
i2c_start(0b11010010); //Write Mode
i2c_write(0x6B);// Register Adress
i2c_write(0x01);// Data send
i2c_stop();
i2c_start(0b11010010); //Write Mode
i2c_write(0x1B);// Register Adress
i2c_write(0x00);// Data send
i2c_stop();
i2c_start(0b11010010); //Write Mode
i2c_write(0x1C);// Register Adress
i2c_write(0x00);// Data send
i2c_stop();
i2c_start(0b11010010); //Write Mode
i2c_write(0x6B);// Register Adress
i2c_write(0x00);// Data send
i2c_stop();
_delay_ms(1);
i2c_start(0b11010010); //Write Mode
i2c_write(0x75);
_delay_ms(1);
i2c_rep_start(0b11010011); // set device address and read mode
ret = i2c_readNak(); // read one byte
i2c_stop();
uart_puts("Dev: ");
uart_puti(ret);
uart_puts("\r\n");
Beim "ret = i2c_readNak();" hängt er sich auf
der Slave schickt ihn kein Ack und keine Daten Clock bleibt auf low
Links auf den Bild ist der ausschnitt von:
Code:
i2c_start(0b11010010); //Write Mode
i2c_write(0x75);
Rechts der von:
Code:
i2c_rep_start(0b11010011); // set device address and read mode
ret = i2c_readNak(); // read one byte
i2c_stop();