Forum: Mikrocontroller und Digitale Elektronik ADXL345 im I2C Mode 5V tolerant?


von Christian J. (Gast)


Lesenswert?

Hallo,

ich habe mir diesen Stein heute mal zuegelegt, der natürlich keinerlei 
Schaltplan hat und stolpere über das Datenblatt des Chips, der klar von 
2.5V-3.3V Betrieb spricht.

http://www.ebay.de/itm/251964335134?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT

Nun finden sich im Netz jeweils hälftig beide Varianten: Vcc an 3.3V und 
I2C über Pull-Up an 5V und auch an 3.3V. Mal mit I2C Level Shiter, mal 
ohne.

Stellt sich mir die Frage: Hält dieses Modul es aus, wenn SDA/SCL über 
einen Pull Up an 5V gehen und dann auf den I2C Bus des 5V uC? Open 
Collector zieht ja nur gegen Masse. Vcc des ADXL Moduls würde ich an 
3.3V hängen. Das Datenblatt sagt allerdings eindeutig Vs > Vdi/o.s, 
schweigr sich aber aus ob das nur für SPI gilt und die Int Pins oder 
auch für I2C.

Wäre gut, wenn diese Frage mit ja/nein beantwortet werden könnte.

von 5V ist tot (Gast)


Lesenswert?

5V an den Pins geht nicht, betreibe deinen uC mit 3.3V und Problem 
gelöst...

von 5V ist tot (Gast)


Lesenswert?

Nachtrag: Oder du baust dir einen Pegelwandler aus vier Widerständen 
und zwei N-MOS.

von Christian J. (Gast)


Lesenswert?

5V ist tot schrieb:
> 5V an den Pins geht nicht, betreibe deinen uC mit 3.3V und Problem
> gelöst...

Geht nicht ....uC muss wegen anderer Peripherie 5V haben. 5V würden über 
4.7k an den I2C Pins liegen. Und auch wenn kein Plan im ADXL Datensheet 
drin ist, so war das bisher immer so, dass Pins zwei Clamb Schutzdioden 
gegen Vcc und GND haben, über die Überspannung abfliessen kann. Diese 
Dioden kann man als Pegelanpassung missbrauchen, wenn der Strom nicht zu 
hoch wird. Die überschüssigen 2V würden über den 4.7k abfallen. 
5V-3.3V/4.7k ~ 0.5mA. mehr wäre das nicht.

Aber das weiss ich eben nicht genau und einen Freischuss will ich nicht 
riskieren. Testweise könnten die PU natürlich auch an 3.3V kommen, der 
AVR gibt an seinen SDA/SCL Leitungen ja keine Spannung aus, der Master 
zieht nur die Senke runter auf 0V, das ist I2C. Und solange 0.3xVcc und 
0.7xVcc als Schwellen eingehalten werden müsste das klappen.

Ich probiers aus mit Pu an 3.3V.... aber heute nicht mehr.

von 5V ist tot (Gast)


Lesenswert?

Christian J. schrieb:
 Testweise könnten die PU natürlich auch an 3.3V kommen, der
> AVR gibt an seinen SDA/SCL Leitungen ja keine Spannung aus, der Master
> zieht nur die Senke runter auf 0V,
und will > 0,7 * Vcc als High Eigangsspannung haben.

P.S. 0,7 * 5 = 3,5

von Klaus (Gast)


Lesenswert?

Christian J. schrieb:
> Geht nicht ....uC muss wegen anderer Peripherie 5V haben. 5V würden über
> 4.7k an den I2C Pins liegen. Und auch wenn kein Plan im ADXL Datensheet
> drin ist, so war das bisher immer so, dass Pins zwei Clamb Schutzdioden
> gegen Vcc und GND haben, über die Überspannung abfliessen kann. Diese
> Dioden kann man als Pegelanpassung missbrauchen, wenn der Strom nicht zu
> hoch wird. Die überschüssigen 2V würden über den 4.7k abfallen.
> 5V-3.3V/4.7k ~ 0.5mA. mehr wäre das nicht.

Das ist so in Ordnung, aber nur die Hälfte der Wahrheit. Die Dioden 
begrenzen den High-Pegel auf 3,3V plus Diodenspannung (der Strom ist 
sogar geringer) aber der µC sieht auch nicht mehr. Wenn ihm das reicht, 
könnte man die Pullups am I2C Bus auch gleich auf eine niedrigere 
Spannung klemmen.

> Aber das weiss ich eben nicht genau und einen Freischuss will ich nicht
> riskieren.

Kost doch auch kaum mehr als der Extrakäse auf der Pizza oder ein Kaffee 
in Pappe.

MfG Klaus

von Christian J. (Gast)


Lesenswert?

5V ist tot schrieb:
> P.S. 0,7 * 5 = 3,5

Grrr..... nerv! Da fehlen >0.2V zum Glück.

Wie gesagt, ich probiers aus, mit 3.3V und 5V an den PU. Manchmal 
funktionieren Dinge auch abseits des Datenblattes, nur halt nicht über 
den gesamten Temp.bereich oder mit maximaler Geschwindigkeit. Wenns 
raucht gibts eben eine Pizza Margaritha statt Procuitto.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Für die SCL Leitung ists eh wurscht, da wird ein 1k oder so in der 
Leitung reichen.
NXP hatte auch mal eine trickige Schaltung mit 2 Transistoren 
veröffentlicht (oder wars noch Philips?), die bidirektional 5 auf 3,3V 
wandelt und speziell für I²C gedacht war.
Ich finde das Dings bloss nicht mehr.

