mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I²C ist durch äusere Einflüsse unstabil. Was kann man dagegen machen?


Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich möchte einen I²C-Bus mit 2 ATmega644 aufbauen, doch gelingt mir das 
nicht wirklich.
Ich bekomme ständig Störungen rein!
Der Bus soll in einer Umgebung mit einer starken Störquelle 
(Anschlussleitung eines Hexapoden, kurzzeitig bis zu 15A) gelegt werden, 
doch klappt es nicht mal ohne diese Störquelle so richtig...
Als Kabel benutze ich ein USB-Kabel von 1,5m Länge, von dem ich nur 2 
Adern verwende.
Wenn die Leitung günstig hängt, bekomme ich fast keine Fehler rein, wenn 
ich sie aber mit meinen Fingern anfasse, gibt es sofort viel mehr Fehler 
(Statuscode 0x00, also Bus error due to an illegal START or STOP 
condition). Wenn ich sie mit irgendwas anderem Anfasse, passiert das 
nicht => kein Wackelkontakt.
Wenn ich die Ummantelung des Kabels auf GND lege, dann wirds nicht 
besser, sondern viel schlechter.
Wahrscheinlich ist das so, weil sich dann die Kapazität der Leitung 
erhöht.

Ich hab schon alles versucht, was mir einfiel, hab schon 
Terminierungswiderstände ein und wieder ausgebaut, versucht zusätzliche 
Pullups anzulöten und mit der Länge der Leitung runexperimentiert, 
nichts hat wirklich was gebracht.
Ich bin mit meinem Latein am Ende.
Weiß jemand vielleicht weiter?

Vielen Dank im Voraus,
Gruß, Yaro

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Als Kabel benutze ich ein USB-Kabel von 1,5m Länge, von dem ich nur 2
>Adern verwende.

Eine Masseverbindung hat sich in vielen Fällen als hilfreich erwiesen.

MfG Spess

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Yaro,

USB Kabel ist warscheinlich die denkbar schlechteste Wahl weil das D-/D+ 
Paar wegen der differentiellen NAtur der USB Kommunikation verdrillt ist 
und warscheinlich die Gefahr des Crosstalks zwischen SCL/SDA sehr gross 
ist. Wenn es nicht anders geht versuche die Pullup Widerstaende so klein 
wie moeglich zu machen (2.2-3.9K)

Zuerst versuch mal das Kabel gegen ein unverdilltes kurzes Kabel 
auszutausche damit ein Vergleich moeglich ist wieder alles richtig 
funktioniert.

Auch wueder ich mit dem OSZI die Kurvenform der Datensignale 
uebrpruefen. Wenn die Flanken sehr lange sind dann ist vielelciuht auch 
zu viel Kapazitaet drauf. Beim I22 Bus sollte die maximale Buskapazitaet 
400pF nicht uberschreiten.

Gruss,
Gerhard

Autor: heinzhorst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anderes Bussystem? I²C ist nicht wirklich für sowas geeignet. Ist halt 
für Verbindungen auf einer Leiterplatte, oder zumindest innerhalb einer 
Baugruppe gedacht. Alles andere mag zwar unter günstigen Bedingungen mal 
funktionieren, eine Saubere Lösung ist das aber nicht.

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schonmal für die schnellen Antworten.

@spess53: Masseverbindung war in meinem Fall komischerweise 
kontraproduktiv...

@ Gerhard.: dass die Kabel verdrillt sind, wusste ich nicht. Ich werde 
es gleich mal mit normaler kurzer Litze versuchen.
Wenn das nicht geht, werde ich nochmal mitm OSZI messen.

@  heinzhorst: Das Problem ist, dass ich beim Hexapod schon eine 
SPI-Verbindung habe (2 Platinen kommuniziern mit einander) und wollte 
nicht das Risiko eingenen, dass durch die neue lange Leitung dieser Bus 
dann gestört werden würde.

