Forum: Mikrocontroller und Digitale Elektronik Signalampeln mit I2C


von Rene (Gast)


Angehängte Dateien:

Lesenswert?

Hi! :)

Ich bräuchte ein wenig Denkunterstützung bei folgender Aufgabe:

Ziel ist es, wie in der Skizze zu sehen, ein System zu realisieren 
welches verschieden Zustände auf der jeweiligen Ampel anzeigt. Die 
Eingabe erfolgt mittels PC. Die eingegebenen Daten werden von der 
Hauptplatine ausgewertet und über I2C werden die einzelnen Ampeln 
angesprochen.

Ein 2,5m langes, 6 adriges Twisted Pair (1Paar VCC, 1Paar GND, 1PaarI2C) 
Kabel führt von der µC Hauptplatine zur einer Signal-Ampel. Von einer 
Signal-Ampel führt ein weiteres 2,5m langes Kabel zur nächste Ampel etc. 
Das geht so weiter bis zur Ampel Nummero 20. (50m bis Ampel Nr.20)
In Jeder Ampel hängt ein Attiny an VCC und GND des Twisted Pair und an 
den TWI Leitungen.

Die Spannungversorgung erfolgt mit einem 5V 1,5A DC Netzeil das an der 
µC Hauptplatine eingesteckt wird. (Ein 3,3V Spannungregler für den 
Ethernet IC auf der Platine)

Das Projekt ist von einem ehemaligen technischen Informatik Studenten 
und die Software funktioniert soweit auch.

Es gibt nur folgendes Problem:
Wenn man mehr als 7 Ampeln anschließt und diese Gleichzeitig in Betrieb 
nehmen will, so funktioniert dass nicht. wenn man die restlichen Ampeln 
im eingeschalteten Zustand nach einander anschließt so funktioniert das 
ohne Probleme. Das allerdings auch nur bis man max 12 Ampeln 
angeschlossen hat.
Ebenso ist es ein Problem bei ca. 10 Ampeln, wenn man diese 
angeschlossen hat und alle 3 LEDs (R,Gr,Ge) jeder Ampel blinken lässt 
oder dauerhaft einschaltet, so hält dieser Zustand nicht lange an und 
die Ampeln wechseln in den Fehler Modus.

(Testweise habe ich 5 Ampeln angeschlossen und diese liefen stabil 
zumindest über 24h)

Mein Denk Ansatz:
Nach dem Die Spannungsversorgung nur über ein 5V Netzteil realisiert 
ist, bricht die Spannung auf der langen Strecke zu sehr ein, so das die 
Ampeln nicht mehr genug Spannung abbekommen.
Ausserdem, werden die LEDs der Dauerhaft leuchtenden Ampeln dunkler wenn 
die LEDs der blinkenden Ampeln an gehen.

Meine Lösung:
Ein 15V(19V) Netzteil Als Spannungsquelle verwenden und diese an die 
Platine anschließen. Mit einem 7805 (oder Schaltnetzteil-IC) auf 5V für 
die Platine zu regeln.
Die 19 Volt werden auf die Leitung gelegt und damit zu den Ampeln. Dann 
in jede Ampel einen 78L05 einsetzten. Den 78L05 muss ich nehemen da kein 
größeres Bauteilform in das Gehäuse passt und die 100mA sind ja für die 
drei LEDs (à 20mA) und den Attiny aussreichend.

Nun Zur Frage(n):
Ist das ein guter Lösungsansatz bzw. gibt es etwas das geschickter wäre?

Sollte ich für die Leitungslänge das I2C Signal Verstärken. Wenn ja, wie 
mach ich das am besten? bzw. mit welchem Bauteil. Ich hab den Eintrag 
hier schon gelesen "I2C als Hausbau", aber bin daraus nicht wirklich 
schlauer geworden.
In der Doku von dem ehemaligen Studenten habe ich etwas über: " [...] da 
deshalb keine Hohe Datenrate erforderlich ist, kann eine Geschwindigkeit 
von unter 10 kHz gewählt werden." (Den genauen Wortlaut weiß ich jetzt 
nicht)


Da ich mich noch nicht wirklich sehr lange mit der Mikrocontroller 
Thematik befasse wäre ich über die Hilfe, vor allem mit dem I2C sehr 
Dankbar.

von Karl H. (kbuchegg)


Lesenswert?

Rene schrieb:

> Die 19 Volt werden auf die Leitung gelegt und damit zu den Ampeln. Dann
> in jede Ampel einen 78L05 einsetzten. Den 78L05 muss ich nehemen da kein
> größeres Bauteilform in das Gehäuse passt und die 100mA sind ja für die
> drei LEDs (à 20mA) und den Attiny aussreichend.
>
> Nun Zur Frage(n):
> Ist das ein guter Lösungsansatz


