PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C (Levelshifter) funktioniert nicht



Che Guevara
13.01.2013, 16:49
Hi,

ich habe zwei Platinen, welche mit unterschiedlichen Versorgungsspannungen (3V3 & 5V) arbeiten. Da diese über I2C kommunizieren sollen, hab ich einen I2C-Levelshifter aufgebaut, nach der Application Note AN97055 von Phillips. Als Mosfets verwende ich zwei BSS138, als Pullups auf jeder Seite 3k3.
Sobald ich jedoch die Kabel einstecke, geht die 5V-Seite (SDA & SCL) auf 0V. http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter

Wenn ich die Kabel rausziehe, arbeiten beide Seiten korrekt!

Hat jemand einen Hinweis, was falsch sein könnte?

Vielen Dank & Gruß
Chris

EDIT:
Achja, das noch: Immer, wenn der Master (ATXMega32A4 @ 3V3) etwas an den Slave sendet, resettet sich dieser...

Markus_HH
13.01.2013, 17:51
Eine Antwort ist schwer ohne Deine Platine zu sehen. Ich habe auch gerade einen Level-Shifter für I2C aufgebaut, vielleicht hilft das (Schaltplan, Platine) weiter: http://lookmanowire.blogspot.de/2012/12/level-shifter-for-xbee-raspberry-pi.html

Che Guevara
13.01.2013, 17:53
Hi,

danke für deine Antwort!
Meine Schaltung des Levelshifters entspricht 1:1 der in deinem Link, bis auf die Pullups, ich verwende 3k3 anstatt 10k.
Vom Rest habe ich keinen Schaltplan, könnte ihn aber notfalls erstellen.

Gruß
Chris

Markus_HH
13.01.2013, 18:22
Wenn die Platine tatsächlich 1:1 ist (was ohne diese zu sehen schwer zu beurteilen ist), bleibt ja nur noch die Software. Wie sieht denn der Programmcode des ATXMega aus? Welcher IC ist als Slave angeschlossen? Funktioniert das ganze mit einem simplen Level-Shifter aus Widerständen (Beispiel im Beitrag am Ende).

Che Guevara
13.01.2013, 18:24
Hi,

ich meine nicht die Platine ansich, sondern den Schaltplan des Levelshifters ;)
Dass es ein Softwareproblem ist, glaube ich nicht, weil der Fehler auch auftritt, wenn der I2C-Bus überhaupt nicht im Programm verwendet wird.
Der ATXMega ist der Master, an ihm hängen ein MPU6000 als I2C-Slave und der ATMega328p als Slave.
Mit Wiederständen hab ich es noch nicht ausprobiert.

Gruß
Chris

EDIT:
Ok, ich habs nochmal probiert, es scheint wohl doch ein Softwareproblem zu sein..... Sobald ich im Slave die "Config TWISlave = ..." auskommentiere, funktioniert der Levelshifter... Aber das werde ich dann in meinem anderen Thread zu diesem Thema schreiben