Forum: Mikrocontroller und Digitale Elektronik Kann man I2C Leitung resetten?


von Markus S. (Gast)


Lesenswert?

Hallo zusammen,
ich habe eine Heizungssteuerung mit einem MSP1611 in C programmiert. Zum 
Temperaturen messen verwende ich mehrere LM75 an I2C Bus.
Funktioniert soweit alle prima.
Ich bekomme einige Siganle von meiner Heizung als 24V Signal. Um das 
Signal mit dem µC Verarbeiten zu können, schalte ich mit den 24V ein 
kleines Printrelais welches mit dem Schließkontakt ein Signal auf einen 
Eingangsport gibt.
Ich habe in meinem Progamm (habe ich im Moment leider nicht greifbar) 
eine kleine Sicherheit eingebaut, damit es nicht stehen bleibt, wenn mal 
ein Fühler oder auch ein Kabel defekt ist. Sollte dies geschehen, da 
geht eine LED an, und die Anzeige für den Fühler steht auf 00.
Im Programm werden alle Fühler nacheinander mit der gleichen Funktion 
ausgelesen.
Es ist jetzt schon ein paar mal passiert, dass plötzlich alle Fühler den 
gleichen Wert anzeigen, dieser Wert ändert sich auch bei wechselnden 
Temperaturen nicht mehr und die Störungs LED leuchtet. Ich kann diesen 
Zustand nur ändern in dem ich die Spannung von der Steuerung einmal kurz 
unterbreche. Danach läuft alles wieder normal.
Die Störung kann eigentlich nur von dem 24V Signal kommen. Ich kann mir 
zwar nicht vorstellen warum das so ist, aber sonst ist nichts weiter 
angeschlossen.
Aber wenn das so ist, kann man per Programm die I2C Leitung resetten 
oder muß ich sie per Relais kurz unterbrechen o.ä.
Hat einer Erfahrung damit und kann mir einen Tip geben.

Danke
Markus

von me (Gast)


Lesenswert?

Warum Relais? Nimm dafür mal einen Optokoppler, der hat keine 
Induktivität wie das Relais und erzeugt deswegen auch keine Störimpulse, 
die die Funktion der Schaltung stören könnte.

von Peter D. (peda)


Lesenswert?

Daß I2C kann durch Störimpulse in einen Zustand kommen, wo der Master 
kein Stop mehr senden kann. Dann ist der Bus für alle Zeiten tot.

Um dann ein Stop zu senden, muß vorher ein SCL-Puls erzeugt werden, 
damit der blockierende Slave das SDA freigibt. Da der Slave gerade beim 
Senden des Byte 0x00 sein kann, muß man das bis zu 9-mal probieren.

Das muß man allerdings per Bit-Banging und Delays machen, das HW-I2C 
kann das nicht und muß solange abgeschaltet werden.


Peter

von Yagan Ζ. D. (yagan)


Lesenswert?

Peter Dannegger schrieb:

> ... Da der Slave gerade beim
> Senden des Byte 0x00 sein kann, muß man das bis zu 9-mal probieren.

Danke für den Hinweis. Das könnte mir auch weiterhelfen.

Ciao, Yagan

von Markus S. (Gast)


Lesenswert?

me schrieb:
>Warum Relais? Nimm dafür mal einen Optokoppler, der hat keine
>Induktivität wie das Relais und erzeugt deswegen auch keine Störimpulse,
>die die Funktion der Schaltung stören könnte.

ok, werde ich mal versuchen, obwohl ich nicht gedacht hätte, dass es 
eine Störung verursachen kann, denn die Wicklung liegt ja auf der Seite, 
die von der Heizung angesteuert wird und hat gar nichts mit der 
Spannungsversorgung vom µC zu tun.

Peter schrieb:
>Um dann ein Stop zu senden, muß vorher ein SCL-Puls erzeugt werden,
>damit der blockierende Slave das SDA freigibt. Da der Slave gerade beim
>Senden des Byte 0x00 sein kann, muß man das bis zu 9-mal probieren.
Wie muß den so ein SCL-Puls aussehen (Dauer, Fequenz usw.)?

>Das muß man allerdings per Bit-Banging und Delays machen, das HW-I2C
>kann das nicht und muß solange abgeschaltet werden.
Sorry dass ich Frage. Was ist ein "Bit-Banging"? Und was heißt "per 
Delay machen"?

