Hallo,
habe nach diesem Beispiel
http://www.arduino-tutor.de/digitaler-input-output/ mit positiver Logik
(also 10k Widerstand nach Masse) eine Schaltung aufgebaut, Eingang ist
PB3. uC ist ein Attiny85, der per Interrupt aus dem Schlaf geweckt wird
und der Taster ist in meinem Fall ein Öffner.
Schaltung funktioniert auch einwandfrei, wenn Öffner betätigt wird.
Allerdings wird der Interrupt öfter auch ausgelöst, wenn sich jemand der
Schaltung nur nähert aber der Öffner NICHT betätigt wird. Öffner ist
ausgelagert und mit ca. 3m Kabel mit der Schaltung verbunden.
Wo ist der Fehler und wie kann ich das abstellen?
Danke für alle Antworten
Matthias
µC ausreichend geblockt?
Unbenutzte Pins auf festem Potential?
Kein Wackelkontakt bei der Verkabelung?
Schalter in Ordnung?
Eventuell helfen 10nF parallel zum Schalter, aber nahe am µC.
Warum Öffner? Zieht dauerhaft Strom durch den 10k, der zudem auch etwas
kleiner sein dürfte. Dann könntest du den µC auch ohne Schlafen
betreiben und den Eingang abfragen mit ausreichender Entprellung.
Matthias schrieb:> Wo ist der Fehler und wie kann ich das abstellen?
Vielleicht sind die Kontakte etwas korrodiert, weil der Strom durch den
Schalter zu klein ist.
Matthias schrieb:> Allerdings wird der Interrupt öfter auch ausgelöst, wenn sich jemand der> Schaltung nur nähert aber der Öffner NICHT betätigt wird. Öffner ist
Die Erklärung von negativer und positiver Logik auf der verlinkten Seite
ist auch recht wackelig.
Das lange Kabel ist eine Antenne und generiert kleine Spannungsspitzen
auf dem Kabel, die ausreichen den AVR aufzuwecken und den Interrupt
auszulösen.
Du könntest mit einem Kondensator entstören, d.h. mit dem verlängerst Du
die Zeit bis sich die Spannung am Pin des AVR verändert, weil der
Kondensator eine Auf-/Entladekurve hat.
Durch diese Zeitverzögerung verteilst Du die "Energie" einer Störung auf
mehr Zeit und die Spannung am Pin des AVR über-/unterschreitet nicht die
Schaltschwelle bei einer ganz kleinen Energie, die diese Störungen
üblicherweise haben.
Im Prinzip kannst Du das ganz wunderbar kombinieren mit einem
Entprellkondensator:
https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster
Der sorgt auch einfach dafür, dass ein Tastendruck erst nach einer
gewissen Dauer (50-100ms oder so) wahrgenommen wird, bis dahin
"schluckt" der Kondensator den Tastendruck und unterdrückt damit auch
kleine Spannungspitzen, die anderswo herkommen als vom Prellen des
Tasters.
Eine Störung hat nicht so viel Energie, dass sie den Kondensator
aufladen könnte.
Ansonsten finde ich das mit dem Öffner auch unschön. Du legst den AVR
schlafen um Energie zu sparen, verbrennst aber dann doch Energie durch
den ständigen Strom durch den geschlossenen Schalter.
Danke für die Antworten
Das mit der Antenne und den kleinen Spannungsspitzen erscheint mir
einleuchtend, denn ich hatte die Schaltung vorher schon mit negativer
Logik aufgebaut und hatte den selben Effekt.
Zur Erklärung: ich will eine Rezeptionsklingel mit einem optischen
Signal erweitern. Dazu hatte ich zuerst so einen ähnlichen Mikroschalter
https://www.conrad.de/de/mikroschalter-250-vac-6-a-1-x-ein-ein-cherry-switches-db1c-b1sc-tastend-1-st-703791.html?gclid=CIyjkrvw1skCFcaVGwod_7gONA&insert_kz=VQ&hk=SEM&WT.srch=1&WT.mc_id=google_pla&s_kwcid=AL!222!3!48256884177!!!g!!&ef_id=VmxdnAAAAPoDlU26:20151212174708:s
in die Klingel eingebaut und die negative Logik/Schliesser verwendet.
Hat aber den Klingelklöppel zu sehr beeinträchtigt und nicht mehr
zuverlässig mechanisch geklingelt - zudem trat o.g. elektronisches
Geisterklingeln auf.
Habe dann den Klingelfuss neu gebaut, den Klöppel isoliert gelagert und
ihn in nicht betätigter Stellung mit Magnet fixiert - so fungiert der
Klingelfuss mit Klöppel als Öffner. Ausserdem ist so die Zeit länger,
die der Klöppel unterwegs ist, als der Bruchteil einer Sekunde, in der
er an die Glocke schlägt.
Prinzipiell ist es kein Problem, wieder auf negative Logik umzubauen.
Allerdings denke ich nicht, dass der kurze Kontakt Klöppel/Glocke
ausreicht, den Interrupt auszulösen und mit Kondensator schon gar nicht.
"Habe dann den Klingelfuss neu gebaut, den Klöppel isoliert gelagert und
ihn in nicht betätigter Stellung mit Magnet fixiert - so fungiert der
Klingelfuss mit Klöppel als Öffner."
Und das Ganze dann an nen µC... :-D
You made my day...!
Wenn Du keinen Strom sparen musst, brauchst Du den AVR nicht schlafen
legen und das mit dem Öffner ist auch kein Problem.
Nur wenn Du den AVR mit Batterie betreiben möchtest und ihn deshalb
schlafen legst, dann ist es nicht sinnvoll mit dem Öffner zu arbeiten.
Simpel schrieb:> Und das Ganze dann an nen µC... :-D>> You made my day...!
Äusserst konstruktiver Beitrag - danke dafür
Conny G. schrieb:> Wenn Du keinen Strom sparen musst, brauchst Du den AVR nicht schlafen> legen und das mit dem Öffner ist auch kein Problem.
Das Schlafen legen ist/war ja nur ein Überbleibsel der ursprünglichen
Schliesser Version.
Werde auch wieder auf Schliesser umbauen, die Schaltung näher an der
Glocke positionieren und mit einem geschirmten Kabel verbinden.
Wenn dann immer noch Geisterläuten, werde ich den Kondensator testen und
hoffen, dass die minimale Kontaktzeit Klöppel/Glocke ausreicht, den
Interrupt auszulösen.
Gibt es eigentlich Angaben, wie lange eine Pegeländerung anstehen muss,
um den Interrupt auszulösen?
Oder wäre es besser, den Attiny85 mit 8MHz laufen zu lassen und den
Eingangspin permanent im Loop mit digitalRead abzufragen?
Simpel schrieb:> "Habe dann den Klingelfuss neu gebaut, den Klöppel isoliert gelagert und> ihn in nicht betätigter Stellung mit Magnet fixiert - so fungiert der> Klingelfuss mit Klöppel als Öffner."
Dann ist es kein Wunder, das Du Störungen hast. Die Verbindung
ist einfach zu unsicher. Vielleicht könntest Du einen kleinen
Magnet am Klöppel oder inder Nähe anbringen und als Kontakt
einen Reedkontakt verwenden.
Matthias schrieb:> Werde auch wieder auf Schliesser umbauen, die Schaltung näher an der> Glocke positionieren und mit einem geschirmten Kabel verbinden.
Ein geschirmtes Kabel hilft, Schirm an Masse. Ich habe mal einen
Touch-Schalter selber gebaut mit einem 1,5m Kabel die Sensorfläche
entfernt. Das reagiert auch auf Annäherung ans Kabel oder auf das
Einschalten der Espressomaschine, d.h. durch das Einschalten gab es
einen Impuls auf dem Kabel, der sie gleich wieder ausschaltete :-)
Schirm auf Masse und es hat funktioniert.
> Wenn dann immer noch Geisterläuten, werde ich den Kondensator testen und> hoffen, dass die minimale Kontaktzeit Klöppel/Glocke ausreicht, den> Interrupt auszulösen.> Gibt es eigentlich Angaben, wie lange eine Pegeländerung anstehen muss,> um den Interrupt auszulösen?
Das steht im Datenblatt des µC. Habe hier gerade ein Datenblatt eines
Attiny45 rumfliegen, wenn ich das Diagramm in der Sektion "Interrupts"
richtig interpretiere braucht es gerade mal 6 Taktzyklen um den Int
auszulösen und 3 um den Pin Change zu erkennen.
Das ist schnell, das sind nur µs.
Allerdings kommt es darauf an, wielange der Impuls vom Klöppel dauert,
ob Du einen vernünftigen Wert für den Kondensator finden kannst, damit
das nicht weggeschluckt wird.
Ohne Kondensator müsste das klappen, aber das prellt und sollte dringend
entprellt werden, sonst hast Du immer ein paar Impulse davon.
> Oder wäre es besser, den Attiny85 mit 8MHz laufen zu lassen und den> Eingangspin permanent im Loop mit digitalRead abzufragen?
Das ändert es nicht, Du brauchst ja auch eine Zeit in der Schleife
wieder bei der Pinabfrage zu sein, das ist eher weniger gründlich als
der Interrupt. Auch abhängig von der Dauer des Impulses vom Klöppel.
Wenn Du ein Oszilloskop hast könntest Du Dir den Signalverlauf mal
ansehen. Das wäre sehr hilfreich das genauer zu wissen, sonst musst Du
Wissen mit Experimentieren ersetzen.
Oder Du zählst die Serie der Impulse mit ihrer Dauer und Pause auf dem
Attiny mit und gibst es Dir danach über die serielle Schnittstelle aus.
Meine Vermutung wäre, dass der Impuls des Klöppels gar nicht so kurz ist
wie man meint. Millisekunden wären ja schon 1.000 Mikrosekunden.... für
einen µC eine Ewigkeit :-)
Danke für Deine ausführlichen Antworten
Conny G. schrieb:> sonst musst Du> Wissen mit Experimentieren ersetzen
So wird's wohl werden, aber es steht ja der Weihnachtsurlaub an