PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²c BUS Reichweite



Kurzschlussmechaniker
01.05.2009, 11:24
Hi Leute
Ich habe dan mal eine Frage. Hat jemand Erfahrung oder das Wissen, wie weit man eine I ²c Buss entfernungsmäßig ausreizen kann?
In ersten Versuchen waren 7 m zu viel und 5 cm haben funktioniert.

Ich wollte diesen Bus zum Aussen und Innentemperatur messen einsetzen.

Ich stelte mir da schon eine sichere Strecke von ca 20 Metern vor. Kann ich das knicken ? Hat jemand schon mal so was versucht ?


Mgf -+ Bzzt +-

Yossarian
01.05.2009, 11:40
Hallo
20m sind auf jeden Fall schon erreicht worden.
Das kommt auf die Taktfrequenz, Umgebung, Kabel und Treiber an.
Sieh mal bei Philipps bzw. NXP nach oder benutze Google.

Mit freundlichen Grüßen
Benno

kolisson
01.05.2009, 12:00
hallo,

20meter wirst du wohl ohne weiteres nicht erreichen, da die kabelkapazität dann für die normalen i2c ports zu hoch werden.

anders is das bei verwendung von "P82B715 - I2C-bus extender IC's"

hier muss du jedoch bedenken, dass die relativ viel strom ziehen.

gruss klaus

thewulf00
01.05.2009, 13:44
I2C ist für lange Strecken nicht geeignet, und auch nicht dafür vorgesehen.
Für größere Entfernungen empfiehlt sich eher CAN.

FriLu
01.05.2009, 16:47
Hi,
der P82B96T ( Philips, 8 Pin- SMD ) als Bus-Puffer, auf beiden seiten des Kabels eingesetzt, kann mit 12V Spannung betrieben werden, was die Störsicherheit erhöht.
Notwendig sind dazu 2 Adernpaare ( Gnd mit SDA verdrillt und Ub mit SCL verdrillt ).
Kann leider kein Bild hochladen, deshalb Beschreibungsversuch:
Die jeweiligen Eingänge werden mit Pull-Ups auf 3,3-6V gelegt (Ub der Applikation ), die Ub der P82B96 kann ( muss aber nicht ) an 12 V;
über das Kabel wird der externe mit versorgt.
Der IC ist 400kHz Bustakttauglich, ob das erreicht wird, hängt in erster Linie vom Kabel ab.
MfG Lutz

Vitis
02.05.2009, 10:52
das kommt stark auf den Bustakt an. Ich hab ihn hier
im Betrieb auf ca. 40m gezogen ohne Bustreiber oder anderen
Schnickschnack. Verwendet hab ich einfache Telephonleitung 4-Drähtig
mit Schirm, geht fehlerfrei schon seit Wochen. Als Busteilnehmer
hab ich LM75A dran, gut gestützt und passt.
Ne Busterminierung ist nicht verkehrt, aber nicht zu klein wählen.
µC ist ATMega32 in DIL

Kurzschlussmechaniker
05.05.2009, 17:56
Hi
Erstmal danke für eure Antworten

@thewulf00 C-Control 1 Station 2 mit CAN ? kenn ich nicht und gibt es CAN TEMP Sensoren für 5 € ? (Beweggründe --> I²C Sensoren)

@friLu hört sich realisierbar an. werde ich mir mal genauer anschaun. Ach ja wegen der Bilder: Versuchs doch mal mit http://www.directupload.net/ Dort kannste Bilder ins Netz stellen und den Link ins Forum stellen.

MfG -+ Bzzt +-

FriLu
05.05.2009, 18:16
Hi,
wenn Du nach p82b96 googelst, findest Du das Datenblatt, in Fig.12 und 14 ist das mit der langen reichweite anschaulich erklärt.
Und danke für den Link, werds bei gelegenheit ausprobieren.
MfG Lutz

ebendt
26.05.2009, 21:04
Hallo!

@vitis:
Mit welcher Frequenz betreibst du den Bus? Ich versuche schon seit einiger Zeit einen LM75C zur Zusammenabrbeit zu bewegen. Der antwortet aber auch auf 2cm nicht, oder ist abgeraucht, oder mein Programm fehlerhaft.
Benutzt du Hardware-I2C oder verwendest Du Software-I2C an anderen Pins?
Hast du von den ersten Experimenten noch einfache Software. Ich würde gerne ausprobieren ob mein LM75 tot ist.