Gruß, Yaro

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Yaro,

die meisten Fehler wurden ja schon angesprochen. Warum nimmst du kein 
RS485?

Ist Masse auf beiden Platinen geerdet? Falls ja, könntest du dir hier 
eine Brummschleife durch die zusätzliche Masseverbindung einfangen.

Gruß, DetlevT

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf einer Seite ADUM1250 nehmen.

Kabel: paarweise verdrillt
Paar 1: VCC + SDA
Paar 2: GND + SCL


Peter

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Masseverbindung war in meinem Fall komischerweise kontraproduktiv...
Dann hast du aber ein systematisches Problem.
Du solltest dir mal alle Verbindungen und Massepfade deines Aufbaus 
auf ein Blatt Papier zeichnen. Dann die fliessenden Ströme reinmalen. 
Und jeder Stromkreis davon muß geschlossen werden. Also auch die I²C 
Stromkreise für SCL und SDA.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I2C ist nicht für 1.5m gedacht und nicht für USB-Kabel gedacht, wer das 
also so verwenden will, muss selber für die Probleme aufkommen:
http://www.mikrocontroller.net/articles/I2C_als_Hausbus
siehe auch
http://www.interfacebus.com/Design_Connector_I2C.html

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du mit der Übertragungsrate runtergehen? Ich habe hier an 30m 
Leitung (Adern liegen parallel) einen LM75 an einem Mega8. Die 
Abschlußwiderstände haben 1,1K auf der Seite des Mega8. Das dürfte 
eigentlich schon nicht mehr funktionieren, läuft aber recht zuverlässig.

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leute. CAN wurde fuer sowas gebaut. Nehmt es. Oder kommt niemals klar 
mit I2C.

Autor: spess53 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Leute. CAN wurde fuer sowas gebaut. Nehmt es. Oder kommt niemals klar
>mit I2C.

Solltest du da etwas verpasst haben?

MfG Spess

Autor: Finsbury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yaro schrieb:
> Wenn ich die Ummantelung des Kabels auf GND lege, dann wirds nicht
> besser, sondern viel schlechter.

die hat auf gnd auch nix zu suchen sondern wird mit den beidseitigen 
schirmgehäusen, wenn denn vorhanden, verbunden

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Finsbury schrieb:
> Yaro schrieb:
>> Wenn ich die Ummantelung des Kabels auf GND lege, dann wirds nicht
>> besser, sondern viel schlechter.
>
> die hat auf gnd auch nix zu suchen sondern wird mit den beidseitigen
> schirmgehäusen, wenn denn vorhanden, verbunden

Manchmal hilft es auch, die Schirmung nur auf einer Seite mit Masse zu 
verbinden, die andere Seite offen

Autor: Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast schon 3 Leitungen? SDA, SCL und GND.

Wie sind die beiden uC Massen verbunden? Wie groß sind deine Pullups? 
Welche Datenrate nutzt du?

Beim ATMega kannst du bei 5V bis runter auf 1kOhm gehen.
Wenn die Kabel sehr dünn und lang sind würde ich aber gar nicht so weit 
gehen -> Spannungsteiler.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> I2C ist nicht für 1.5m gedacht

Wird I2C heute nicht oft mit langen Kabeln verwendet? Z.b. VGA-Kabel 
(DDC2) und 10m lange HDMI-Kabel.

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sooo, hab das jetzt mal mit 0,5m langer, unverdrillter Litze versucht.
Ohne Störquellen funktioniert es fast Fehlerfrei, wenn ich aber den 
Strom für die Motoren anschalte, bricht es sofort ab. Das war beim 
USB-Kabel besser, da gabs wenigstens ein Paar erfolgreiche 
Übertragungen.

Als Pullups verwende ich die internen AVR-Pullups (ca 50k), da werde ich 
aber gleich noch kleinere ranbasteln.


