PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C bei unterschiedlicher Spannung



lalarama
03.02.2010, 15:48
Hallo

Ich bin noch relativ neu in der Welt der Robotik und bastel momentan an meinem ersten Roboter einem Hexapod (wie so oft :-) ).
Der Bau ansich und die ersten Inbetriebnahmen der Servos etc. funktioniert alles soweit. Jedoch habe ich mir vor kurzem sehr günstig ein paar der Sharp IR Abstandssensoren wie sie auch hier in der Wiki beschrieben werden zugelegt und würde diese gerne einbauen.
Mein momentan einziger Controller der alle 18 bzw 20 Servos (2 für den Kopf) des Hexas steuert ist ein xmega128a1 auf einer fertigen kleinen Platine ( http://alvidi.de/avr_xmodul.html ) und läuft mit 3.3 Volt.
Die Sharp Sensoren selbst brauchen zwar 5 Volt aber haben nur einen Output bis maximal 3.2 Volt. Daher könnte ich sie zwar an den xmega anschließen, würde aber dennoch stattdessen gerne einen 2. Microcontroller hinzufügen der sowohl diese Sensoren als auch später evtl. ein Ultraschallmodul oder ähnliches verwaltet. Ein kleiner atmega32 oder derartiges. Diese arbeiten ja gewöhnlich mit den erforderlichen 5V.
Leider weiß ich nun nicht wie ich in einem solchen Fall die Kommunikation eines 5V Microcontrollers mit meinem auf 3.3 Volt arbeitendem atxmega128a1 realisieren kann. Am besten wäre hier natürlich eine Variante bei der das I2C Bussystem sich dennoch umsetzen ließe.

Hat jemand von euch dafür evtl. einen Tip für mich wie man das lösen könnte oder evtl. einen Link wo sowas vielleicht schon implementiert wurde?

Vielen Dank und Grüße
Lalarama

Besserwessi
03.02.2010, 16:36
Bei I2C kann man einen Pegel-wandler mit einm FET und 2 Widerständen dazwischen schalten. Es kommt auf jede Seite ein eigener Pullup Widerstand und ein kleiner n-MOSFET in die Signalleitung. Das gate des MOSFETs kommt auf 3.3 V (jedenfall bei den meisten FETs). Source auf die Seite mit der niedriegeren Spannung.

Die Schaltung findet sich z.B. in einigen Appl. Notes, z.B. von Phillips (NXP) (z.B. I2C Specs 2.1).

Wenn der Spannungsunterschied nicht so groß ist, und auch die Niedreigere Spannung als Logic Pegel reicht, kann man auch einefach nur einen Pullup an die Niedreigere Spannung nehmen. Hier könnte man z.B. den extra µC (dann eher Mega324) mit etwa 4 V laufen lassen und so zu beiden Seiten auf einen echten Pegelwandler verzichten.

FriLu
04.02.2010, 17:21
Hi,
für solche Zwecke gibts von Philips den Bus-Puffer P82B96, gibts im 8 pin DIL und SO 8.
MfG Lutz

Crazy Harry
04.02.2010, 20:07
da sowohl der Master als auch der Slave nur OpenCollector-Ausgänge für I²C verwenden und die Spannung durch die beiden PullUp-Widerstände bestimmt wird, häng die PullUps an 3.3V und du wirst sehn, daß das geht. Tut es bei mir bei ca. 35 Displays und sogar über 2.5m Kabel :)

lalarama
06.02.2010, 16:55
Erstmal Muchas Gracias an alle Helfer.

Ich glaube ich habe den Ansatz verstanden. In jedem Fall hab ich jetzt eine Faehrte der ich in den Semesterferien mal nachgehen werde.

Vielen Dank an Euch
Gruß
Lalarama