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.
Genau. Wenn du einen 5V und einen 3.3V-Baustein über I2C verbinden willst, kannst du idR einfach die Pullups auf 3.3V machen und dann tut das schon.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.