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
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.
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
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
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
@ 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
"Was ist ein 'Bit-Banging'" - guckst du hier:
http://de.wikipedia.org/wiki/Bit-BangingFalk 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?
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
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
@ 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