Hallo,
ich bin neu in der Welt der µC und bin nun dabei angekommen mich etwas
mit I²C auf dem ATMega16 als Master zu beschäftigen. Dazu habe ich mir
eine kleine Sensorplatine gekauft, welche eine Betriebsspannung von 3,3V
hat und eben über I²C mit meinem ATMega16 kommunizieren soll. Dieser
läuft mit 5V VCC. Nun werden auf der Sensorplatine die SDA und
SCL-Leitungen schon durch einen Pullup auf 3,3V gezogen. Laut Hersteller
soll es aber kein Problem sein, die Sensoren dann auch mit einem 5V Chip
kommunizieren zu lassen.
Jetzt stellt sich mir die Frage wie das gehen soll. Das Empfangen der
Daten auf dem Master kann ich mir ohne Probleme vorstellen. Der Slave
zieht die Leitung entweder auf GND oder 3,3V-VCC und der Master erkennt
das. Wenn der Master jetzt aber Daten schicken soll stelle ich mir das
ganze problematisch vor. Das runterziehen der Leitung auf GND sollte ja
noch ohne Probleme geben, wenn der Master die Leitung jetzt aber auf
seine 5V-VCC zieht, habe ich dann nicht einerseits eine viel zu hohe
Spannung am Slave anliegen und anderseits fließt dann nicht Strom in die
3,3V-Quelle rein?
Wieso sagt der Hersteller dennoch, dass das keine Probleme gibt?
Pikko schrieb:> Das runterziehen der Leitung auf GND sollte ja> noch ohne Probleme geben, wenn der Master die Leitung jetzt aber auf> seine 5V-VCC zieht
Das tut er nicht. Wenn da jemand zieht, dann tut das der Pull-Up. Falls
der Chip auf deiner Sensorplatine am Eingang interne Schutzdioden gegen
VCC bzw. Gnd hat, wird die Spannung auf 3.3V+Vf, also etwas unter 4V
zusammenbrechen.
Pikko schrieb:> Wieso sagt der Hersteller dennoch, dass das keine Probleme gibt?
Wahrscheinlich, weil der Hersteller dafür gesorgt hat, dass die Eingänge
auch bei 3,3V 5V-tolerant sind.
Dumm wirds dann mit den pull-up-Widerständen, die nach 3,3V gehen. Die
würden die 3,3-Versorgung aus den 5V aufladen, wahrscheinlich auf 5V.
Wahrscheinlich müssen da die I2C-Leitungen auf der master-Seite auf 5V
hochgezogen werden, der 3,3 Baustein kommt mit den Pegeln an dem auf 5V
Pegel hochgezogenen Bus zurecht. Er selbst zieht wegen
open-collector-Ausgang beim Ack usw. die Bussignale von 5V auf 0V
herunter, obwohl er selbst mit 3,3 versorgt ist. Pull-ups beim slave
also weglassen.
Soweit ich weiß, benötigt man für den ganzen Bus nur einmal die
pullup-Widerstände, nicht bei jedem Teilnehmer.
Danke für die Antwort. Kann ich mir das also so vorstellen, dass die
Chips die Leitung entweder auf GND ziehen oder einfach nichts tun, so
dass die Leitung vom Pullup auf 3,3V gezogen wird?
Pikko schrieb:> Danke für die Antwort. Kann ich mir das also so vorstellen, dass> die> Chips die Leitung entweder auf GND ziehen oder einfach nichts tun, so> dass die Leitung vom Pullup auf 3,3V gezogen wird?
Genau so ist es.
Pikko schrieb:> Kann ich mir das also so vorstellen, dass die> Chips die Leitung entweder auf GND ziehen oder einfach nichts tun, so> dass die Leitung vom Pullup auf 3,3V gezogen wird?
Eher so: Der Master- pullup zieht die Leitungen auf 5V. Die Eingänge der
slaves sind aber so ausgeführt, dass sie die 5V vertragen (also ohne
Schutzdioden nach 3,3V)
Die andre logische Erklärunge wäre: Der Bus wird per pullup auf 3,3V
gezogen und der Master ist imstande, die 3,3V als high-Pegel zu
erkennen.
Peter R. schrieb:> Soweit ich weiß, benötigt man für den ganzen Bus nur einmal die> pullup-Widerstände, nicht bei jedem Teilnehmer.
Die Signale sind sauberer (reflektionsärmer, weniger HF-Spikes), wenn an
jedem Ende der Leitung ein Abschlußwiderstände sitzt.
http://i2c2p.twibright.com/spec/i2c.pdf