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!
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
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.
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.
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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.