@ Peter Dannegger: Ich will erstmal versuchen das Problem ohne eine neue 
Platine zu löten in den Griff bekommen, wenn das nicht klappt, dann 
versuche ich das so.

@  Lothar Miller: Alle µCs haben das selbe GND und die selbe 
Versorgungsspannung. Die Übertragung funktioniert ja bei kurzem Kabel 
und ausgeschalteten Motoren auch ganz gut.


Die Schirmung lag bei dem beschriebenen Aufbau einseitig auf GND, hat 
aber nur gestört.

Das nächste, was ich tun werde ist die Pullups kleiner zu machen, mach 
mich jetzt also zu Conrad auf. Außerdem besorge ich da auch gleich 
CAN-Kabel und versuche es damit.


Gruß, Yaro

Autor: David ... (volatile)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yaro schrieb:

> Das nächste, was ich tun werde ist die Pullups kleiner zu machen, mach
> mich jetzt also zu Conrad auf. Außerdem besorge ich da auch gleich
> CAN-Kabel und versuche es damit.
>
>
> Gruß, Yaro

Es gibt keine CAN-Kabel. Es soll aber Leute geben die Google bedienen 
koennen. Du gehoerst nicht dazu.

Autor: mkeller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso versuchst du es überhaupt weiter? Wenn schon der Laboraufbau nicht 
klappt, dann klappts im realen Fall erst recht nicht ZUVERLÄSSIG.

Wenn du nur eine µC <-> µC Verbindung brauchst nimm doch RS485! Geht 
sogar noch einfacher als I²C und ist nicht teuer.

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ David: Hab nicht bei Google, sondern bei Conrad geguckt, und der hatte 
"UNITRONIC BUS CAN" und das ist Kabel.... und ich dachte, dass das 
gemeint war.


@ mkeller: Das problem ist, dass ich es auf dem Board nicht rausgeführt 
habe und mir ein neues Board ersparen wollte.

Langsam glaube ich aber wirklich, dass das so nicht funktionieren wird. 
Werde dann wahrscheinlich eine Übergangsplatine basteln, die als Buffer 
Fungiert. Kommuniziert mit dem Robo dann über I2C und mit dem Joystick 
über RS485 oder SPI.
Welches davon ist zuverlässiger?

Gruß, Yaro

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Langsam glaube ich aber wirklich, dass das so nicht funktionieren wird.

Mit den internen Pull-Ups mit Sicherheit nicht. Hast du jetzt schon mal 
kleinere getestet?

MfG Spess

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yaro schrieb:
> @  Lothar Miller: Alle µCs haben das selbe GND und die selbe
> Versorgungsspannung. Die Übertragung funktioniert ja bei kurzem Kabel
> und ausgeschalteten Motoren auch ganz gut.

Schon einmal den Begriff "Brummschleife" gehört?

http://de.wikipedia.org/wiki/Brummschleife

Autor: Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für eine Geschwindigkeit nutzt du denn?

Wenn du nur die internen Pullup nimmst ist es kein wunder das es mit 
Schirmung schlechter wird. Da steigen die Leitungskapazitäten an. Wenn 
du ein Oszilloskop hast dann schließe es an, mach ein paar Bilder, bevor 
du zum Conrad rennst? Was kaufst du denn wenn du nicht weist was du 
brauchst?

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ spess53: Hab kleinere getestet (hab 2 gefunden 1,7k und 6k), aber die 
haben die Übertragung erheblich gestört. (hab sie parallel zu den 
internen Pullups geschaltet). deswegen habe ich sie wieder ausgebaut.

@ Detlev T.: Jetzt weiß ich so ungefähr, was eine Brummschleife ist, 
aber ich glaube ich habe keine, weil meine GNDs alle Sternförmig 
zusammengeschlossen sind. Die Schrimung war auch nur einseitig an GND, 
jetzt hängt sie in der Luft.

@  Friedrich: 78kHz


