I2C über CAN übertragen

Gast #4100513
Lesenswert?

Hallo,

Ich hab leider ein Problem mit der Schaltung im Anhang.
Das SDA Signal zeigt immer beim Low Pegel Störungen. SCL sieht aber 
Super aus. Hat Jemand eine Ahnung woran das liegen kann?
Ich wäre für jede Hilfe dankbar.
Angehängte Dateien:
#4100693
Lesenswert?

grobe_Leberwurst schrieb:
> Ich dachte der PCA9600 wäre genau für diese Aufgabenstellung gemacht?
> Die Beiden CAN Transceiver sind ja nur dafür da die Signale
> differentiell zu übertragen.
>
> http://www.nxp.com/documents/application_note/AN10364.pdf

Ich traue dem Braten trotzdem nicht so richtig und würde es zunächst 
über RS422-Treiber probieren. Ich halte das für unkritischer.

fchk
Gast #4101963
Lesenswert?

Ich hab Heute ein wenig experimentiert und denke nun das der 
ursprüngliche BUS das Problem ist (siehe Anhang). Gibt es eine einfache 
Möglichkeit die Störungen auf SDA zu minimieren?
Angehängte Dateien:
Gast #4102009
Lesenswert?

Der bestehende I2C Bus geht über eine Gesamtstrecke von rund 80m, es 
hängen momentan 6 Slaves auf der Strecke. Der BUS ist mit 2x2x0,8 
Telefonkabel verdrahtet und versorgt die Slaves zugleich mit 24V 
Spannung. Der Schirm des Kabels liegt auf Masse.
#4102023
Lesenswert?

Kannst Du nicht einfach einen I²C Master nahe zu der entfernten Stelle 
bringen der dort weitgehend autonom agiert und die 80m mit einem anderen 
Protokoll überbrücken?

Ansonsten wenn es unbedingt I2C sein soll würd ich noch vorschlagen den 
I2C-Bus einfach nur niederohmiger zu machen, z.B. mit diesen 
I²C-Extendern die es erlauben auf der Übertragungsstrecke mit dem Pullup 
auf bis zu 200 Ohm runterzugehen und zusätzlich auch noch mit der 
Taktfrequenz etwas runterzugehen.
Gast #4102051
Lesenswert?

Die Slaves sind sind ziemlich gleich auf den 80m verteilt. Das Ganze 
funktioniert auch schon seit 4 Jahren absolut Problemlos. Nur soll jetzt 
ca. 50m entfernt noch ein Slave Installiert werden und da dachte ich mir 
das es nicht schlecht wäre den BUS dorthin über CAN zu Tunneln. Die 
Widerstände kann ich auch nicht verkleinern da schon 30mA fließen. Die 
Frequenz liegt momentan bei rund 74KHz, mit 10KHz bestehen die Probleme 
Weiterhin. Ein anderes Protokoll wäre zwar Prinzipiell möglich, es muss 
aber auch so irgendwie gehen :-)
#4102081
Lesenswert?

grobe_Leberwurst schrieb:

> Die
> Widerstände kann ich auch nicht verkleinern da schon 30mA fließen.

Ich sehe gerade auf Deinem Oszillogramm daß Die Leitung nie unter 0.5V 
runtergezogen wird, wahrscheinlich sind die Pullups schon zu klein :-(

Der PCA9600 erkennt High schon ab ungefähr einem halben Volt (steht so 
im Datenblatt, IMHO schwachsinniges Design ganz ohne Grund so hart an 
der Grasnarbe zu fahren). Auf Deinem Bus sind mehr als ein halbes Volt 
selbst wenn die Devices oder der Master die Leitung runterziehen, 
deshalb erkennt er so of fälschlicherweise auf High.

Das ist der Grund warum i²C so frustrierend sein kann.

Evtl kannst Du das was der PCA9600 macht diskret nachbauen mit ein paar 
Transistoren, diesmal aber mit vernünftigen Schaltschwellen. Oder es 
gibt ähnliche Produkte von anderen Anbietern mit vernünftigen 
Schaltschwellen.
#4115024
Lesenswert?

Was passiert denn wenn Du den neuen Slave ganz normal an den Bus 
anschließt (ohne die Treiber und deren Probleme mit den Low-Pegeln) aber 
stattdessen dann mit der Frequenz weit genug runtergehst?

Und: Hast Du noch ein paar Adern frei? Wenn ja dann schalte sie alle 
parallel und verwende sie für GND (auch auf der Strecke mit den anderen 
6 Slaves). Du willst so wenig wie möglich Spannungsabfall auf der 
GND-Leitung haben, wenn irgendein Slave eine Leitung auf Low zieht soll 
der GND-Pegel dort nicht oder so wenig wie möglich nach oben gehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren