PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] I²c 3.3v <-> 5v



robo_tom_24
28.05.2012, 11:19
Hallo
Ich überleg mir jetzt schon länger wie ich mein RN-Control (5V) mit meinem Bluetooth Controller (3.3V) über I²C verbinden kann. Der Bluetoothcontroller ist ein ATmega 328P. Am liebsten wär mir eine einfache Transistorlösung.
Was mir aber eingefallen ist: Der mega328P hat ja eine Operating Voltage von 1.8V bis 5.5V, hat er somit im 3.3V Betrieb auch 5V tolerante Eingänge? Bzw. Erkennt dann mein RN-Control mit dem mega32 das 3.3V Signal?

Anmerkung: Mein I²C soll im Standartmode bei 100kHz laufen.

Kampi
28.05.2012, 11:38
Leg den I²C auf 3,3V und verbinde die beiden Controller miteinander.
Du darfst den Controller nicht mit 3,3V betreiben und dann 5V Pegel anlegen. Dadurch könnte er beschädigt werden.
Und 3,3V I²C wird vom 5V Controller problemlos erkannt :)

robo_tom_24
28.05.2012, 12:23
Schon, aber ich muss ja die 5V irgendwie wieder runter regeln, am einfachsten mit einem Spannungsteiler, aber wenn sich dann die Richtung wieder umdreht (3V3 sendet) hab ich ja einen zusätzlichen Spannungsabfall in der Leitung. Somit brauch ich eben einen Pegelwandler, der in beide Richtungen funktioniert.

Kampi
28.05.2012, 12:30
Den Spannungspegel vom I²C legst du ja mit der Spannung fest die du an die Pull-up Widerstände legst. Dein RN-Control hat einen Mega32. Der erkennt Pegel von 0,6 x Vcc als High.
Wie lang ist den deine Leitung? Wenn deine Leitung nur 20-30cm lang ist, kannst du den Spannungsabfall (denke ich) vernachlässigen. Bei Leitungslängen von mehreren Metern solltest du einen anderen Bus als I²C nehmen.

robo_tom_24
28.05.2012, 12:43
Ahh ok...
Wie groß muss ich dann die Pul-Ups auslegen?
*Schaltplan Platzhalter*
Leitungslänge: vom RN-Control bis zum BT-Controller rund 5cm, sollte dann einmal noch der Roboterarm kommen werdens insgesamt rund 15 cm weren ;)

Kampi
28.05.2012, 13:07
Bei 15cm Leitungslänge brauchst du den Spannungsabfall nicht zu beachten :P
Die Pull-ups kannst du auf 4,7k legen. Das sollte eigentlich reichen.

robo_tom_24
28.05.2012, 13:28
Ich hab da jetzt mal einen kleinen Schaltplan gezeichnet:
22443

Wenn ich ganz ehrlich bin, ich trau dem Ding nicht ;)
Denn, wenn das RN-Control HIGH ausgibt (5V) liegt diese Spannung ja auch am BT-Controller an. Aber der ist ja 3.3V...
Versteh ich da was von der Schaltung falsch?

Kampi
28.05.2012, 13:50
Du verstehst das Prinzip des I²C nicht.
I²C Geräte geben keinen Pegel aus. Jedes Device hat Open Collector Ausgänge die den I²C Pegel runterziehen. Aus diesem Grund legst du ja auch mittels Pull-up eine Spannung an die Pins an. Eben aus dem Grund weil der I²C keinen Pegel ausgibt. Und wenn du den Pegel auf 3,3V legst, also 3,3V über Pull-Ups an SCL und SDA legst, zieht sowohl das 5V Device als auch das 3,3V Device diesen Pegel runter.
Du siehst das nirgends 5V Signale verschickt werden :)
Les dir das mal durch:

http://de.wikipedia.org/wiki/I%C2%B2C

robo_tom_24
28.05.2012, 14:22
Achsooo :D
Das heißt der µC gibt LOW und Open Collector aus...
Das ändert die Sache natürlich ;)

Aber die Schaltung würde ja so weit mal stimmen oder?

Kampi
28.05.2012, 14:44
Jap die kannst du so verwenden.

Kampi
28.05.2012, 14:52
Hier hast du noch ein bischen was ausführlicheres:

http://www.timmermann.org/ralph/index.htm?http://www.ralph.timmermann.org/elektronik/i2c.htm

robo_tom_24
28.05.2012, 21:05
Danke mal für deine Hilfe!