Und was heißt "HW-I2C"?
Heißt das, dass ich die I2C Funktion am Port3, die ich mit "U0CTL |= I2C 
+ SYNC;" aktiviert habe, ausschalten muß?

Vielen Dank
Markus

von Falk B. (falk)


Lesenswert?

@  Markus S. (Gast)

>Signal mit dem µC Verarbeiten zu können, schalte ich mit den 24V ein
>kleines Printrelais welches mit dem Schließkontakt ein Signal auf einen
>Eingangsport gibt.

Ein Spannungsteiler wäre deutlich einfacher. Oder für ängstliche 
Naturen ein Optokoppler.

>Zustand nur ändern in dem ich die Spannung von der Steuerung einmal kurz
>unterbreche. Danach läuft alles wieder normal.

>Die Störung kann eigentlich nur von dem 24V Signal kommen. Ich kann mir
>zwar nicht vorstellen warum das so ist, aber sonst ist nichts weiter
>angeschlossen.

Freilaufdiode am Relais? Siehe Relais mit Logik ansteuern.

>Aber wenn das so ist, kann man per Programm die I2C Leitung resetten
>oder muß ich sie per Relais kurz unterbrechen o.ä.

Hast du eine Relais-Manie?

>Wie muß den so ein SCL-Puls aussehen (Dauer, Fequenz usw.)?

Wie ein normaler I2C Impuls im Normalbetrieb. Sagen wir 10us Pulsbreite.

>Sorry dass ich Frage. Was ist ein "Bit-Banging"?

Bitklimpern per CPU.

>Und was heißt "per Delay machen"?

Einfache Verzögerungsschleifen, nix aufwändiges.

>Und was heißt "HW-I2C"?

Manche Mikrocontroller haben ein I2C Modul in Hardware drin, das 
erledigt fast alles allein.

>Heißt das, dass ich die I2C Funktion am Port3, die ich mit "U0CTL |= I2C
>+ SYNC;" aktiviert habe, ausschalten muß?

Ja.

MFG
Falk

von uC-Troll (Gast)


Lesenswert?

"Was ist ein 'Bit-Banging'" - guckst du hier:
http://de.wikipedia.org/wiki/Bit-Banging

Falk Brunner schrieb:
>>Heißt das, dass ich die I2C Funktion am Port3, die ich mit "U0CTL |= I2C
>>+ SYNC;" aktiviert habe, ausschalten muß?
>
> Ja.

Tut das auch nicht weh?

von Markus S. (Gast)


Lesenswert?

Falk schrieb:
>Hast du eine Relais-Manie?
Nein, aber ich bin gelernter Elektroinstallateur und ich denke in vielen 
Dingen noch zu viel als Elektriker und nicht als Elektroniker :o)

@all
Sorry wenn ich hier ein paar dummer Fragen stelle muß, aber ich arbeite 
mich noch ein in die Materie und bin mit vielen Begriffen noch nicht 
vertraut.
Deshalb, danke an alle. Ihr habt mir sehr weitergelholfen.

Gruß
Markus

von Markus S. (Gast)


Lesenswert?

Eine Frage habe ich doch noch.
ich habe gestern herausgefunden, dass sie Störung an den I2C Bus immer 
dann auftritt, wenn bei meiner Gasheizung der Brenner anspringt. Und der 
Zündet mit einem Hochspannungszündfunke. Ein Fühler sitzt direkt unter 
der Heizung an der Vorlaufleitung (kann auch nicht verlegt werden).
Kann die Störung daher kommen?
Ich habe auch schon versucht die Versorgungsspannung mit einer 
Verlängerungsschnur von einer anderen Steckdose abzunehmen. Aber das hat 
nichts gebracht.
Hat jemand einen Tip?

Danke
Markus

von Falk B. (falk)


Lesenswert?

@  Markus S. (Gast)

>Kann die Störung daher kommen?

Ja.

>Hat jemand einen Tip?

Leitung geschirmt führen. Direkt am Fühler (LM75?) 100nF zwischen GND 
und VCC. GGf. Ferritperlen auf die Leitung fädeln.

MFG
Falk

von Markus S. (Gast)


Lesenswert?

die 100nF habe ich schon drann und das mit der Abschirmung und den 
Ferritringen werde ich probieren.

Danke
Markus

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.