Ich habe nochmal das USB-Kabel rausgekramt. Habe jetzt aber nicht die 
beiden Datenadern zur Übertragung benutzt, sondern eine Strom und eine 
Datenader verwendet.
Das Ergebniss ist deutlich besser als alles zuvor getestete, jedoch 
nicht wirklich zufriedenstellend.

Was mich wundert ist, dass kleinere Pullups gestört haben. Wie kann das 
sein?
Hab auch versucht, nur den 6k Pullup dranzumachen, hat aber auch nur 
gestört.

Gruß, Yaro

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn du allen Ärger los sein willst: nimm eine einfache serielle 
Schnittstelle und führe sie über Kunststoff-Lichtwellenleiter.

Gruss Reinhard

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich jetzt noch die Schirmung einseitig auf GND packe, gibts kaum 
störungen! So ist es wenigstens halbwegs akzeptabel.

@ Reinhard Kern: gibts sowas schon als Modul, oder müsste ich mir das 
selbst bauen?

Gruß, Yaro

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mkeller schrieb:
> Wenn du nur eine µC <-> µC Verbindung brauchst nimm doch RS485! Geht
> sogar noch einfacher als I²C und ist nicht teuer.
Er könnte auch einfach beides nehmen und die I²C Signale per RS485 
Treiber übertragen :)
Lichtwellenleiter wäre aber auch auch ne schöne Sache...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg S. schrieb:

> Er könnte auch einfach beides nehmen und die I²C Signale per RS485
> Treiber übertragen :)

Ist bei bidirektionalen Signalen nicht ganz trivial.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Passende Bausteine gibt's für'n paar Euro (z.B. P82B96).

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jörg: Ich kenne mich mit dem RS485 nur oberflächlich aus und habe die 
Leitungen auf meinem Board auch nicht rausgeführt. Könnte ich indem ich 
2 P82B96 verwende (einer am einen, der andere am anderen µC) ohne 
weiteren Aufwand die Strecke überbrücken? Macht das die Übertragung denn 
dann stabiler? (Ich muss zugeben, ich hab das Datenblatt nur 
überflogen, bin im Moment echt knapp mit der Zeit)

Gruß, Yaro

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Yaro,

wenn es unbedingt sein soll, dann ueberpruefe mal folgendes:

Pullups: 3.9-4.7K. Mit Oszi ueberpruefen ob die ansteigende Flanke des 
SDA Leitung einigermassen steil ist (1-5us). Die Flanken muessen 
einigermassen rechteckig und sauber aussehen.

Versuch auch in Serie mit den SDA/SCL Leitungen am jeden uC Ende der 
Leitung einen 100 Ohm Widerstand in Serie einfuegen

Wenn moeglich verwende 100KHz I2C Clock zum Anfang.

Die Datenmasse , Versorgung der Slave uC (Motorsteuerung) soll von der 
Masse der Motorenversorgung seperat sein damit es keine Stoerungen durch 
Verkopplungen gibt.

Die uC sollen jeder einen eigenen VCC Regler nach Moeglichkeit haben. 
Zumindesten sollen ausreichen Elkos und Keramik Cs auf der VCC 
Versorgung nahe am uC sein.

Am besten ist Sternverdrahtung der Motorenversorgung zum Netzgeraet hin 
so dass Leistungsteil und Steuerteil nur an einem Punkt zusammenkommen 
und kein Motorenlaststrom im uC Teil vagabundiert.

Auch der Motorenteil sollte ausreichende Stuetzelkos haben (4700uF). 
Jeder Motortreiber (H-Bridge?) soll direkt dort Stuetzelkos 
ausreichender Kapazitaet haben.

Teste Deine I2C Daten Kommunikation mit kurzen Verbindungsleitungen um 
eine funktionelle Baseline zu erhalten.

Bis jetzt muss alles 100% funktionieren.

Erst dann schalte einen Motor dran und sieh was passiert. Wenn alles gut 
geht die anderen.