Gut dass ich vor dem Löten gerade noch mal schnell im RN-Control Schaltplan die Belegung des I²C Steckers nachgesehn habe. Mir ist nämlich aufgefallen, dass das RN-Control bereits Pull-Up Widerstände besitzt. Das ändert die Situation natürlich :(

Die Frage ist nun ob ich 1) einfach die R (R13 & R14) aufklippe und mit einem Jumper versehe, 2) die Pull-Ups auslöte oder 3) eine andere Schaltung aufbaue, dann eben ein Pegelwandler ;)

Kampi
28.05.2012, 21:17
Stimmt! Habe ich gar nicht bedacht das die schon auf dem Board sind.
Musst du wissen was für dich weniger arbeit macht ;)

robo_tom_24
28.05.2012, 21:40
Ok, ich glaub, da es sowieso vertikal verbaute Widerstände sind, klipps ich sie auf uns setz Jumper drauf ;)

Nur mal so zur Vervollständigung....
Gibts eigentlich einen I²C Pegelwandler der nicht aus FETs ist, sondern aus einfachen Wald und Wiesentranistoren (zB BC547)?

-schumi-
29.05.2012, 18:17
Ich suche auch grad nach "I²C 3.3V <-> 5V" und hab das gefunden:
http://www.reichelt.de/80C-87LPC-89C51-Controller/P-82B96-PN/3//index.html?ACTION=3&GROUPID=2941&ARTICLE=70071&SHOW=1&START=0&OFFSET=500&
Im Datenblatt (Ist auch auf der Reichelt-Seite) ist auf Seite 10 gezeigt wies geht (Gleich die erste Zeichnung).

Aber teuer ist das Teil natürlich schon...

robo_tom_24
29.05.2012, 18:48
Ich hab da auch schon was in Richtung IC gefunden:klick (http://www.mikrocontroller.net/articles/Pegelwandler#I2C-Bus:_gemeinsam_3.3V_und_5V)
Gugl hat mir grad das ausgespuckt: klick (http://de.wikipedia.org/wiki/Pegelumsetzer#Pegelumsetzer_mit_Transistor_2)
Aber ob der den Ground wirklich so weitergibt?

-schumi-
29.05.2012, 19:48
Mal eine Frage zu dem von dir verlinkten Wiki-Bild:
22458
Wenn jetzt bei Ua 5V anliegt (also high), dann liegt doch Ub 4.3V an?! (also 5V - [Uf der Diode in T1, angenommen 0V7]). Ein 3.3V-IC der nicht 5V tolerant ist, ist doch dann im Eimer?! (Wenn er tolerant währe bräuchte man auch keinen Pegelwandler^^)

[EDIT]
Das hier kann ich besser nachvollziehen:
22459
Thread: http://www.mikrocontroller.net/topic/92447

robo_tom_24
29.05.2012, 20:28
Wenn ich ehrlich bin - ich habs direkt von wiki kopiert :p
Nur überflogen...
Aber deine Überlegung ist richtig, richtigerweise müssten dann die Seiten einfach getauscht werden - oder?

Klebwax
29.05.2012, 22:04
Mal eine Frage zu dem von dir verlinkten Wiki-Bild:
22458
Wenn jetzt bei Ua 5V anliegt (also high), dann liegt doch Ub 4.3V an?! (also 5V - [Uf der Diode in T1, angenommen 0V7]). Ein 3.3V-IC der nicht 5V tolerant ist, ist doch dann im Eimer?! (Wenn er tolerant währe bräuchte man auch keinen Pegelwandler^^)


Ja, bei dem Bild sind die Spannungen vertauscht.

Aber, deine Rechnung ist so nicht richtig. Du hast den Widerstand R1 vergessen. An ihm fallen, wie in deiner Rechnung angenommen, nur dann 0V ab, wenn kein Strom fließt. Und kein Strom macht auch kein IC kaput.

Fließt aber ein Strom, ergeben sich folgende Verhältnisse: 3,3V Versorgung, dann die Substratdiode des 3,3V ICs (4V) dann die Substratdiode des FET (4,7V) und dann bleiben 0,3V für den Widerstand. Bei einem schon relativ kleinen Pullup von 1k fließt dann ein Strom von 0,3mA, meist aber weniger. Da die Substratdioden 5mA oder mehr aushalten, geht nichts kaput.

Schön ist das natürlich nicht, das Schaltverhalten wird sich verschlechtern. Es kann auch Latch-Up auftreten. So sollte man es also nicht machen.

5V tolerant heißt, man kann den Eingang an eine 5V Stromversorgung, im Extremfall mit Innenwiderstand 0, legen.

MfG Klebwax

robo_tom_24
29.05.2012, 22:10
Hallo
Danke für deine ausführliche Erklärung :)
Kann man die Schaltung somit für I²C einsetzen oder nicht?

Klebwax
29.05.2012, 22:35
Wenn man sie richtig aufbaut (schau in die Originalquelle THE I2C-BUS SPECIFICATION VERSION 2.1 gegen Ende) und die passenden FETs nimt ist das schon ok. Ich würde aber immer versuchen, ohne Pegelwandler auszukommen, also die Pullups an 3,3V und testen, ob alle am Bus damit klarkommen.

MfG Klebwax

robo_tom_24
29.05.2012, 22:53
Ok Danke!!!
Ich hatte ja sowieso vor die Widerstände am RN-Control mit einem Jumper von den 5V zu trennen, also je nach Einsatz die internen Pull Ups zu verwenden oder Externe gegen zB. 3.3V
Aber jetzt weiß ich auch wie man einen bidirektionalen Pegelwandler aufbaut, kann ja nicht schaden :)