Danke und Gruß

Heiko

Vitis
26.05.2009, 22:13
Also, mein Code besteht aus zwei Teilen.
Zum Einen eine header Datei, die am Anfang includet wird:





'--------- LM 75 Temperatursensor ---------

$nocompile


Const Lm75_base = &B10010000

Declare Function Lm75read(byval Lm75_id As Byte) As Single


Config I2cdelay = 100
Config Scl = Portc.1 ' we need to provide the SCL pin name
Config Sda = Portc.0 ' we need to provide the SDA pin name
I2cinit


Ziemlich am Ende des Codes wird eine zweite Datei includet, die
die Funktionen enthält, zentrale Sub ist diese:



' ############ LM75 Temperatursensor ############

$nocompile




Function Lm75read(lm75_id)
' --> Variablen global deklariert in variables.bas <--
' Lm75r = Read-Instruktion
' Lm75h = Highbyte Temperatur
' Lm75l = Lowbyte Temperatur
' Lm75_dez = Temperatur als Dezimalwert
Local Sub_tempbyte As Byte
Local Loc_lm75h As Byte
Local Loc_lm75l As Byte
Local Loc_tempword As Word
Local Loc_lm75_dez As Single

Sub_tempbyte = Lm75_id
Sub_tempbyte = Sub_tempbyte And &B00000111
Sub_tempbyte = Sub_tempbyte * 2
Sub_tempbyte = Sub_tempbyte Or Lm75_base
Lm75w = Sub_tempbyte '= &B10010010
Lm75r = Sub_tempbyte + 1 '= &B10010011

I2cstart
I2cwbyte Lm75r
I2crbyte Loc_lm75h , Ack
I2crbyte Loc_lm75l , Nack
I2cstop

If Loc_lm75h.7 = 1 Then ' Temperatur ist negativ
Loc_lm75l = Not Loc_lm75l
Loc_lm75h = Not Loc_lm75h
Loc_tempword = Makeint(loc_lm75l , Loc_lm75h)
Shift Loc_tempword , Right , 5
Loc_Lm75_dez = Loc_tempword
Loc_lm75_dez = Loc_lm75_dez / 8
Loc_lm75_dez = 0 - Loc_lm75_dez
Lm75read = Loc_lm75_dez
Else
Loc_tempword = Makeint(loc_lm75l , Loc_lm75h)
Shift Loc_tempword , Right , 5
Loc_Lm75_dez = Loc_tempword
Loc_Lm75_dez = Loc_Lm75_dez / 8
Loc_lm75read = Loc_lm75_dez
End If
End Function
End



abgefragt wird das dann über:
Temperatur_single = Lm75read(lm75_id) ' 0 bis 8


Wirklich einfache Codes von meinen Jugendsünden hab ich nicht wirklich
noch da ... ob Hardware-oder Soft-TWI kommt aufs Projekt an ... bei diesem
hab ich die Software TWI verwendet. Wenn die LM75 nix sagen hängt
das meist an den Pullups oder an der Adressierung.
Beim LM75 gibts 2 verschiedene Adressen je nach Typ wenn ich mich
noch richtig erinnere ... irgendwo tief im Datenblatt mein ich da mal was
gelesen zu haben.

sdz55
27.05.2009, 19:36
Für längere Distanzen könntest du ja auch LWL benutzen, oder per IR ;)

Vitis
27.05.2009, 20:54
LWL? IR? will ja nix sagen, aber das ist deutlich
mehr aufwand als scl und sda per draht zu ziehen ...
zigbee haste vergessen in deiner aufzählung ;)

StevieL
28.05.2009, 18:10
Hallo zusammen,

mit zwei P82B96 habe ich es testweise geschafft, einen Temperatursensor an 80 Meter Netzwerkkabel anzuhängen. Funktioniert absolut problemlos.
Ich habe mir eine kleine Platine mit zwei Netzwerkbuchsen, P82B96 und 4 Widerständen entworfen. Über mehrere solcher Platinen habe ich diverse Einzelplatinen einer Aquariensteuerung an einen Hauptprozessor angehängt.