Forum: Mikrocontroller und Digitale Elektronik Mehrere Dimmer (ATTiny) am I2C Bus. Sporadische Fehler.


von Philipp F. (nerdture)



Lesenswert?

Hi,
ich habe ein Dimmersystem zur Phasenabschnittsdimmung von Lampen im Haus 
aufgebaut mit bis zu 20 Kanälen.
Seit langer Zeit treten immer wieder Fehler auf deren Ursache ich bis 
heute nicht finden konnte.

=== Grob zum Aufbau des Systems: ===
(siehe auch die angehängten Bilder)
- Ein embedded PC mit I2C Schnittstelle steuert die Dimmer Platinen über 
den I2C Bus an.
- Jede Dimmerplatine beinhaltet einen ATTiny45 controller der an dem I2C 
Bus hängt sowie mit den Optokopplern getrennten analogen Teil des 
Dimmers.
- Zwischen dem PC und den Dimmern gibt es eine "Vermittlerplatine" 
welche einen Quarzoszillator mit aktuell 8Mhz enthält (die CPU Clock für 
alle Controller) sowie einen PCA9517, der den I2C Pegel von 3V auf 5V 
wandelt.
- Auf der Vermittlerplatine befinden sich auch die I2C Pullups (je 10k)

=== Probleme die auftreten: ===
- Hin und wieder passiert es, dass beim schalten einer Lampe ein 
Mikrocontroller "abstürzt" und manchmal dabei sogar den kompletten Bus 
blockiert, da er die CLK leitung auf GND hält (nur manchmal).
- Manchmal sind nicht alle Controller erreichbar über den Bus.

=== Fragen und Vermutungen die ich habe: ===
- Sind die Pullups von 10k gut?
- Kann es sein dass die Leitungskapazität zu hoch ist?
- Brauche ich eine Terminierung am Ende des I2C Busses?
- Ist es ok, dass ich die 8MHz Clock auch über den Bus laufen lasse?

Vielen Dank für eure Hilfe!
Ich hoffe das Problem bald zu finden und nicht mehr im Dunkeln sitzen zu 
müssen :)

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

10k Pull-Up-Widerstände am I2C-Bus ist reichlich hoch.

MfG Spess

von Marco (Gast)


Lesenswert?

Philipp F. schrieb:

> - Brauche ich eine Terminierung am Ende des I2C Busses?
Nein I2C hat keine Terminierung.

> - Ist es ok, dass ich die 8MHz Clock auch über den Bus laufen lasse?
Weniger

Dein Problem sind die fehlenden Decouplingkondensatoren und vor allen 
Dingen der fehlende Snubber am Ausgang des Solid State Relais. So geht 
das nicht. Die Decouplingkondensatoren werden dein Problem beheben. Die 
10uF sind nicht geeignet zum Decoupling von hohen Frequenzen. Versuch 
die typischen 100nF. Zusätzlich kannst du Versuchshalber einen Ferrit in 
Serie zur positiven Versorgungsspannung einziehen. Deine Schaltung hat 
halt generell 0 Schutzbeschaltung. Zusätzlich könnte es helfen den 
Reset-Pullup kleiner zu wählen. Kannst du irgendwie ermitteln wieso der 
Reset ausgelöst wurde. Ich kenen die AVRs nicht, bei PICs gibt es ein 
Register das man nach dem Power on auslesen kann und da steht der 
Resetgrund drin. (Brown out, etc)

von Philipp F. (nerdture)


Lesenswert?

Danke! Das hilft mir schonmal weiter.
Da ich Informatiker bin und Elektronik mein Hobby ist, fehlt es mir 
leider hier und da an Wissen (Besonders Schutzbeschaltung).

Meinst du als Decoupling 100nF zwischen VCC und GND an jedem Kontroller? 
Das leuchtet ein.

Wie würde der Snubber aussehen (wo genau in der Schaltung, welche 
Werte?)

: Bearbeitet durch User
von Philipp F. (nerdture)


