PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Störungen durch langen IIC-Bus ?



Tido
23.01.2007, 10:11
Hallo Freaks,

habe ein Problem mit meiner fast fertiggestellten Gartenteichsteuerung (ja, hört sich seltsam an):

Aufbau: Sie besteht aus zwei Teilen, einer Platine am Teich und eine im Haus.
Auf der 'Hausplatine' sitzt eine CControl M-Unit2.05, drei Porterweiterungen mit PCF8574 (IIC-Bus).
Auf der 'Teichplatine' sind zwei PCF8574 und Solid-State-Relais. Außerdem sind noch zwei IIC-Temperatursensoren angeschlossen.

Beim Testen auf meiner Arbeitsplatte funktionierte alles perfekt.
Eben habe ich die Teichplatine am Teich positioniert und die Hausplatine im Keller und alles verkabelt. Die IIC-Bus-Leitung ist geschirmt und ca 6m lang.

Die beiden Temperatursensoren arbeiten fehlerfrei, wie auch die beiden PCF's auf der Teichplatine, aber eins der drei PCF8574 auf der Hausplatine 'flattert' zwischen zwei Werten. Klemme ich nur den IIC-Bus zum Teich ab, geht es wieder!

An den als Eingänge verwendeten Ports des "fehlerhaften" PCF's liegen jeweils 10K-PullUps, eine Taste an jedem Port zieht ggf. den Port auf Low.

Aber auch wenn keine Taste gedrückt wird, schwankt der PCF zwischen den Werten 127 und 255. 255 wäre ja richtig, aber woher kommt diese Störung und warum immer am selben Pin???

Warum arbeitet nur der eine PCF' falsch, sie hängen doch alle am selben Bus?

Bitte um Hilfe

MfG
Tido

Ratber
23.01.2007, 10:15
I2C ist eigentlich nur für sehr kurze Strecken gedacht.

Schonmal an die Kabelkapazitäten gedacht ?

Mehr als 400pF sollte es nicht sein.
Ein gutes Netzwerkkabel bringt da meist erleichterung.

Hast du testweise mal den Takt heruntergesetzt und geschaut was passiert ?

Tido
23.01.2007, 10:51
Hallo Ratber,




Ein gutes Netzwerkkabel bringt da meist erleichterung.
?

Habe ein CAT5-Netzwerkkabel eingesetzt!


Hast du testweise mal den Takt heruntergesetzt und geschaut was passiert ?

Ja, gleiches Ergebnis.


I2C ist eigentlich nur für sehr kurze Strecken gedacht.

Mehr als 400pF sollte es nicht sein.


Ich habe das I2C-Leitungstreibermodul 19 82 80 von Conrad eingesetzt, in der Anleitung steht:

"Punkt zu Punkt Verbindung mit großer Distanz:
Bei Leitungen, an deren Enden jeweils ein oder mehrere I2C-Bus-Geräte angeschlossen sind, sollte an jedem Ende der Leitung ein Leitungstreiber angeschlossen sein. Bei größeren Leitungslängen (je nach Kabel >20m) kann es erforderlich sein, auch zwischen den Endpunkten Leitungstreiber zu installieren (ca. alle 20m)."

Der Punkt ist, dass ich keine "Lösung" für das Problem benötige (die habe ich schon), sondern nur eine Erklärung des Phänomens, warum nur einer der PCF's Unsinn macht und dann immer denselben und alle anderen I2C-Komponenten fehlerfrei arbeiten?.

Trotzdem Danke!

MfG
Tido

Ratber
23.01.2007, 11:10
Ich habe das I2C-Leitungstreibermodul 19 82 80 von Conrad eingesetzt, in der Anleitung steht:

Also an jedem Ende ein Modul, ja ?



Der Punkt ist, dass ich keine "Lösung" für das Problem benötige (die habe ich schon), sondern nur eine Erklärung des Phänomens, warum nur einer der PCF's Unsinn macht und dann immer denselben und alle anderen I2C-Komponenten fehlerfrei arbeiten?.

Ich habe ja nicht alle Informationen von dir aber ich hätte da noch den Taster nebst Pulup ins Visier genommen.

Was ist wenn du beide Module tauscht ?
Also sowol Position als auch Chip ?

Viel mehr fällt mir jetzt bei gegebenen Informationen nicht ein.

Tido
23.01.2007, 11:50
Hello again,

da meine Lösung für das Problem hier schon heftig diskutiert wurde, denke ich nicht, dass ich brauchbare Erläuterungen bekommen werde.
Dies ist nicht böse gemeint!!!

Nach dem Programmieren trat das Problem nämlich nicht auf:
der Laptop war noch angeschlossen.
Also habe ich das Programmierkabel entfernt (Problem wieder da) und Schaltungsmasse an die geerdete Frontplatte angeschlossen (Problem behoben).

Da es nun aber sowohl mit direkter Erdung als auch über einen 100nF-Kondensator funktioniert, bleibt die Frage: Was ist besser bzw. welche Vor- bzw. Nachteile haben die beiden Möglichkeiten?

MfG
Tido