15V bzw. 19V sind zu hoch!
Auf 20 Meter hast du bei eingermassen normalen Kabeln keine derartig 
hohen Spannunsverluste. 9V oder 12V tuns auch!
Du verbrutzelst ja sonst eine Menge Energie in Form von Wärme, wenn du 
dem 7805 19V anbietest.


Ganz ehrlich denke ich, dass wir wieder mal das Standardproblem haben:
Nirgends sind Blockkondensatoren verbaut und dann wundert man sich, 
warum bei ausreichend schnell schaltender Last an der Versorgung alles 
zusammenbricht.

von Rene (Gast)


Lesenswert?

Danke für die Antwort :)

Dann werd' ich ein 12 Volt Netzteil

Hm... jetzt wo ich drüber nach denke, stimmt. Ich hab keine 
Kondensatoren auf der Platine gesehen.( hätte ich ja auch selbst sehen 
müssen facepalm)

von Michael K. (Gast)


Lesenswert?

Eine Messung erspart viel Raterei

Mein Rateansatz.
Der Spannungsabfall auf der GND Leitung versaut die Pegel.
Dafür ist IIC ja auch nicht gedacht. Da nimmt man Feldbusse mit 
differentieller Übertragung wie z.B. RS485.
Zur Not Pegelumsetzer um den SNR zu erhöhen.

von Gert (Gast)


Lesenswert?

Bei der 5-Ampel-Test-Variante habe ich eine Spannung von 5,9V auf der µC 
Hauptplatine gemessen. (Was ich verwunderlich bei einem 5V Netzteil 
finde. Und Ja! ich bin mir sicher das es ein 5V Netzteil ist)

und ca 5,2V an der 5. Ampel.
(ca. weil die Ampeln geblinkt haben und es geschwankt hat)

Mir steht dort leider kein Oszi zu Verfügung sonst hätte ich die Signale 
auch angeschaut

von spess53 (Gast)


Lesenswert?

Hi

>Ein 2,5m langes, 6 adriges Twisted Pair (1Paar VCC, 1Paar GND, 1PaarI2C)
>Kabel führt von der µC Hauptplatine zur einer Signal-Ampel.

Dir ist aber bekannt, das I2C zur Kommunikation zwischen ICs auf einer 
Leiterplatte entwickelt wurde?

MfG Spess

von Rene (Gast)


Lesenswert?

Ich hab ja auch gesagt, das dass Projekt auch nicht von mir ist.

In der Doku des Stundenten der das Projekt entwickelt hat, steht es aber 
ebenfalls noch drin " Da der I2C eigentlich für die Kommunikation auf 
der selben Platine gedacht ist [...] Ich aber aus einschlägigen Foren 
nachgelesen habe dass es ohne Probleme auch bist zu 100m funktioniert 
[...]"

von Jobst Q. (joquis)


Lesenswert?

Rene schrieb:
> Sollte ich für die Leitungslänge das I2C Signal Verstärken. Wenn ja, wie
> mach ich das am besten? bzw. mit welchem Bauteil.

Mit jeweils einem P82B715 und 330 Ohm PullUps hab ich gute Erfahrungen 
gemacht bis ca 100m. Ich hatte allerdings Telefonflachbandkabel 
genommen, kann sein, dass bei Twisted Pair die Kapazitäten zwischen den 
Leitungen größer sind.

Mit CAN-Treibern (PCA82C250) kann man I2C sogar kilometerweit 
übertragen.

von holger (Gast)


Lesenswert?

>Ich aber aus einschlägigen Foren
>nachgelesen habe dass es ohne Probleme auch bist zu 100m funktioniert

http://www.mikrocontroller.net/articles/I2C_als_Hausbus#Kabell.C3.A4nge

von Rene (Gast)


Lesenswert?

Jobst Quis schrieb:
> Mit jeweils einem P82B715 und 330 Ohm PullUps hab ich gute Erfahrungen
> gemacht bis ca 100m

Wenn ich das richtig verstanden hab funktioniert das mit dem P82B715 
doch nur in eine Richtung. Also vom Master zum Slave und nicht 
umgekehrt.?
Ich hab mir den Code jetzt nicht angeschaut und weiß nicht ob die Ampel 
ein Signal zurück sendet.

von Rene (Gast)


Lesenswert?

holger schrieb:
>>Ich aber aus einschlägigen Foren
>>nachgelesen habe dass es ohne Probleme auch bist zu 100m funktioniert
>
> http://www.mikrocontroller.net/articles/I2C_als_Hausbus#Kabell.C3.A4nge