von Christian J. (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Ich finde das Dings bloss nicht mehr.

Guckst du hier:

http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter

"Connecting the 5V Arduino directly to a single 3.3V-powered I2C chip 
usually works, even though it violates official specifications in 
multiple ways. In practice, Arduino's internal pullups are so weak that 
ESD protection diodes inside the 3.3V chip limit the voltage."

von Christian J. (Gast)


Lesenswert?

Hallo,

alles halb so wild. Das Ding spielt einwandfrei bei PU an 3.3V mit einem 
I2C Bus eines Arduino. Und da die TWI der Attinys ja normale Pegel hat 
und keine I2c wird das Modul es da auch tun.

Vielleicht bin ich ja blöd aber wieso liefern die Module Werte völlig 
verschieden von 0 wenn sie in Ruhe sind? Z sogar extrem hoch, nur bei 
16G kommt was raus:

X = -333
Y = 158
Z = 1102

bei völliger Ruhe. Umgerechnet in g ist es auch nicht 0 sondern 4-5g 
oder 40g bei Z.

Ich benutze die Adafruit Lib fürs erste, die spielt out of the box und 
gibt noch einiges mehr aus mit dem Demo Sketch.

Komisch...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein PCA9517 würde ein "sauberes" Design ermöglichen. I2C mit 5V-Pullups 
auf der einen, und I2C mit 3.3V-Pullups auf der anderen Seite.

von Christian J. (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Ein PCA9517 würde ein "sauberes" Design ermöglichen.

Die Module sind schon mit PU->3.3V ausgeliefert und haben einen 3.3V 
Regler drauf, der Vcc=5V ermöglicht. Vermutlich funktionieren sie 
"haarscharf". Da ich aber keine echte I2C nutze, sondern einen normalen 
Pin außerhalb der I2C Spec, dessen Schwellwert bei Vcc * 0.6 = 3.0V 
liegt und damit ein eindeutiges Signal ermöglicht.

Jaja, nix für ein Industriedesign aber fürn Schreribtisch reicht es 
ja....

Z = 1097 in Ruhe ist aber nicht normal und kann auch nicht per Offseet 
korrigiert werden, da der nur 8 Bit hat. Vermutlich aber blicke da noch 
was nicht richtig, werde mir mal das Datenblatt in ruhe durchlesen.

von Frank K. (fchk)


Lesenswert?

Christian J. schrieb:

> Vielleicht bin ich ja blöd aber wieso liefern die Module Werte völlig
> verschieden von 0 wenn sie in Ruhe sind? Z sogar extrem hoch, nur bei
> 16G kommt was raus:

Herzlichen Glückwunsch! Du hast die Erdbeschleunigung entdeckt. 0/0/0 
ist nur in der Schwerelosigkeit zu erwarten.

fchk

von Christian J. (Gast)


Lesenswert?

Frank K. schrieb:
> Herzlichen Glückwunsch! Du hast die Erdbeschleunigung entdeckt.

Ach Mensch, halt mich nicht für blöde..... 1097 kann ja nicht sein und 
44g ist die auch nicht. Diese blöde Lib ist viel zu kompliziert mit 
ihren Floats usw. Habe mal das Full Precision Bit rückgesetzt und die 
Welt sieht schon anders aus.

Ich vermute allerdings dass der Sensor fratze ist, mit einer reinen I2C 
Lösung ohne Libs kommt auch Müll raus bei Z.

x: -166 y: 78 z: 511
x: -168 y: 79 z: 511
x: -168 y: 78 z: 511
x: -166 y: 78 z: 511
x: -168 y: 78 z: 511
x: -168 y: 79 z: 511
x: -167 y: 78 z: 511
x: -168 y: 78 z: 511
x: -168 y: 78 z: 511
x: -168 y: 78 z: 511
x: -167 y: 79 z: 511
x: -168 y: 79 z: 511
x: -167 y: 78 z: 511
x: -168 y: 78 z: 511
x: -168 y: 78 z: 511
x: -167 y: 79 z: 511
x: -169 y: 78 z: 511
x: -168 y: 78 z: 511
x: -168 y: 79 z: 511

von Christian J. (Gast)


Lesenswert?

PS:

Na, supi, mal wieder C-Ware au China!

Nachdem ich mit dem Chip im E-Labor war und wir da ne Runde drauf 
geschaut haben ist die Sache klar: Es sind revisionen auf dem Markt, wo 
die Z Achse defekt ist. Ihr Fehleroffset liegt weit ausserhalb der Spec 
und ist daher auch nicht auf 0 korrigierbar. Das Modul kann nur bei +16g 
betrieben werden. Mehrere Quellen im Netz belegen das.

Darüber hinaus hat es einen Lineraritätsfehler, rechnerisch ergibt sich 
ein Wert von 1,3g an der Erdoberfläche. 1g wäre erlaubt. Das Datenblatt 
lässt bei 1g maximal #282 als Ausgabewert zu, tatsächlich sind es aber 
ca 320.

Der Chip hat den Datecode 3.2014 und wurde auf den Philipinien 
hergestellt.

Ich vermute mal, dass wieder mal C Ware auf den Markt geworfen wurde, 
für Spielsachen reicht es ja und für "Arduinos" :-(

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.