Lesenswert?

PS: Ich denke nicht, dass der Controller einen RESET macht. Er scheint 
einfach irgendwo zu hängen. Nach einem Reset sollte er eigentlich wieder 
normal funktionieren

von temp (Gast)


Lesenswert?

Dient der DC/DC Wandler den du da verbaut hast wirklich dazu um das Netz 
von der Steuerspannung zu trennen? Ich würde da jetzt nicht freiwillig 
an der Eingangseite irgendwas anfassen wollen. Die Dinger haben zwar 
eine Prüfspannung von 1000VDC max. bei dieser Bauform ohne den Typ genau 
zu kennen, aber für eine sichere Netztrennung sind die völlig 
ungeeignet. Die Kriechstrecken liegen auch bei nur max. 2mm. Das kann 
man alles machen, nur ist dann auch der ganze Steuerteil isolationsmäßig 
so zu verdrahten als wäre es Netzspannung. Auch bei den Optokopplern 
nimmt man hier besser welche mit 10mm Reihenabstand.

von Stefan F. (Gast)


Lesenswert?

> Wie würde der Snubber aussehen?
1
        220 Ohm   100nF 630V
2
X1-1 o---[===]-------||-----o X1-2

von Philipp F. (nerdture)


Lesenswert?

Ok, gibt's das in einem Bauteil?

Hier benutzen sie keinen Snubber:
http://www.mikrocontroller.net/attachment/71509/37378-DI300.pdf

Sie sagen dass sie den MOSFET extra "langsam" schalten damit keine 
hochfrequenten Störungen auftreten. Wäre das für meine Schaltung nicht 
auch eine Option?

von Stefan F. (Gast)


Lesenswert?

Ja, die gibt es einem Bauteil. Sie sind aber (zumindest bei Conrad) 
teurer, als einzelne Bauteile.
http://www.conrad.de/ce/de/product/452335/Entstoer-Kondensator-radial-bedrahtet-01-F-250-VAC-F-T-TYP-9729-B-1-St

>  Wäre das für meine Schaltung nicht auch eine Option?

Nein, denn das Timing müsste der Last angepasst werden und die MOSFETS 
bräuchten dann je nach Last Kühlkörper. Das ist schwierig zu 
kalkulieren.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Philipp F. schrieb:
> Ein embedded PC mit I2C Schnittstelle steuert die Dimmer Platinen über
> den I2C Bus an.

Wie lang ist denn der I²C Bus? Dieser Bus ist ja dafür gedacht, 
inenrhalb eines Gerätes oder höchstens mal vom Rechner zum Monitor zu 
gehen, mehr als 2m erfordern meistens ein Herabsetzen der Taktrate.

von MaWin (Gast)


Lesenswert?

Philipp F. schrieb:
> - Hin und wieder passiert es, dass beim schalten einer Lampe ein
> Mikrocontroller "abstürzt" und manchmal dabei sogar den kompletten Bus
> blockiert, da er die CLK leitung auf GND hält (nur manchmal).

Welche Lasten hast du denn dran?

Als PhasenABschnittssdimmer dürfen es keine induktiven (Trafos) oder mit 
Funkentstördrosseln sein, sondern nur ohmsche oder kapazitive.

Wie genau triffst du den Anfang der Phase?

Treten die Störungen auch auf, wenn alle Ausgänge unbeschaltet sind?

von MaWin (Gast)


Lesenswert?

Philipp F. schrieb:
> - Hin und wieder passiert es, dass beim schalten einer Lampe ein
> Mikrocontroller "abstürzt" und manchmal dabei sogar den kompletten Bus
> blockiert, da er die CLK leitung auf GND hält (nur manchmal).

Welche Lasten hast du denn dran?

Als PhasenABschnittssdimmer dürfen es keine induktiven (Trafos) oder mit 
Funkentstördrosseln sein, sondern nur ohmsche oder kapazitive.

Wie genau triffst du den Anfang der Phase?