Höchst wahrscheinlich ja :D

von spess53 (Gast)


Lesenswert?

Hi

>Ich aber aus einschlägigen Foren
>nachgelesen habe dass es ohne Probleme auch bist zu 100m funktioniert

Ja. Aber nicht mit Feld-, Wald- und Wiesen-I2C:

http://www.nxp.com/documents/application_note/AN10658.pdf

MfG Spess

von Rene (Gast)


Lesenswert?

Hallo spess53

Ja, mir ist die Funktion des I2C durch aus bekannt und auch das 
Anwendungsgebiet. Und wie gesagt, ich hab das Projekt nicht entworfen. 
Ich bin lediglich der Arsch der es zu ende bringen bzw. einsatzfähig 
machen soll. Deswegen war meine Frage ja auch ob ich dafür einen 
Verstärker o.Ä brauche. Weil ich den I2C noch nie praktisch verwendet 
habe.
Zudem wäre es einfacher, kostengünstiger und auch schneller einen I2C 
Verstäker zwischenzuschalten als komplett auf Feldbus zu switchen. Vor 
allem weil der Code schon geschrieben wurde und auch funktionsfähig ist. 
Es scheitert (vermutlich) lediglich an der Hardware.

Mfg Rene

von Jobst Q. (joquis)


Angehängte Dateien:

Lesenswert?

Rene schrieb:
> Wenn ich das richtig verstanden hab funktioniert das mit dem P82B715
> doch nur in eine Richtung. Also vom Master zum Slave und nicht
> umgekehrt.?

Das ist ein Gerücht. Mit dem P82B715 ist es ein ganz normaler I2C-Bus, 
der nur auf einem 10 mal höheren Stromlevel und entsprechend mit 10 mal 
niedrigeren PullUps arbeitet. Auf der einen Seite hast du einen normalen 
I2c-Bus (SCL,SDA) auf der anderen den Long-Distance Bus (LCL,LDA).Für 
jede Station brauchst du einen P82B715 Umsetzer, innerhalb einer Station 
kannst du mehrere I2C-Bausteine anschließen. Ein PullUp-Widerstand von 
330 Ohm an LCL und LDA erscheint auf SCL/SDA-Seite als 3,3k Widerstand, 
also sind hier keine weiteren PullUps nötig.

von Rene (Gast)


Lesenswert?

Jobst Quis schrieb:
> Das ist ein Gerücht. Mit dem P82B715 ist es ein ganz normaler I2C-Bus,
> der nur auf einem 10 mal höheren Stromlevel und entsprechend mit 10 mal
> niedrigeren PullUps arbeitet. Auf der einen Seite hast du einen normalen
> I2c-Bus (SCL,SDA) auf der anderen den Long-Distance Bus (LCL,LDA).Für
> jede Station brauchst du einen P82B715 Umsetzer, innerhalb einer Station
> kannst du mehrere I2C-Bausteine anschließen. Ein PullUp-Widerstand von
> 330 Ohm an LCL und LDA erscheint auf SCL/SDA-Seite als 3,3k Widerstand,
> also sind hier keine weiteren PullUps nötig.

Erst einmal vielen Dank für deine Aufklärung :D

Dann ist es also generell unmöglich auf der µC Hauptplatine einen I2C 
Verstärker unterzubringen so, dass ich eine Längere Strecke bewältigen 
kann, ohne auf jeder Signal Ampel, einen weiter IC zu installieren.

Aber dann müsste es doch funktionierten, wenn ich z.B. auf der halben 
Strecke eine kleine zwischen Station habe, mit genau dem Schema welches 
du gepostet hast. Quasi als Signal aufbereitung. Oder ist das jetzt ein 
Grundsätzlich falsches denken.
(Es wäre eine erhebliche Kostenersparnis ob ich für jede Platine ein IC 
kaufe 21 * 2,95 oder ob ich 2 ICs kaufe)

von holger (Gast)


Lesenswert?

>Ausserdem, werden die LEDs der Dauerhaft leuchtenden Ampeln dunkler wenn
>die LEDs der blinkenden Ampeln an gehen.
>
>Meine Lösung:
>Ein 15V(19V) Netzteil Als Spannungsquelle verwenden und diese an die
>Platine anschließen. Mit einem 7805 (oder Schaltnetzteil-IC) auf 5V für
>die Platine zu regeln.

Du vergisst das Strom über VCC UND GND fliesst.
Einfach nur mehr Spannung reingeben bringt nichts.
Den Spannungsabfall auf der GND Leitung wirst du dadurch nicht los.
Mach die Kabel dicker.

