Forum: Mikrocontroller und Digitale Elektronik I2C über CAN übertragen


von grobe_Leberwurst (Gast)


Angehängte Dateien:

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.

von Wolfgang (Gast)


Lesenswert?

In deiner Schaltung ist kein einziger Abblockkondensator zu sehen.

von grobe_Leberwurst (Gast)


Lesenswert?

Jeder IC hat einen eigenen Abblockkondensator (100nF), hab Ich auf die 
schnelle nur vergessen einzuzeichnen :-)

von Frank K. (fchk)


Lesenswert?

SDA ist bidirektional, und Du trennst die Senderichtungen nicht. Das 
musst Du machen, damit es funktioniert.
SCL ist eigentlich auch bidirektional, aber das nutzen Deine Devices da 
gerade zufällig nicht.

Schau her, wie es richtig gemacht wird:
https://www.pololu.com/file/0J712/I2C_differential_extender_datasheet.pdf

fchk

von grobe_Leberwurst (Gast)


Lesenswert?

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

von Disco (Gast)


Lesenswert?

Was ist mit dem pullup in der tx Leitung?

von grobe_Leberwurst (Gast)


Lesenswert?

Ja, es funktioniert mit und ohne Widerstand gleich schlecht.

von Disco (Gast)


Lesenswert?

Sieht wie ein Laufzeit Problem aus. Er sendet seinen Zustand hin und her 
duch das Netzwerk.  Hast du mal kleinere Pullups probiert?

von Frank K. (fchk)


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

von grobe_Leberwurst (Gast)


Lesenswert?

Nein das hab ich noch nicht ausprobiert, werde das Morgen mal testen. 
Aber vielleicht bringt auch ein pulldown Erfolg?

von Disco (Gast)


Lesenswert?

Ich würde 1k pullup statt 4k7 für die scl vorschlagen

von grobe_Leberwurst (Gast)


Angehängte Dateien:

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?

von Wolfgang (Gast)


Lesenswert?

grobe_Leberwurst schrieb:
> Jeder IC hat einen eigenen Abblockkondensator (100nF), hab Ich auf die
> schnelle nur vergessen einzuzeichnen :-)

grobe_Leberwurst schrieb:
> Gibt es eine einfache
> Möglichkeit die Störungen auf SDA zu minimieren?

Da geistern ganz üble Störungen in deinem System rum. Wie sieht deine 
Masserverteilung aus?

von grobe_Leberwurst (Gast)


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.

von Bernd K. (prof7bit)


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.

von grobe_Leberwurst (Gast)


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 :-)

von Bernd K. (prof7bit)


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.

von grobe_Leberwurst (Gast)


Lesenswert?

Ich hab jetzt schon mal ein wenig rumprobiert, aber es will noch nicht 
so ganz. Kennt jemand eine Möglichkeit den PCA9600 diskret aufzubauen?

von Bernd K. (prof7bit)


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.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.