Treten die Störungen auch auf, wenn alle Ausgänge unbeschaltet sind?

Dir scheint auch nicht klar zu sein, dass dein 9V Wandler keine SELV 
Potentialtrennumg bietet.

von Philipp F. (nerdture)


Lesenswert?

Oh ok, ich dachte er bietet Potentialtrennung (im Datenblatt bis 1000V 
glaub ich). Was genau bedeutet, dass er keine SELV Trennung bietet und 
wie kann ich das verhindern?

Ich schalte mit dem Dimmer keine induktiven Lasten, sondern nur 
Halogentrafos (kapazitiv). Wie genau ich den Anfang treffe werde ich mal 
mit dem Oszilloskop nachforschen.
Brauche ich im Fall der Phasenabschnittsdimmung dann also doch keinen 
Snubber/Entstörkondensator? Oder meintest du nur es soll keine 
Drossel/Spule dranhängen?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Doch die Snubber brauchst du trotzdem. Selbst bei rein kapazitiver last, 
denn die Leitungen haben schon eine Induktion, die nicht zu 
vernachlässigen ist.

von Stefan F. (Gast)


Lesenswert?

> Wie lang ist denn der I²C Bus?

Das sieht man doch auf dem Foto: Es sind nur wenige Zentimeter.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan us schrieb:
> Das sieht man doch auf dem Foto: Es sind nur wenige Zentimeter.

Ich seh da noch jede Menge dünnerer Kabel die von den Anschlussklemen 
nach oben aus dem Bild verschwinden, daher die Frage.

: Bearbeitet durch User
von Philipp F. (nerdture)


Lesenswert?

UPDATE:
Also ich habe nun 100nF Kondensatoren an allen ATTiny Controllern und an 
dem PCA9517 an beiden Seiten.

Es hat definitiv ein bisschen was gebracht. Ich kann jetzt mehr Dimmer 
anschließen ohne dass die Controller abstürzen.

Allerdings: Wenn ich am Gasherd den Funkenzünder nutze, lässt sich die 
Schaltung sehr zuverlässig aus dem Takt bringen.
Habt ihr noch weitere Ideen?

Wie kann ich das verhindern?

von Stefan F. (Gast)


Lesenswert?

Hast du Snubber hinzugefügt?

Du könntest den I²C Bus vor Einstrahlung schützen, indem du auf der 
Vermittlerplatine am seriellen Bus auf beiden Seiten (PC Seite und 
At-Tiny Seite) kleine(!) Kondensatoren nach GND hinzufügst. Ich würde es 
mit 100pF versuchen.

Außerdem würde ich die Pull-Up Widerstände so klein wie möglich machen. 
Probiert aus, wie weit du runter gehen kannst. 1k Ohm wären toll - wenn 
es klappt.

Bei den ATtinys kannst du die Pull-Up Widerstände an den Reset-Pins 
durch Drahtbrücken ersetzen, damit sie nicht mehr empfänglich sind.

von Stefan F. (Gast)


Lesenswert?

Ich bin nicht sicher, ob es eine gute Idee war, das Taktsignal zentral 
zu erzeugen. Denn diese Oszillatoren haben nur schwach belastbare 
Ausgänge.

Bei Conrads 8Mhz Oszillator kann mit 15pF belastet werden, zum Strom 
machen sie leider keine Angabe.

Bei acht Mikrocontrollern als Last dürften die ATtiny sowie die 
Zuleitungen nichtmal 2pF pro Platine haben. Ich meine, irgendwo gelesen 
zu haben, dass die Pins der Mikrocontroller 5-15pF haben.

Laut Datenblatt hat der XTAL1 Eingang 16pF Kapazität. Wobei ich 
allerdings unsicher bin, ob das nur für die Betriebsart mit Externen 
Quarz gilt.

So oder so hast du den Oszillator warscheinlich überlastet.

Brauchst du überhaupt einen Synchronen Takt? Der I²C Bus würde sicher 
auch mit dem internen R/C Oszillator funktionieren.

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.