Forum: Mikrocontroller und Digitale Elektronik Ungewollte ISR-Signale am Arduino-Eingang


von Stefan H. (alve89)


Lesenswert?

Moin zusammen!

Ich habe am Arduino Mega zwei externe Taster hängen, die über 
(ungeschirmte) Kabellängen von ca. 1 Meter mit zwei Input-Pins des 
Arduinos verbunden sind. Softwareseitig werden die beiden Pins mittels 
INPUT_PULLUP beschaltet. An den beiden Inputs erfolgen unregelmäßig 
willkürlich erkannte ISR-Inputs, ohne dass die Schalter zuvor überhaupt 
betätigt worden wären.

Woran kann das liegen bzw. müssen da irgendwelche weiteren Entstörungen 
eingebaut werden, um keine falschen Auslösungen mehr zu erhalten?

Ich meine diesbezüglich hier vor vielen Wochen mal einen ausführlichen 
Thread mit Schaltplänen gefunden zu haben, finde diesen jedoch nicht 
mehr.

Danke und viele Grüße!

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


Lesenswert?

Als erste Maßnahme kannst du externe Pullup hinzufügen, denn die AVR 
internen  sind mit ungefähr 30k vis 50k spezifiziert. Externe Pullup 
machen die Leitungen unempfindlicher gegen Fremdstörungen. Mach da so 
2k2 bis 10k ran und schau, obs besser wird. Geschirmte Kabel sind auch 
gar nicht dumm.
Ansonsten können in hartnäckigen Fällen auch kleine Kondensatoren vom 
INT gegen Masse helfen. Das können so 1nF - 4,7nF sein. Die verhindern 
Einstrahlungen im HF Bereich.
Die Software kann auch auf Plausibilität prüfen. Wenn der Pin innerhalb 
der ISR nochmal auf 'gdrückt geprüft wird und das nicht mehr wahr ist, 
kann die ISR das auch mal verwerfen.
Am besten fragt man solche Taster sowieso zyklisch ab und meldet eine 
Taste erst dann als gedrückt, wenn sie mahr als ein paar dutzend ms 
erkannt wird. Siehe dazu Entprellung:
https://www.mikrocontroller.net/articles/Entprellung

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Stefan H. schrieb:
> An den beiden Inputs erfolgen unregelmäßig
> willkürlich erkannte ISR-Inputs, ohne dass die Schalter zuvor überhaupt
> betätigt worden wären.

Daher wirst Du in Profiprogrammen auch niemals Code finden, der zum 
Tasten einlesen externe Interrupts verwendet. Das Mittel der Wahl ist 
ein Timerinterrupt mit Mehrfachabtastung.

Leider wird selbst in teuren Geräten oft gestümpert. Z.B. mein HAMEG 
HMO2024 triggert oder schaltet Bereiche um, wenn ich ein Labornetzteil 
oder den Trenntrafo an der selben Steckdosenleiste einschalte.

Früher hatten Radios noch einen Langwellenbereich, da konnte man prima 
hören, was für Störungen elektrische Geräte (Relais, Motoren) oder ein 
Gewitter (elektrostatische Entladungen) erzeugen.
1m ist eine brauchbare Antenne. Ein AVR mit 20MHz Takt kann Pulse ab 
50ns gut erkennen.

von Stefan H. (alve89)


Lesenswert?

Danke für die sehr ausführliche Antwort (und sorry für die späte 
Rückmeldung)!
Die Vorschläge setze ich natürlich gerne um und hoffe auf Besserung.

Aus beiden Antworten gemeinsam entnehme ich vor allem eine optimierbare 
Implementierung der Tasterabfrage.

von Rainer W. (rawi)


Lesenswert?

Stefan H. schrieb:
> Woran kann das liegen bzw. müssen da irgendwelche weiteren Entstörungen
> eingebaut werden, um keine falschen Auslösungen mehr zu erhalten?

Alleine aus Gründen des ESD-Schutzes ist ein Serienwiderstand und ein 
Kondensator parallel zum Eingang zu empfehlen. Ja, die internen Pull-ups 
sind für die Leitungs/Antennenlänge viel zu groß.

Je nach Art der Kontaktoberflächen deiner Taster muss für zuverlässige 
Kontaktgabe sowieso ein gewisser Mindeststrom fließen ( s. Datenblatt).

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


Lesenswert?

Stefan H. schrieb:
>  (ungeschirmte) Kabellängen von ca. 1 Meter
Das liest sich wie "Antenne".

> Softwareseitig werden die beiden Pins mittels INPUT_PULLUP beschaltet.
Dieser Pullup hat 30k-100k. Mein EMV-Spezi sagt immer: "Alles über 5k 
ist für elektromagnetische Störer unsichtbar". Für diese Störungen sind 
die CMOS-Eingänge des µC also einfach offen. Und man sollte niemals 
einen offenen CMOS-Eingang in seiner Schaltung haben.

> Woran kann das liegen
Herzlich willkommen in der Welt der *elektromagnetischen 
Verträglichkeit*. Dir "funken" kurze Spikes von irgendwelchen 
Entladungen oder Schaltvorgängen in die Antenne und dem µC reicht da 
eine ganz kurze Impulsdauer im Bereich um 50ns zur Erkennung der 
Interruptanforderung.

> müssen da irgendwelche weiteren Entstörungen
> eingebaut werden, um keine falschen Auslösungen mehr zu erhalten?
Alles, was von Meschen (und von den allermeisten Maschinen) betätigt 
werden kann, braucht keinen Interrupt, weil es so unerträglich langsam 
geht, dass ein µC nicht innerhalb von wenigen Nanosekunden schnell 
regieren muss. Und wenn man dann einen Tastendruck erst nach 20ms als 
"gültig" anerkennt und zur Auswertung weitergibt, reciht es immer noch 
für 25 maliges "drücken und loslassen" pro Sekunde.

Stefan H. schrieb:
> vor allem eine optimierbare Implementierung der Tasterabfrage.
Und allem Voran eine Anpassung des Pullup-Widerstands in Richtung 2k2.

Rainer W. schrieb:
> Je nach Art der Kontaktoberflächen deiner Taster muss für zuverlässige
> Kontaktgabe sowieso ein gewisser Mindeststrom fließen ( s. Datenblatt).
Stichwort "Frittstrom".

: Bearbeitet durch Moderator
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.