robo_tom_24
31.05.2012, 20:52
Planänderung ;)
Ich hab grad eine sehr gute Libary für Software I²C gefunden: klick mich (http://extremeelectronics.co.in/avr-tutorials/software-i2c-library-for-avr-mcus/)
Ich werd jetzt einen 3V3 I²C Bus machen und einen 5V ;)

Dazu hab ich aber eine Frage: kann ich mit dem Soft-I²C auch einen Interrupt auslösen? nein oder?

Kampi
31.05.2012, 22:11
Nein das geht nicht. Das Interruptsystem ist hardwaremässig realisiert. Du kannst da keinen Interrupt hinzufügen :)

robo_tom_24
31.05.2012, 23:05
ok..schade..
Ich will meinen Controller nicht unbedingt in ner Schleife warten lassen :frown:
aber ich suche immer noch nach einer guten Vernetzung zw. den zwei µC
ich hatte auch schon an Software UART - Interruptgesteuert - gedacht...
Hat jemand damit Erfahrungen?

Zur Info: es sind an beiden µC die Hardware UARTs belegt, aber Interrupt Eingänge noch frei ;)

Klebwax
31.05.2012, 23:58
Planänderung ;)
Ich hab grad eine sehr gute Libary für Software I²C gefunden: klick mich (http://extremeelectronics.co.in/avr-tutorials/software-i2c-library-for-avr-mcus/)
Ich werd jetzt einen 3V3 I²C Bus machen und einen 5V ;)


Ich will meinen Controller nicht unbedingt in ner Schleife warten lassen

Du kannst dich an Problemen nicht vorbeimogeln. Entweder du bekommst den I2C Bus mit 3,3V in den Griff, oder du löst das Problem mit 2 Kommunikationskanälen, egal welcher Art, ob mit oder ohne Interrupt.

Nach meiner Erfahrung ist das zweite schwieriger. Es erfordert eigentlich mehrere Tasks oder Threads oder das Equivalent auf einem kleinen µC in Form von Interrupthandlern, Pollfunktionen und Statemaschinen. Das ist richtiges Systemdesign. Und die Probleme treten nur im Echtzeitbetrieb auf, wenn (Murphy) kein Debugger oder Logicanalyzer in der Nähe ist.

Die 3,3V vs 5V Geschichte läßt sich leicht auf dem Labortisch entwickeln und debuggen. Auch mit Gleichstrom kann man Lichtbogen erst mit mehr als 60V starten;)

Ich hab mal eine HCMOS (74HC14) Schaltung versehentlich am Labornetzteil gelassen, und für einige Stunden mit ca. 12V gearbeitet. Mir fiel nur der etwas hohe Ruhestrom auf. Der HC14 ging danach noch einwandfrei. Ob man ihn jetzt noch in einem Herzschrittmacher einsetzen sollte, stelle ich mal in Frage;). Ebenso ob ein ein µC die ca. 2,5 fache Versorgung verträgt. Aber solange ein 3,3V Baustein mit 5V nur über Widerstände im kOhm Bereich in Verbindung kommt, wird es keine Probleme geben.

MfG Klebwax

robo_tom_24
01.06.2012, 18:16
Also ich denk, wenn ich den HW I²C Port am BT-µC verwende und den I²C auf dem RN-Control softwaretechnisch löse, müsste ich mir am leichtesten tun ;)
=> RN-Control: Master -- BT-µC: Slave