Ich bin immer noch der Meinung dass Dein Problem, wenn auch vielleicht 
nicht ideal, loesbar sein soll. Ich habe selber schon jede Menge mit I2C 
gemacht und habe noch nie so etwas erlebt. Zum Aufgeben ist es noch 
verfrueht;-)

mfg,
Gerhard

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerhard, vielen Dank für die Ausführliche Beschreibung!

Im Moment habe ich (mit einer kurzen Leitung ein gut funktionierendes 
System am Laufenden, werd aber nicht bei der kurzen Leitung bleiben. 
Deswegen werde ich deine Ratschläge auch erst in den nächsten Tagen und 
nicht heute befolgen.

Was die Pullups angeht, haben kleinere Pullups bis jetzt schon bei 
mehreren Versuchen nur gestört (ich weiß selber nicht wieso), aber ich 
werde nochmal welche ausprobieren.

Serienterminierung hat bei den früheren Versuchen zwar auch gestört, 
werde ich aber trotzdem nochmal versuchen.

Wieso soll ich eine höhere Clock verwenden? Welche Vorteile hat das?

Die Masse Muss bei den Motoren die Gleiche wie bei den µCs sein, denn 
die Motoren sind Servos (18 Stück) und die werden über einen der µC 
angesteuert.
Die haben auch genug Kapazität auf ihrer Versorgungsleitung (um die 
5000uF)

Wenn die Lange Leitung dann Probleme mache, dann messe ich mitm OSZI die 
Flanken und ändere ggf. die Pullups.

Vielen Dank nochmal an alle, die was beigetragen haben!!!
Gruß, Yaro

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Yaro,

100KHz ist die langsamere I2C Clockspeed
400kHz ist die Standard Clockrate
Dann gibt es noch was im MHz Beriech. Habe aber noch nie damit 
experimentiert.

Nach dem I2C Standard muessen die Pullups im KOhm Bereich sein. Bei mir 
hat immer 3.9K-4.7K bestens funktioniert.

Mit der Masseverbindung meine ich dass das Stromversorgungsteil 
sternfoermig mit Deinen Motorsteuerungen verbunden sein soll und dass 
jeder seinen eigenen Stuetzkondensator haben soll. Aber das hilft Dir in 
Deinem Fall nicht zu viel weil jede Board mit Motorstoersignalen die 
Datenverbindungen verseuchen.

Als Extremloesung koennte man vielleicht noch die Clock des I2C noch 
(10kHz)weiter erniedrigen und mit RC Filtern auf jeder I2C Port Seite zu 
filtern. Aber dann wird Deine Datenkommunikation warscheinlich zu 
langsam. Man koennte aber damit experimentieren. Das geht warscheinlich 
nur dann korrekt wenn soft I2C verwendet wird wo man den Samplepunkt der 
Daten selber bestimmen kann.

wie schon gesagt wurde ist in Deinem Fall RS485 UART Kommunikation 
warscheinlich deutlich besser weil die Daten dann differenzial 
uebertragen werden koennen und Motorstoersignale bis zu einem bestimmten 
Grad vom RS485 Empfaenger verkraftet werden.

Es gibt auch galvanik isolierte I2C Transceiver:

Siehe:

http://www.analog.com/static/imported-files/Data_S...

Sind aber leider etwas teuer.

NXP hat auch was.

Gruss,

Gerhard

Autor: Friedrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn die Lange Leitung dann Probleme mache, dann messe ich mitm OSZI die
>Flanken und ändere ggf. die Pullups.

Messe doch am besten gleich mal nach. Dann hast du es gewiss das es ein 
HW Fehler ist, und nichts mit der Software zu tun hat.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yaro schrieb:
> @ Reinhard Kern: gibts sowas schon als Modul, oder müsste ich mir das
> selbst bauen?

Hallo Yaro,

es gibt einige, z.B. TosLink, das sich für Audioübertragung eingebürgert 
hat, oder Avago (ehem. HP). Ein Receivermodul mit Logikausgang kostet 
10..15 EUR, Halter/Stecker für Sendedioden und Sensoren um 3 EUR.

Eigentlich lohnt selbermachen nicht, aber es ist auch kein grosses 
Problem, einen Kunststoff-LWL direkt vor eine LED zu montieren, mehr ist 
in den meisten Sendemodulen auch nicht drin. Aber was steckbares oder 
schraubbares hat schon grosse Vorteile.

TxD und RxD einer seriellen Schnittstelle werden so wie sie sind über 
LWL übertragen, weitere Kodierung ist nicht nötig. Schwieriger wird es 
mit LWL bei bidirektionalen Signalen, deshalb würde ich I²C nicht 
empfehlen.

Gruss Reinhard

PS mit Kunststoff sind 100 m kein Problem, mit Glasfasern kann man 
Ozeane überqueren.

PS2: noch billiger:
http://de.farnell.com/jsp/search/browse.jsp?N=5000...

Autor: Erdbeere (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Was die Pullups angeht, haben kleinere Pullups bis jetzt schon bei
>mehreren Versuchen nur gestört

Das kann nicht sein.
Der Fehler steckt ganz woanders!

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yaro schrieb:
> @ Jörg: Ich kenne mich mit dem RS485 nur oberflächlich aus und habe die
> Leitungen auf meinem Board auch nicht rausgeführt. Könnte ich indem ich
> 2 P82B96 verwende (einer am einen, der andere am anderen µC) ohne
> weiteren Aufwand die Strecke überbrücken?
Für SDA und SCL benötigst du auf beiden Seiten 2 von den ICs. Also 
insgesamt 4.

> Macht das die Übertragung denn dann stabiler?
Zumindest Störunempfindlicher. Aber wenn es auf einer kurzen Strecke 
ohne äussere Störungen schon mit normalen I²C nicht geht, ist da wohl 
noch ein anderes Problem.

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Kern schrieb:
> TxD und RxD einer seriellen Schnittstelle werden so wie sie sind über
> LWL übertragen, weitere Kodierung ist nicht nötig. Schwieriger wird es
> mit LWL bei bidirektionalen Signalen, deshalb würde ich I²C nicht
> empfehlen.
Schwieriger in dem Sinn das man für I2C dann 4 LWL Leiter benötigen 
würde (und die besagten P82B96 Treiber Bausteine).

Autor: Pete K. (pete77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Yaro,

es wurden hier schon viele Tipps gegeben, allerdings kann ich nicht so 
recht erkennen, dass Du diese auch systematisch verfolgst.

1) Die Frage nach den Widerständen. 50k oder dazu 1,7k parallel sind 
außerhalb der Spezifikation von I2C. Schalte den internen pullup aus und 
setze 4k7 oder 3k9 ein.
100R in Serie vermindern mögliche Störungen.
Du hast ein Oszi: Gut! --> Flanken anschauen, wie oben sehr gut 
beschrieben.

2) Masseverbindung: Da Du eine sternförmige Masseverbindung zwischen 
allen Beteiligten hast, sollte das kein Problem sein.

3) Störungen, wenn die Motoren laufen: Hier noch einmal die 
Kondensatoren überprüfen. 5000uF für 15A halte ich für etwas wenig, 
denke eher an 1000uF pro 1A.

