Forum: Mikrocontroller und Digitale Elektronik RTC und Beschleunigungssensor am I2C funktionieren nicht zusammen


von Karls Q. (karlsquell)


Lesenswert?

Moin,

Ich habe vor, das Auftreten von Erschütterungen zu Loggen.

Dafür habe ich nen Arduino Uno R3, ein Adafruit 1141 Shield 
(SD-Kartenslot mit RTC) und ein GY-85 Sensorboard hergenommen.

Der Realtimeclock ist ein PCF8523 
(https://www.nxp.com/docs/en/data-sheet/PCF8523.pdf) und von dem 
Sensorboard nutze ich den ADXL345 Beschleunigungssensor 
(http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf)

Sowohl RTC als auch ADXL werden über I2C angesteuert.

Zuerst hatte ich nur das SD-Karten-Shield in betrieb genommen, das hat 
auch wunderbar geklappt.

Dann habe ich das GY-85 aufgelötet, aber noch nichts in der Software 
geändert und schon spuckte der RTC nur noch Unsinn aus. Unsinn bedeutet, 
dass die aktuelle Zeit nicht übernommen wird und die Sekunden nicht 
richtig hochzählen. Kappe ich die SDA und SCL Leitungen zum GY-85 
funktioniert der RTC wieder.
Implementiere ich in der Software noch den ADXL, funktioniert dieser wie 
gewünscht, nur halt eben nicht der RTC mehr.

Woran könnte das liegen?

Da beide Boards jeweils eigene Pulldown-Widerstände haben, habe ich sie 
bei dem RTC die mal testweise entfernt. Brachte auch nichts.

Beide Komponenten werden mit 5Volt betrieben, wobei das GY-85 einen 
eigenen LDO für 3,3Volt hat. Zusätzlich ist dann wieder ein Levelshift 
drauf, um wieder 5Volt Signale zu bekommen.

Gruß und Danke,
Johannes

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Karls Q. schrieb:
> Da beide Boards jeweils eigene Pulldown-Widerstände haben, habe ich sie
> bei dem RTC die mal testweise entfernt. Brachte auch nichts.

Du meinst wohl Pull-Up ...

Der eigentliche Grund könnte die I2C-Slave-Adresse sein, die beim 
PCF8523 0x68 (Schreiben) und 0x69 (Lesen) ist und damit vermutlich mit 
MPU-3050 des GY-85 kollidiert (wahlweise fest 0x68 oder 0x69).

von Peter D. (peda)


Lesenswert?

Lt. Datenblatt sollte es keinen Konflikt geben:
PCF8523: D0/D1
ADXL345: 3A/3B oder A6/A7

von Karls Q. (karlsquell)


Lesenswert?

Besten DANK!!!!!

Ja es gab wirklich einen Konflikt mit dem Gyro (ITG-3200).

Hab kurzerhand die Busleitungen dorthin durchtrennt und schon 
funktionierte es. Ja ich weiß, nicht die feinste Art, aber Zielführend.

Vielen dank für die Unterstützung!

PCF und ADXL hatte ich auch vorher überprüft, aber an die anderen 
Sensoren habe ich nicht gedacht.

Eberhard H. schrieb:
> Du meinst wohl Pull-Up ...

Ja genau, Pull-Up

Gruß
Johannes

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Lt. Datenblatt sollte es keinen Konflikt geben:
> PCF8523: D0/D1

0x68 ist schon korrekt für die 7-Bit-I²C-Slave-Adresse (natürlich 
dieselbe sowohl für Lesen als auch für Schreiben, 0x69 war nicht 
korrekt).

Karls Q. schrieb:
> Ja es gab wirklich einen Konflikt mit dem Gyro (ITG-3200).

Sowohl der 3050 als auch der 3200 haben wahlweise die 
7-Bit-I²C-Slave-Adresse 0x68 oder 0x69 (durch Pin AD0 vorgegeben).

Beim 3050 kann man I2C deaktivieren, beim 3200 offensichtlich nicht.

> Hab kurzerhand die Busleitungen dorthin durchtrennt und schon
> funktionierte es. Ja ich weiß, nicht die feinste Art, aber Zielführend.

So hätte ich es auch gemacht (ggf. mit einem eigenen Pull-Up am 
I/O-Pin).

Falls du auch einen dieser Gyros mitverwenden möchtest, hast du mehrere 
Möglichkeiten:

- AD0 der Gyros auf High legen
- einen separaten I²C-Bus für den PCF8523 verwenden
- oder einen I²C-Adress-Bus-Translator (z.B. LTC4316) zwischen µC und 
PCF8523 einfügen

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.