Forum: Mikrocontroller und Digitale Elektronik Arduino - Interrupt-Entstörung ganz simpel?


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich habe im Auftrage für jemanden eine Mini-Lüfter-Steuerung mit einem 
Arduino, einem Nextion-Display, einem selbstgebauten Relais-Shield und 
einem Münzprüfer gebaut. Die Impulse, die der Münzprüfer an den Arduino 
(Uno) liefert, werden in einem Pin-Change-Interupt empfangen und 
ausgewertet.

Soweit funktioniert das auf dem Labortisch alles genau so, wie es soll. 
Leider hatte ich die Intensität der Störimpulse, die durch die von den 
Reed-Relais (und nachfolgendem Schütz) geschalteten Lasten (je 2x 
230V-1kW-Wechselstrom-Motore) selbst durch Netzteil, Störfilter und 
Abschirmung sämtlicher Kabel hindurch zum Arduino dringen, völlig 
unterschätzt. Der Interrupt springt (vor Allem beim Abschalten) immer 
einmal an und täuscht dadurch Münzeinwürfe vor, die es nicht gibt.

Nun,manchmal sieht man den Wald vor lauter Bäumen nicht ... bis ich 
heute (hoffentlich) auf die simpelste aller Ideen kam: Die Störungen 
entstehen ja immer nur durch die vom Arduino selber ausglösten 
Schaltvorgänge. Also setze ich inden Ausgaberoutinen für die Relais am 
Anfag ein Flag "dnd_flag" auf true und am Ende der Routine wieder auf 
false.

Die Interrupt-Routine erhält als erste Zeile: if(dnd_flag){return;}

Nun bin ich leider nicht vor Ort, um sofort die Wirksamkeit der Maßnahme 
zu prüfen, deshalb wollte ich das hier mal zu Diskussion stellen ... 
vlt. hab ich ja was übersehen? Bitte keinen Flame von wegen Arduino und 
so, nützt nix, die Hardware ist so wie sie ist. Könnte diese 
softwaremäßige Entstörung wirksam sein?

: Bearbeitet durch User
von False! (Gast)


Lesenswert?

Wenn der entsprechende Pegel lange genug anliegt, würde ich in der isr 
eine entprellung des Signals vornehmen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

False! schrieb:
> Wenn der entsprechende Pegel lange genug anliegt, würde ich in der
> isr
> eine entprellung des Signals vornehmen.

Der Münzprüfer sendet 100ms-Impulse pro 50ct in 100ms Abstand. Dieser 
ist auch nicht direkt am MC angeschlossen, sondern über ein Reed-Relais, 
die ISR ist insofern bereits entprellt, dass die Impulse aus dem 
Münzprüfer ohne Prellung der Relaiskontakte gezählt werden.

Wenn man z.B. 2€ einwirft entsprechend 4 solcher Impulse.

Die Störimpulse kommen nicht unbedingt über die Leitung vom Münzprüfer, 
sondern möglicherweise auch über die Betriebsspannung oder als EMP über 
die Luft. Eine leichte Blech-Abschirmung hat bereits eine gewisse 
Verbesserung, aber keine endgültige Abhilfe gebracht. D.h. das 
Hinzuzählen von Impulsen erfogt nun nicht mehr in jedem Falle, kommt 
aber trotzdem noch vor ...

: Bearbeitet durch User
von stromverdichter (Gast)


Lesenswert?

Du könntest solche Zustände auch in einem Timer pollen. Dann bestimmst 
du die Dauer, die der Münzprüfer als Impuls schickt. Gehen wir hier mal 
von 1 Sekunde aus. Dann bastel dir einen 100ms Timer der den zustand des 
Eingangs prüft. Wenn du 9 mal hintereinander einen Puls hast, ist dein 
Signal echt. Das dürfte dann sicher genug sein. Wenn ein Timer-Interupt 
kein Signal erkennt, setze den Zähler einfach wieder auf null.
P.S. ich mag Zeitscheiben, da ist alles so berechenbar.