shaun
23.01.2007, 12:25
Ich würde es direkt erden.
Aber mal ehrlich: was Deine Zweifel an dem Finden einer Lösung angeht - wenn Du in Deinem ersten Posting die wichtigsten Informationen (nämlich das Vorhandensein von Treibern) komplett vorenthältst und uns glauben lässt, Du hättest mit 6m Klingeldraht die I2C-Anschlüsse der ICs zusammengefrickelt, dann darfst Du Dich auch nicht über das Ausbleiben unmittelbarer Erleuchtung wundern!

Tido
23.01.2007, 12:36
@shaun: Sorry, ich wußte nicht, dass es geschirmten Klingeldraht gibt.
Und außerdem sollte es um so mehr Vorschläge geben, je weniger das Problem eingegrenzt wird (gibt dann schließlich mehr Fehlerquellen.
Abgesehen davon habe ich nirgends nach einer Lösung sondern nur nach einer Erklärung gefragt.

MfG
Tido

Ratber
23.01.2007, 15:04
da meine Lösung für das Problem hier schon heftig diskutiert wurde, denke ich nicht, dass ich brauchbare Erläuterungen bekommen werde.
Dies ist nicht böse gemeint!!!


Schön das ich auch mal eingeweiht werde.
Da kann ich mich so richtig schön verarscht vorkommen.](*,)

Ich denke mal das sich das dann erledigt hat.

Yossarian
23.01.2007, 16:34
Hallo

je weniger das Problem eingegrenzt wird (gibt dann schließlich mehr Fehlerquellen.


Da ist natürlich wahr.
Also: Ich habe ein Problem. Bitte hilf mir.

Mit freundlichen Grüßen
Benno

Tido
23.01.2007, 17:00
da meine Lösung für das Problem hier schon heftig diskutiert wurde, denke ich nicht, dass ich brauchbare Erläuterungen bekommen werde.
Dies ist nicht böse gemeint!!!


...heißt einfach nur, ich möchte nicht, dass meine derzeitige Lösung (Verbindung zws. Masse und PE) diskutiert wird (wurde in anderen Threads nämlich schon reichlich mit unterschiedlichen Endaussagen diskutiert), sondern ich wollte eine Erklärung für das Problem des EINEN PCF's in Bezug auf die Leitungslänge.

??? Aber was bin ich nur für ein seltsamer Mensch, dass ich mich nicht gleich verarscht fühle, wenn man mir unterstellt, für einen Bus "geschirmte" Klingelleitung zu verwenden ???

Wenn 10 Leute sagen die Lampe ist an und 5 sagen sie ist aus und 2 sagen, das könne man so pauschal nicht sagen, was ist dann die Konsequenz?

Verarschen will ich niemanden...

Tido

Yossarian
23.01.2007, 17:06
Hallo
da aber PE und Masseleitungen in solchen Fällen häufig Ursache von Störungen sind, wird für eine Lösung gerade darüber diskutiert werden müssen.
Mit freundlichen Grüßen
Benno

Tido
23.01.2007, 17:17
Also: Ich habe ein Problem. Bitte hilf mir.


Kein Grund sarkastisch zu werden!
Ein anderer könnte mir noch vorwerfen keine Aussage über den Akku oder das Baujahr des Hauses gemacht zu haben. So hat jeder seine Prioritäten was er für wichtig erachtet oder nicht. Wenn ich wüßte, wo das Problem steckt, hätte ich die Ursache auch mit angegeben, da ich's aber nicht weiß (hätte mir und auch euch ansonsten die Fragerei ersparen können), habe ich die Details angegeben, die ich für wichtig gehalten habe. Den Treiber habe ich nicht angegeben, da der Fehler schließlich nicht alle Bus-Komponenten betrifft.

MfG
Tido

Yossarian
23.01.2007, 17:51
Hallo
da Du die Ursache des Problems nicht kennst, kannst Du auch nicht wissen welche Details wichtig sind. Also wird soviel relevante Information wie möglich gegeben, damit die anderen sich in das Problem hineindenken können. DU möchtest Hilfe haben, also stoße Leute die Dir helfen wollen nicht vor den Kopf.

Mit freundlichen Grüßen
Benno

vajk
23.01.2007, 20:35
Hallo - Du nicht zuhören !

Hast Du das CAT5 geerdet ? .. aber:

I2C ist ein Gerätebus ... ein Bus für Geräte .. im Gehäuse zu Speicher, oder Uhrenbausteinen oder ähnlichen !

Daß was Du nutzen soltest, wäre RS485 .. da gehen da viele viele Meterchen ;-)

Du mußt Dir halt einen kleinen Wandler bauen, I2C-uC-RS485 und das zwei mal und gut is .. kannst es auch bidirektional machen, dann 4 Adern nutzen ... auch gut is ...

RS485 als Bus hat noch Vorteile, Du kannst beliebig erweitern, da Du Dir Dein Protokoll ja selber machen kannst ...

Über I2C auf die Ferne muß man nicht diskutieren - sorry, aber das ist unprofessionel und unabgebracht! (Zur Vorsicht: RS232 ist auch nicht für lange Leitungen gedacht ...)