4) Sind alle µCs auch abgeblockt mit 100nF? Spannung ist auch 
stabilisiert?

Falls das alles nicht hilft, dann erst würde ich über zusätzliche I2C 
Bausteine gemäß App-Notes (s.o.) nachdenken.

Und immer schön in die Datenblätter schauen und die vorgegebene 
Schaltungen und Bauteilwerte beachten.

Gruss,
Pete77

Autor: Weingut Pfalz (weinbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du die internen Pullups benutzt hast Du den Port als Eingang 
konfiguriert, was schlecht ist, da die dann praktisch keinen Strom 
treiben, wenn dann noch ne kleine Leitungskapazität dazu kommt haste 
keine Flanken mehr sondern Gebirge, das wird nix, darum hat das mit den 
extern parallel geschalteten gleich nochmal schlechter funktioniert, 
weil die Flanken dann nochmal gedämpft wurden.
Habe hier 50m I2C in kräftig gestörter Umgebung liegen, läuft 
einwandfrei.

Konfiguriere die IO als Ausgänge, sprich SCL aus Ausgang, SDA beim 
Senden als Ausgang, beim Empfangen als Eingang, vergiss die internen 
Pullups(!) und häng auf SDA SCL 4k7 gegen +5V (oder kleiner) und die 
Kiste läuft.

Außerdem haben die internen Pullup auch keine 50k sondern 10k.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wenn Du die internen Pullups benutzt hast Du den Port als Eingang
>konfiguriert, was schlecht ist, da die dann praktisch keinen Strom...

Nein. Wenn TWI aktiviert ist wird die Datenrichtung vom TWI 
kontrolliert. Die internen Pull-Ups können allerdings wie gewohnt 
aktiviert werden.

Der minimale Pull-Up-widerstand beträgt übrigens 1,53kOhm.

MfG Spess

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, heute habe ich nochmal ein längeres Kabel drangemacht. Es 
Funktioniert ohne Störungen!
Habe immernoch die internen Pullups.
Benutze jetzt ein 1,2m langes USB-Kabel von dem ich eine Daten und eine 
Strom-Ader verwende. Die Schirmung liegt einseitig auf GND.

Beim Ersten Versuch mit dem USB-Kabel hatte ich beide Datenadern 
verwendet, bis ich erfahren habe, dass sie verdrillt sind, was wohl das 
Problem war.
Ganz ohne Schirmung (normale zweiadrige Litze) hat es ohne Motoren 
relativ gut geklappt, mit Motoren gabs aber sofort heftigste Störungen.
Mit dem USB-Kabel ging es dann ganz gut, obwohl es mit Motoren auch zu 
Störungen kam. Nachdem ich die Schirmung dann einseitig auf GND gelegt 
habe, funktionierte es sehr gut.


vielleicht werde ich es in nächster Zeit mit einem noch längeren Kabel 
ausprobieren, aber momentan habe ich keins...

Auf Glasfaser werde ich nicht mehr umsteigen, weil es so schon 
Funktioniert, trotzdem danke für den Tip!


trotzdem nochmal @Pete K.:
1) hatte schon 6K versucht (bei den früheren Versuchen), war aber 
contraproduktiv. Als ich aber einen weiteren ATmgea mit Pullups an den 
Bus gehängt habe (da ist n lcd-Display dran) hat es den Bus etwas 
stabilisiert. Wenn ich das nächste mal eine Platine designe, werde ich 
externe Pullups dranhängen.
Was das OSZI angeht, brauche ich ja jetzt nicht mehr messen, weil es 
funktioniert und ich nur ungerne die alte Leitung wieder dranhängen 
will, um sie zu messen. Es ist aber sehr wahrschenlich, dass ich dann 
grenzwertige Flanken sehen würde.

3) Mehr Elkos kann ich nicht dranhängen, weil der DC-DC Regler nicht 
mehr als 5000µF am Ausgang haben darf.

4) µC sind alle mit 100n und eigenen Spannungsreglern(jeweils auch mit 
Kondensatoren nach Datenblatt) ausgestattet.


Vielen Dank nochmal für die Hilfe!!
Wenn ich noch Probleme bei der Übertragung bekomme (was ich nicht 
hoffe), dann werde ich das posten.
Das ist ein echt tolles Forum! Sonst bekommt man nirgendswo in so kurzer 
Zeit so viel kompetente Hilfe!

Gruß, Yaro

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.