von Kirsch (Gast)


Lesenswert?

Wenn die Impulse eh immer 100ms lang sind, dann miss die Zeit oder bau 
einen Tiefpass direkt vor dem Einganspin

von stromverdichter (Gast)


Lesenswert?

bei 100ms Pulsdauer nimm z.B. einen 10ms Timer. Oder leite dir den 
Systick-TimerInterrupt ab, falls vorhanden.

von Wolfgang (Gast)


Lesenswert?

Frank E. schrieb:
> Der Interrupt springt (vor Allem beim Abschalten) immer
> einmal an und täuscht dadurch Münzeinwürfe vor, die es nicht gibt.

Hast du bei deinem Aufbau dafür gesorgt, dass es keine Erdschleifen 
gibt? Da hilft sonst ein Optokoppler.
Auch kannst du deinen Eingang niederohmiger machen, damit mehr Energie 
erforderlich wird, um einen Interrupt auszulösen. Falls die Störungen 
über deinen Sensorverkabelung rein kommen, könntest du dein Signal auch 
per LWL übertragen - da könnten dann noch so viele EM-Störungen kommen 
...

Aber anscheinend ist das Kind schon in den Brunnen gefallen und jetzt 
muss softwaremäßig nachgebessert werden. Aber warum willst du das in der 
ISR machen. Üblicherweise würde man wohl eher vor Auslösung des 
störenden Vorgangs den Interrupt abschalten und z.B. über Timer nach 
einer gewissen Totzeit (in der der µC dann taub ist) wieder einschalten 
(ggf. nachdem man im Iinterrup Flag Register aufgeräumt hat).

von Stefan F. (Gast)


Lesenswert?

Wenn du die ursache ganz sicher nicht wegschaffen kannst, dann filtere 
das Signal:
1
         Reed Kontakt
2
           ____      100r            4,7k
3
GND |-------  ------[===]---+-------[===]----o VCC
4
                            |
5
    |-----||----------------+---------o µC Eingang
6
        100nF

Die Schaltung wirkt als Tiefpass, welche kurze Störungen und Radiowellen 
herausfiltert. Sehr einfach, sehr wirkungsvoll.

Man kann auch per Software Filtern, aber gerade bei Interrupt-Signalen 
ist das nicht ganz so einfach. Daher lohnt sich die Überlegung: Kommt es 
auf jeden Cent an?

Oder anders herum gefragt: Möchtest du dich der programmier-technischen 
Herausforderung stellen?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Stefan U. schrieb:
> Man kann auch per Software Filtern, aber gerade bei Interrupt-Signalen
> ist das nicht ganz so einfach. Daher lohnt sich die Überlegung: Kommt es
> auf jeden Cent an?
>
> Oder anders herum gefragt: Möchtest du dich der programmier-technischen
> Herausforderung stellen?

Erstmal danke für die vielen Hinweise. Bei der aktuellen Lösung ist eine 
Änderung der Hardware kaum mehr möglich, ist bereits recht aufwändig 
eingebaut - evtl. wenn das Projekt einen Nachfolger hat.

Galvanisch ist der Eingang ja bereits durch das Reed-Relais getrennt 
(als robustere Alternative zum optokoppler). Der Kontakt zieht einen 
MC-Pin, bei dem der interne Pullup aktiviert ist, nach Masse. Bezüglich 
der Prell-Charakteristik des Relais ist bereits Alles getan.

Ich möchte nochmal auf meinen Gedanken eingangs verweisen:

- ich weiss ja, wann die Störungen kommen: Ausschließlich durch meine 
eigenen Schalthandlungen

- wenn ich also in genau diesen Fällen die ISR wirkungslos mache, sollte 
ja eigentlich das Problem gelöst sein ... oder?

von Stefan F. (Gast)


Lesenswert?

Kein Wunder, dass du dir Störsignale einfängst.