von Jobst Q. (joquis)


Lesenswert?

Rene schrieb:
> Aber dann müsste es doch funktionierten, wenn ich z.B. auf der halben
> Strecke eine kleine zwischen Station habe, mit genau dem Schema welches
> du gepostet hast. Quasi als Signal aufbereitung. Oder ist das jetzt ein
> Grundsätzlich falsches denken.

Das geht leider nicht, denn es ist ein Bus,auf den alle zugreifen. Wenn, 
dann bräuchtest du zwei Busse und in der Mitte eine Art Repeater, der 
vom einen auf den anderen überträgt. Ob und wie das möglich ist, kann 
ich dir noch nicht sagen.

Was du versuchen könntest, wäre :

1. Die PullUp-Widerstände verringern und evt verteilen auf die einzelnen 
Stationen. Da du überall nur ATtinys als Station hast und die Pins 
möglicherweise stärker belastbar sind als der I2C-Standard, könnte das 
etwas bringen.

2. Falls möglich, trenne LED-GND von I2C-GND, dann hat der 
Spannungsabfall durch die LED-Ströme keine Auswirkungen auf die Signale. 
Wenn es nicht möglich ist, nimm wenigstens 3 der 6 Leitungen für GND und 
nur eine für die Spannungsversorgung.

3. Da SCL eigentlich nur vom Master gesendet wird, kannst du dafür einen 
stärkeren Schalter (MOSFET) und einen niedrigen Pullup einsetzen.

PS: Die Blockkondensatoren nicht vergessen!

von Mike A. (Gast)


Lesenswert?

holger schrieb:
> Den Spannungsabfall auf der GND Leitung wirst du dadurch nicht los.

Aber mit einem Schaltwandler von 19V auf 5V wird er rund einen Faktor 3 
kleiner.

von Rene (Gast)


Lesenswert?

Jobst Quis schrieb:
> Das geht leider nicht, denn es ist ein Bus,auf den alle zugreifen. Wenn,
> dann bräuchtest du zwei Busse und in der Mitte eine Art Repeater, der
> vom einen auf den anderen überträgt. Ob und wie das möglich ist, kann
> ich dir noch nicht sagen.


Danke für deine Antwort. Schade dass es so nicht funktionieren wird, 
aber erst einmal muss ich mich sowieso an die Stromversorgung machen, 
damit ich überhaut weiss ob ich an dem I2C System etwas ändern muss.

Mike A. schrieb:
> Aber mit einem Schaltwandler von 19V auf 5V wird er rund einen Faktor 3
> kleiner.

Genau das meine ich.

Karl Heinz schrieb:
> 15V bzw. 19V sind zu hoch!
> Auf 20 Meter hast du bei eingermassen normalen Kabeln keine derartig
> hohen Spannunsverluste.


Ich hab es heute noch einmal nachgemessen: Ein Spannungsabfall von rund 
27% (5,9V -> 4,3V) auf 10m.
Die Übertragung erfolgt momentan mit einem RJ12 Kabel, dessen 
Adernquerschnitt ich leider nicht rausbekommen habe. Ist aber definitiv 
zu wenig. ( 
http://www.reichelt.de/Modularkabel-stecker-etc-/WK-6-6-2-5M/3/index.html?&ACTION=3&LA=2&ARTICLE=68018&GROUPID=848&artnr=WK+6-6+2%2C5M 
)

Ich werde das Kabel durch ein anderes ersetzten
Die Leitung werde ich durch eine geschirmte 2x2x0,6 Fernmeldeleitung 
ersetzten. Damit sollte es etwas besser funktionieren.

Die Kabelänge kann ebenfalls von 2,5m auf 2m gekürtzt werden, was in 
Summe auch eine Verkürzung um 10m bringt.


Falls es trotz Querschnitts- und Spannungserhöhung nicht funktioniert, 
werde ich es mit einem Y- Kabel nicht 1 x 20 Ampeln ansteuern sondern 2 
x 10 Amppeln. Oder, ein 3x2x0,6 Kabel nehmen und jeweils 2 Adern für VCC 
und GND nehmen.
Evtl auch diesen Vorschlag dann in die tat umsetzten:

Jobst Quis schrieb:
> 2. Falls möglich, trenne LED-GND von I2C-GND, dann hat der
> Spannungsabfall durch die LED-Ströme keine Auswirkungen auf die Signale.
> Wenn es nicht möglich ist, nimm wenigstens 3 der 6 Leitungen für GND und
> nur eine für die Spannungsversorgung.

von Karl H. (kbuchegg)


