Forum: Compiler & IDEs Problem beim Empfangen von Daten über I2C


von Andreas G. (cpl)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich versuche von einem Mega328 (Master) Daten von einem 
Beschleunigungssensor MPU6050 (Slave) abzufragen. Die Adresse des MPU 
ist 0x68; mit dem Beschreiben des Registers 0x6B wird er aus dem Schlaf 
geweckt.

Nun will ich das Register 0x3B auslesen, welches laut Register das high 
byte der Beschleunigungsmessung in x-Richtung beinhaltet (register name 
ACCEL_XOUT_H).

Allerdings scheint beim Empfangen der Daten etwas schiefzulaufen, 
insbes. gibt mir meine Funktion I2CReceiveData() nichts zurück. Was 
läuft hier schief?


Das Data-direction-bit für das auslesen des Registers setze ich mit:
1
        int SLA_R = DeviceAdress;
2
        SLA_R |= (1 << 1);  
3
        I2CwriteData(SLA_R); //SLA+R

An der Verdrahtung leigt es schonmal nicht: der code eines Kollegen 
(andere Sprache) läuft auf meiner hardware einwandfrei und liefert zudem 
die gewünschten Daten.





Grüße
CPL
p.s.
Ich hoffe mal den Quellcode kann man so lesen; Ansonsten hänge ich den 
nochmal direkt per code im Browser rein oder sehe zu wie ich den 
gescheit formatiert bekomme.

von Dr. Best (Gast)


Lesenswert?

Fehlt da vielleicht das "repeated start"-Signal nach dem Senden der 
Registeraddresse?

von Andreas G. (cpl)


Lesenswert?

Hmm.. Datenblatt sagt:

"Repeated START enables the Master to switch between Slaves,
Master Transmitter mode and Master Receiver mode without losing control 
of the bus."

In meinem Fall führe ich aber doch mit der "nacheinander-Ausführung " 
der Funktionen Write_I2C_Register und dann Read_I2C_Register zwei völlig 
getrennte Schreib-bzw. Leseprozesse durch, wobei ich jedesmal kurz die 
Kontrolle über Bus aufgebe (I2Cstop) und dann wieder aufnehme und per 
I2Cstart eine komplett neue Verbindung zum Slave aufbaue. Repeated start 
macht da in meinen Augen keinen Sinn- oder habe ich da was grundsätzlich 
falsch verstanden?

Grüße
CPL

von MWS (Gast)


Lesenswert?

Für den Sensor gibt's ein Datenblatt Product Specification, darin werden 
beispielhaft unter I2C Communications Protocol die Sequenzen für 
Single-Byte Und Burst Read beschrieben. Halte Dich einfach daran und 
dichte nicht selbst was zusammen, dann klappt's auch.

von Wolfgang (Gast)


Lesenswert?

Andreas G. schrieb:
> Ich hoffe mal den Quellcode kann man so lesen;

Was hindert dich daran, C-Quellcode als .c-Datei anzuhängen???

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.