Der internet Pull-Up des µC hat etwa 50k Ohm. Das langt nur für Taster 
direkt daneben auf der selben Platine. Füge mal externe Pull-Up 
Widerstände mit höchstens 4,7k Ohm hinzu.

von Einhart P. (einhart)


Lesenswert?

Was soll denn der Interrupt bei so einem langsamen Signal? Du wirst doch 
kaum die Notwendigkeit haben die Münze im Mikrosekundenbereich zu 
detektieren.

Einen normalen Pin z.B. alle 10ms abfragen. Wird dabei dreimal 
nacheinander der selbe Zustand vorgefunden ist das Signal stabil.

Btw: auch Reedrelais prellen

von Peter D. (peda)


Lesenswert?

Frank E. schrieb:
> Der Münzprüfer sendet 100ms-Impulse pro 50ct in 100ms Abstand.

Dann nimm eine Entprellroutine. Es gibt hier eine gute mit 4-fach 
Abtastung.

von Frank E. (Firma: Q3) (qualidat)


Angehängte Dateien:

Lesenswert?

Einhart P. schrieb:
> Was soll denn der Interrupt bei so einem langsamen Signal? Du
> wirst doch
> kaum die Notwendigkeit haben die Münze im Mikrosekundenbereich zu
> detektieren.
>
> Einen normalen Pin z.B. alle 10ms abfragen. Wird dabei dreimal
> nacheinander der selbe Zustand vorgefunden ist das Signal stabil.
>
> Btw: auch Reedrelais prellen

Einhart P. schrieb:
> Was soll denn der Interrupt bei so einem langsamen Signal? Du
> wirst doch
> kaum die Notwendigkeit haben die Münze im Mikrosekundenbereich zu
> detektieren.

Das Projekt ist "gewachsen". Am Anfang hat der Arduino auch alle 
Pixelausgaben für das Display mit gemacht und war knack auf knirsch 
ausgelastet. Da wollte ich nicht das Risiko eingehen, bei der 
aufwändigen Pixel-Malerei, die Impulse des Münzprüfers zu verpassen. 
Erst später bin ich auf das Nextion Display und die serielle Steuerung 
umgeschwenkt.

> Einen normalen Pin z.B. alle 10ms abfragen. Wird dabei dreimal
> nacheinander der selbe Zustand vorgefunden ist das Signal stabil.

Trotzdem muss das Display gesteuert werden, da will ich keine Eingabe 
verpassen.

> Btw: auch Reedrelais prellen

Dass das Reedrelais in der ISR per Software entprellt ist, habe ich 
bereit smehrfach geschrieben.

von Stefan F. (Gast)


Lesenswert?

> Bei der aktuellen Lösung ist eine
> Änderung der Hardware kaum mehr möglich

Warum fragst du dann noch? Du hast also bereits beschlossen, das nicht 
gezeigte Programm zu verbessern. Dann mach mal.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Stefan U. schrieb:
> Kein Wunder, dass du dir Störsignale einfängst.
>
> Der internet Pull-Up des µC hat etwa 50k Ohm. Das langt nur für Taster
> direkt daneben auf der selben Platine. Füge mal externe Pull-Up
> Widerstände mit höchstens 4,7k Ohm hinzu.

Das Reed-Relais sitzt 2cm daneben. Auf der Relais-Platine wäre noch 
Platz für zus. Pullups nach Vcc.

von Stefan F. (Gast)


Lesenswert?

Es wird zeit, dass du die Pläne der Hardware und die Software zeigst. 
Und du solltest Dich entscheiden, ob eine Hardware Änderung möglich ist, 
oder nicht.

von Peter D. (peda)


Lesenswert?

Frank E. schrieb:
> Am Anfang hat der Arduino auch alle
> Pixelausgaben für das Display mit gemacht und war knack auf knirsch
> ausgelastet.

Das liegt dann aber nicht am Arduino, sondern an Deinem Programm.