Lesenswert?

Rene schrieb:

> Mike A. schrieb:
>> Aber mit einem Schaltwandler von 19V auf 5V wird er rund einen Faktor 3
>> kleiner.
>
> Genau das meine ich.
>
> Karl Heinz schrieb:
>> 15V bzw. 19V sind zu hoch!
>> Auf 20 Meter hast du bei eingermassen normalen Kabeln keine derartig
>> hohen Spannunsverluste.

Gemeint war ein Abfall von 19V auf eine für einen 7805 vernünftige 
Eingangsspannung.

7805 ist kein Schaltwandler!

von Rene (Gast)


Lesenswert?

Jobst Quis schrieb:
> Das geht leider nicht, denn es ist ein Bus,auf den alle zugreifen. Wenn,
> dann bräuchtest du zwei Busse und in der Mitte eine Art Repeater, der
> vom einen auf den anderen überträgt. Ob und wie das möglich ist, kann
> ich dir noch nicht sagen.

Ich weiß nicht ob wir und das wirklich verstanden haben:
Ich würde ja nicht nur einen P82B715 verwenden sonder zwei stück.
Bloß dass nicht wo wie auf dem Schema ein "Long Cable" dazwischen hängt 
sondern das auf einer Platine ist. Der Erste wertet das Signal für das 
Long Cable auf, der 2, setzt es gleich wieder herunter. Ich weiß, ist 
wahrscheinlich nicht so effizient, aber günstiger als auf jede Baugruppe 
ein einzelnen IC zu setzten:

                    |                                |
 µC--A--A--A--A--A--| P82B715 ["long Cable"] P82B715 |--A--A--A--A
                    |                                |

µC = Hauptplatine
A  = Ampel

von Rene (Gast)


Lesenswert?

Karl Heinz schrieb:
> Gemeint war ein Abfall von 19V auf eine für einen 7805 vernünftige
> Eingangsspannung.

Dann habe ich das Falsch verstanden, tut mir leid.

Aber wenn ich werde ja sowieso den Querschnitt erhöhen, deswegen geh ich 
ja auch nur auf 12V.

von Mike A. (Gast)


Lesenswert?

Karl Heinz schrieb:
> Gemeint war ein Abfall von 19V auf eine für einen 7805 vernünftige
> Eingangsspannung.

Mit einem Linearregler würde man aber den Strom auf der Gnd-Leitung 
nicht verringern.

Ein kleiner Schaltwandler an der "Straßenkreuzung" hat zwei Vorteile:
1. Verringerter Spannungsabfall auf der Gnd-Leitung
2. stabilere Versorgungsspannung.

von Jobst Q. (joquis)


Lesenswert?

Rene schrieb:
> Ich weiß nicht ob wir und das wirklich verstanden haben:
> Ich würde ja nicht nur einen P82B715 verwenden sonder zwei stück.
> Bloß dass nicht wo wie auf dem Schema ein "Long Cable" dazwischen hängt
> sondern das auf einer Platine ist. Der Erste wertet das Signal für das
> Long Cable auf, der 2, setzt es gleich wieder herunter. Ich weiß, ist
> wahrscheinlich nicht so effizient, aber günstiger als auf jede Baugruppe
> ein einzelnen IC zu setzten:

Das bringt garnichts, wenn mit dem "Long Cable" nicht wirklich eine 
Entfernung überbrückt wird. Also wenn, dann so:

µC--A--A--A--A--A-- (Ampel 1-10)
   |
   -|P82B715 ["long Cable"] P82B715 |--A--A--A--A (Ampel 11-20)

Lies dir mal das Funktionsprinzip des P82B715 im Datenblatt durch, dann 
verstehst du, warum.

von Jobst Q. (joquis)


Lesenswert?

Rene schrieb:
> Die Übertragung erfolgt momentan mit einem RJ12 Kabel, dessen
> Adernquerschnitt ich leider nicht rausbekommen habe. Ist aber definitiv
> zu wenig. (
> 
http://www.reichelt.de/Modularkabel-stecker-etc-/WK-6-6-2-5M/3/index.html?&ACTION=3&LA=2&ARTICLE=68018&GROUPID=848&artnr=WK+6-6+2%2C5M

Solche Kabel hatte ich auch für meinen I2C-Mittelstreckenbus eingesetzt. 
Allerdings hatten die Module eine eigene Stromversorgung. Sie haben den 
Vorteil einer kleinen Kapazität zwischen den Leitern, was bei I2C ein 
wichtiger Punkt ist. Ich würde sie beibehalten und für die 
Stromversorgung ein dickeres Extrakabel legen.

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.