P.S.: dies ist der einzige Kommentar von mir zu dem Thema.

Yossarian
23.01.2007, 22:14
Hallo
klar ist RS485 oder 422 ein sicherer(differentielle Übertragung) Bus als der I2C, aber mit Treiber 82b7158 oder B96, verdrillter Leitung und niedriger Taktfrequenz sind ein paar hundert Meter auch kein Problem.
Wenn man sicher sein will, muß ein Protokoll erstellt werden.

Mit freundlichen Grüßen
Benno

KlaRaw
25.01.2007, 09:20
Hallo Tido,
eigentlich müsste der I2C-Bus unter diesen Bedingungen noch gut laufen. Du bewegst Dich aber sicher am Grenzbereich. Kleine Fehler können hier schon Störungen bewirken.
Ich gehe davon aus das der Leitungstreiber vernüftig dimensioniert ist. Details hierzu liefert Phillips.
Drei I2C-Bauteile sind nahe der CPU und fünf sind über Leitungstreiber 6 m entfernt.
Ich vermute das der I2C-Bus wie bei der CC2 mit 100KHz Takt betrieben wird. Dies dürfte für Deine Zwecke nicht nötig sein. Bei 10 KHz wären die Antwortzeiten vermutlich auch kurz genug und Du hättest eine 10 fache Reichweite, bzw. die kapazitive Belastung könnte 10 fach höher sein.
Der Leitungstreiber, richtig dimensioniert, eliminiert die 6 m, zumindest kapazitiv. Bleiben aber 8 Eingangskapazitäten. Damit liegst Du sicher in der Nähe des Grenzbereichs. Hier sollte man CLK und SDA nicht direkt am Bus anschalten, sondern über 330 Ohm (siehe Phillips). Dies verbessert das Impulsverhalten.
Wenn bei Dir nur ein I2C-Bauteil spinnt, so könnte ein Hardwarefehler vorliegen. Als erstes würde ich das Bauteil tauschen und sehen ob der Fehler "wandert".
Der Treiber ist aber auch nicht ohne. Ich kann hier nur die CC2-Seiten von André Helbig http://www.cc2net.de/cc2net.html empfehlen.
Ein Bekannter hatte sich den Adapter des Projekts "I2C-Bus am PC" besorgt. Der Adapter ist nicht schlecht, der mitgelieferte Treiber ist fehlerhaft, bzw. die Umsetzung ist wohl nicht ganz in Ordnung. Ein PCF8574 läuft zwar, aber bei einem DS1631 versagt er. Es muss wohl am Timing liegen. Der Programmierer hat da wohl etwas nicht verstanden. Nachdem ich meine Treiber angepasst und eingestetzt hatte lief der DS1631 auf Anhieb.

Gruss Klaus.

Tido
25.01.2007, 12:35
Hallo Klaus,

danke für die ausführlichen Informationen.
Den PCF habe ich schon getauscht, aber der Fehler bleibt.
Da aber angeblich immer derselbe Taster gedrückt sein soll (immer derselbe Port des PCF) habe ich dieses Kabel zum Taster (Flachbandkabel) mal unter die Lupe genommen. Dabei ist mit aufgefallen, dass der betroffene Port mit der längsten Ader verbunden ist (12cm, der nächste Taster hat 10cm,...).

Werde heute abend mal einen Test machen und die längste Ader abklemmen. Wenn der Fehler ausbleibt, werden ich das Flachbandkabel mal gegen geerdetes CAT5-Kabel tauschen.
Das würde dann aber nicht erklären, warum der Fehler nicht auftritt, solange ich den Bus zum Teich getrennt habe...

MfG
Tido

KlaRaw
25.01.2007, 13:08
Hallo Tido,
die Leitung zum Taster könnte auch 10m lang sein. Das dürfte nichts machen.
Nur um das klar zustellen, wird ein PCF8574 als Input genutzt, so müssen die Inputports zuvor auf logisch "1" gesetzt werden. Zusätzlich kann man, muss aber nicht zwingend, ein 10K Widerstand als Pullup vom Port gegen +UB schalten. Der Taster sollte dann zwischen Port und GND geschaltet werden. Er zieht dann beim Schliessen die logisch "1" auf "0".

Gruss Klaus.

Tido
25.01.2007, 13:36
[quote]Nur um das klar zustellen, wird ein PCF8574 als Input genutzt, so müssen die Inputports zuvor auf logisch "1" gesetzt werden.
[quote]

Hallo Klaus,

das könnte es sein. :-b

Prüfe ich heute abend als erstes.
PullUps sind vorhanden.

MfG
Tido

Tido
25.01.2007, 18:15
Hallo Klaus,

die Inputports waren alle auf '1' gesetzt, das scheidet also aus.
Außerdem habe ich das Flachbandkabel entfernt und der Fehler bleibt.

Die I2C-Bus-Geschwindigkeit (Ports 9 und 10 der M-Unit) kann ich wahrscheinlich nicht ändern?!

MfG
Tido