Frank E. schrieb:
> Da wollte ich nicht das Risiko eingehen, bei der
> aufwändigen Pixel-Malerei, die Impulse des Münzprüfers zu verpassen.

Das ist ja gerade der Witz an Interrupts, man kann nichts verpassen.
Selbst wenn die Grafikausgabe schnarchlahm programmiert wurde, kann der 
Interrupt sämtliche Münzen zählen. 200ms sind für den AVR ne Ewigkeit.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Peter D. schrieb:
> Frank E. schrieb:
>> Am Anfang hat der Arduino auch alle
>> Pixelausgaben für das Display mit gemacht und war knack auf knirsch
>> ausgelastet.
>
> Das liegt dann aber nicht am Arduino, sondern an Deinem Programm.

Für die Bildschirmausgaben habe ich die gängigen Libs (z.B. UTFT) 
verwendet und die Adafruit GFX Lib, man muss das Fahrrad ja nicht 
jedesmal neu erfinden. Das Bildbeispiel weiter oben has du schon 
gesehen? Das ist mit dem Uno eine echte Herausforderung. Seit ich die 
Nextions kenne, aber kein Thema mehr.

> Frank E. schrieb:
>> Da wollte ich nicht das Risiko eingehen, bei der
>> aufwändigen Pixel-Malerei, die Impulse des Münzprüfers zu verpassen.
>
> Das ist ja gerade der Witz an Interrupts, man kann nichts verpassen.
> Selbst wenn die Grafikausgabe schnarchlahm programmiert wurde, kann der
> Interrupt sämtliche Münzen zählen. 200ms sind für den AVR ne Ewigkeit.

Ja eben, deshalb habe ich ja auch einen Interrupt verwendet und kein 
Polling, wie von anderen empfohlen.

Ich verstehe nicht ganz das Anliegen deines Beitrages.

: Bearbeitet durch User
von stromverdichter (Gast)


Lesenswert?

Du sollst ja auch die Eingänge in einem Timer-Interrupt pollen.

von Peter D. (peda)


Lesenswert?

Frank E. schrieb:
> Das Bildbeispiel weiter oben has du schon
> gesehen? Das ist mit dem Uno eine echte Herausforderung.

Das ist doch nur die Ausgabe einer Bitmap und einer Zeile Text.
Die einzige Herausforderung sehe ich darin, die Bitmap zu erstellen und 
dann im Flash abzulegen. Entweder man benutzt ein Tool, was aus einer 
Bitmap C-Code erstellt oder legt die Bitmap z.B. in einem SPI-Flash ab.

Bei Münzeinwurf müssen ja nur die letzten Zeichen der Textzeile 
aktualisiert werden, d.h. die Zeit zum Zeichnen des Bildes fällt nicht 
nochmal an.

Frank E. schrieb:
> Ja eben, deshalb habe ich ja auch einen Interrupt verwendet und kein
> Polling, wie von anderen empfohlen.

Nur sollte man dazu aber einen Timerinterrupt nehmen, der dann 
praktischer Weise das Signal entprellt (entstört).

von Stefan S. (chiefeinherjar)


Lesenswert?

Frank E. schrieb:
> Ja eben, deshalb habe ich ja auch einen Interrupt verwendet und kein
> Polling, wie von anderen empfohlen.

Du sollst innerhalb des zyklisch auftretenden Timer-Interrupts 
pollen.
So pollst du "garantiert" alle XX ms.

So verpasst du auch keine Eingaben und der µC kann sich auch Minuten 
lang Zeit lassen mit dem Display.

Schau dir einfach mal diesen Artikel hier an, der erklärt das genau: 
Entprellung

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Ich kann ja verstehen, dass die Verwendung eines Interrupt-Eingangs für 
den Anfang verlockend und wie eine Lösung aussieht. Aber wie du siehst, 
schafft das neue Probleme.

Es ist wirklich am einfachsten, den Eingang zyklisch alle paar ms in 
einem Timer-Interrupt abzufragen und zugleich zu entprellen.

Nur muss man erstmal auf diese Idee kommen. Für mich waren die die 
umfangreichen Erklärungen zu Peter Dannegers Entprellroutine 
(https://www.mikrocontroller.net/articles/Entprellung#Timer-Verfahren_.28nach_Peter_Dannegger.29) 
aufschlussreich, wenngleich ich sie noch nie 1:1 übernommen habe. Der 
Lösungsansatz ist wirklich gut.

von Uwe (Gast)


Lesenswert?

Hi,
> Also setze ich inden Ausgaberoutinen für die Relais am Anfag ein Flag
> "dnd_flag" auf true und am Ende der Routine wieder auf false.
mal ne Gegenfrage: Wie lange dauern die Ein/Ausschalltimpulse?

Viel Erfolg, Uwe

von m.n. (Gast)


Lesenswert?

Frank E. schrieb:
> Der Münzprüfer sendet 100ms-Impulse pro 50ct in 100ms Abstand. Dieser
> ist auch nicht direkt am MC angeschlossen, sondern über ein Reed-Relais,
> die ISR ist insofern bereits entprellt, dass die Impulse aus dem
> Münzprüfer ohne Prellung der Relaiskontakte gezählt werden.

Wenn Du ganz ohne Programmänderung auskommen möchtest, dann verwende 
anstatt des Relais einen Optokoppler und am INT-Eingang 100 nF gegen GND 
bzw. VCC.

von Stefan F. (Gast)


Lesenswert?

> die ISR ist insofern bereits entprellt, dass die Impulse aus dem
> Münzprüfer ohne Prellung der Relaiskontakte gezählt werden.

Wie ist das zu verstehen? Wer oder was sorgt dafür, dass "ohne Prellung" 
gezählt wird?

von Conny G. (conny_g)


Lesenswert?

Stefan U. schrieb:
> Wenn du die ursache ganz sicher nicht wegschaffen kannst, dann filtere
> das Signal:
>
>
1
>          Reed Kontakt
2
>            ____      100r            4,7k
3
> GND |-------  ------[===]---+-------[===]----o VCC
4
>                             |
5
>     |-----||----------------+---------o µC Eingang
6
>         100nF
7
>
>
> Die Schaltung wirkt als Tiefpass, welche kurze Störungen und Radiowellen
> herausfiltert. Sehr einfach, sehr wirkungsvoll.

Hi Stefan,

wofür eigentlich der extra 100R?

Vg,
Conny

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Stefan U. schrieb:
>> die ISR ist insofern bereits entprellt, dass die Impulse aus dem
>> Münzprüfer ohne Prellung der Relaiskontakte gezählt werden.
>
> Wie ist das zu verstehen? Wer oder was sorgt dafür, dass "ohne Prellung"
> gezählt wird?

Die Speicherung von millis() in der ISR, hier ist sie:
1
void onoff_intr()
2
{
3
  if(dnd_flag){return;}
4
  if((millis() - onoff_ept) > deb_time) //debounce time
5
  {
6
    ...
7
  }
8
  onoff_ept=millis();
9
};

von Peter D. (peda)


Lesenswert?

Frank E. schrieb:
> Dass das Reedrelais in der ISR per Software entprellt ist, habe ich
> bereit smehrfach geschrieben.

Wenn das der Fall wäre, dann würdest Du ja Deine Frage nicht stellen 
müssen.
Es ist also offensichtlich nicht der Fall.
Im Web geistert bezüglich Entprellen leider auch viel Unsinn herum.
Die Notwendigkeit und das Prinzip der Mehrfachabtastung in definierten 
Zeitintervallen haben nur sehr wenige verstanden und umgesetzt.
Mathematisch gesehen ist das ein Tiefpaß (gleitender Mittelwert) mit 
nachfolgendem Schmitt-Trigger.

von M. K. (sylaina)


Lesenswert?

Peter D. schrieb:
> Mathematisch gesehen ist das ein Tiefpaß

Ja, und zwar ein diskreter TP mit all seinen Vor- und Nachteilen ;)

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Peter D. schrieb:
> Frank E. schrieb:
>> Dass das Reedrelais in der ISR per Software entprellt ist, habe ich
>> bereit smehrfach geschrieben.
>
> Wenn das der Fall wäre, dann würdest Du ja Deine Frage nicht stellen
> müssen.
> Es ist also offensichtlich nicht der Fall.
> Im Web geistert bezüglich Entprellen leider auch viel Unsinn herum.
> Die Notwendigkeit und das Prinzip der Mehrfachabtastung in definierten
> Zeitintervallen haben nur sehr wenige verstanden und umgesetzt.
> Mathematisch gesehen ist das ein Tiefpaß (gleitender Mittelwert) mit
> nachfolgendem Schmitt-Trigger.

Ich glaube nicht, dass das (Ent-) Prellen in diesem Falle mein Problem 
ist, sondern eher, dass Störimpulse über die Stromversorgung oder die 
Luft (Magnetfelder) auf die - zugegeben nicht industieellen Ansprüchen 
genügende - Arduino-Platine einwirken. Wenn ich den Wert im obigen 
Beispiel hochsetze, werden die Impulse aus dem Münzprüfer nicht mehr 
erkannt, die Störungen werden aber trotzdem als solche wahrgenommen.

Da ich ja in meinem Falle genau weiss, wann die Störungen kommen, 
nämlich immer bei selbst ausgelösten Schalthandlungen, hilft es, genau 
für diesen Moment die ISR auf "Durchzug" zu schalten. Ich konnte es 
inzwischen testen.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Conny G. schrieb:
> wofür eigentlich der extra 100R?
1. dass der Reedkontakt nicht per Kurzschluss den 100nF Kondensator 
entlädt.
2. dass der µC-Pin nicht völlig ungeschützt in die freie Welt entlassen 
wird.

Peter D. schrieb:
> Die Notwendigkeit und das Prinzip der Mehrfachabtastung in definierten
> Zeitintervallen haben nur sehr wenige verstanden
Du hast den "2-Bit-Zähler pro Eingang" aber auch gut versteckt... ;-)

> das Prinzip der Mehrfachabtastung in definierten Zeitintervallen
> haben nur sehr wenige verstanden und umgesetzt.
Wer sich z.B. den MAX6816 mal genauer anschaut, der versteht eher, wie 
eine funktionierende Entprellung aufgebaut ist.

Frank E. schrieb:
> Dass das Reedrelais in der ISR per Software entprellt ist, habe ich
> bereits mehrfach geschrieben.
Dann funktioniert diese Entprellung offenbar nicht (gut genug).

Frank E. schrieb:
> bis ich heute (hoffentlich) auf die simpelste aller Ideen kam: Die
> Störungen entstehen ja immer nur durch die vom Arduino selber ausglösten
> Schaltvorgänge. Also setze ich inden Ausgaberoutinen für die Relais am
> Anfag ein Flag "dnd_flag" auf true und am Ende der Routine wieder auf
> false.
Das ist nur die extrem lange Schreibweise für "Murks". Denn wenn so eine 
Störung eben mal nicht in dem von dir erwarteten "Blindbereich" kommt 
(weil es ja auch andere Störer gibt), dann zählst du trotzdem.

Fazit: wenn der Impuls des Münzprüfers 100ms lang dauert, dann würde ich 
für eine 99,999% sichere Erkennung einen 10ms-Interrupt implementieren 
und darin bei high einen Zähler hochzählen. Wenn der Zähler 7 erreicht 
hat, dann ist es ein Signal des Münzprüfers. Bei low am Eingang wird der 
Zähler auf 0 zurückgesetzt.
Und zudem würde ich den Eingang des µC halbwegs 
niederohmig/niederimpedant beschalten, damit nicht jeder klitzekleine 
Störimpuls gleich eine Fehlzählung einleitet.

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

Frank E. schrieb:
> Wenn ich den Wert im obigen
> Beispiel hochsetze

Welcher Wert in welchem Beispiel denn?
Zeig doch mal den relevanten Code oder nimm einfach bewährten Code.
Bisher weiß niemand, worüber Du überhaupt sprichst.
Gib endlich mal Butter bei die Fische.

Frank E. schrieb:
> Da ich ja in meinem Falle genau weiss, wann die Störungen kommen,
> nämlich immer bei selbst ausgelösten Schalthandlungen, hilft es, genau
> für diesen Moment die ISR auf "Durchzug" zu schalten.

Störungen können aber auch von außerhalb kommen. Warum einen 
Würg-Around, wenn es dafür schon funktionierende Lösungen gibt.
Viele kennen Dein Problem nicht, weil sie einfach den Timerinterrupt 
nehmen.

von Conny G. (conny_g)


Lesenswert?

Lothar M. schrieb:
> Conny G. schrieb:
>> wofür eigentlich der extra 100R?
> 1. dass der Reedkontakt nicht per Kurzschluss den 100nF Kondensator
> entlädt.
> 2. dass der µC-Pin nicht völlig ungeschützt in die freie Welt entlassen
> wird.

Jaaa, ok. Ich hab nicht genau hingekuckt. Schneller geschrieben als 
gedacht.
Ich habe oben rechts als uC-Pin interpretiert, obwohl es VCC ist.

von Stefan F. (Gast)


Lesenswert?

> Störungen können aber auch von außerhalb kommen.

Zum Beispiel, wenn sich jemand eine Zigarette anzündet. Oder ein Handy 
aktiv wird.

von Stefan F. (Gast)


Lesenswert?

> Jaaa, ok. Ich hab nicht genau hingekuckt. Schneller geschrieben
> als gedacht.
> Ich habe oben rechts als uC-Pin interpretiert, obwohl es VCC ist.

Trotzdem war deine Erklärung völlig richtig.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Um den Thread zum Abschluss zu bringen:

Meine eingangs beschriebene Idee (während der Schalthandlung ISR 
deaktivieren) hat in meinem Falle genau den gewünschten Erfolg gebracht.

Die anderen Infos und Vorschläge nehme ich zur Kenntnis und werde sie im 
nächsten Projekt berücksichtigen.

von soundso (Gast)


Lesenswert?

Conny G. schrieb:
> wofür eigentlich der extra 100R?

damit der Taster nicht den Ganzen Strompuls in voller Härte aus dem 
Kondensator abkriegt und sich irgendwann selbst verschweisst ...

von Falk B. (falk)


Lesenswert?

@soundso (Gast)

>> wofür eigentlich der extra 100R?

>damit der Taster nicht den Ganzen Strompuls in voller Härte aus dem
>Kondensator abkriegt und sich irgendwann selbst verschweisst ...

Stimmt, aber wenn man es GLEICH richtig macht, braucht man den auch 
nicht. Denn nach dem Taster + Pull-Up gehört ein RC-Tiefpass, nicht nur 
ein C. Denn wenn die Quelle niederohmig ist, wird die Filterwirkung 
deutlich geschwächt, außerdem wird sie dann stark kapazitiv belastet, 
was in einigen Fällen auch unerwünscht ist.

So nicht!

Beitrag "Re: Arduino - Interrupt-Entstörung ganz simpel?"

Eher so.

https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster

von Teo D. (teoderix)


Lesenswert?

Frank E. schrieb:
> Meine eingangs beschriebene Idee (während der Schalthandlung ISR
> deaktivieren) hat in meinem Falle genau den gewünschten Erfolg gebracht.

Lass den ISR doch erst wieder auf die Welt los, wenn das Ereignis von 
einer kleinen, Timer gesteuerten Funktion, per Polling 
überprüfen/entstören wurde.
(nicht vergessen vor der ISR freigabe, das Flag zu löschen)

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.