-         

Ergebnis 1 bis 10 von 10

Thema: Arduino Eingänge sehr empfindlich?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235

    Arduino Eingänge sehr empfindlich?

    Anzeige

    Hallo,

    ich habe im Moment den Eindruck, dass die Eingänge eines Arduino MEGA trotz der Nutzung der internen Pulllup-Widerstände sehr empfindlich sind.
    Das habe ich festgestellt, weil ich mit den Eingängen von einigen Schaltern (Mäuseklavier) einen Alt-/ Neu-Vergleich mache und bei einer Änderung ein delay(500) wirksam werden lasse. Vorher schalte ich jedoch an einem Ausgang eine LED ein, die ich sofort nach den 500 ms wieder ausschalte.
    Ohne dass ich an den Schaltern etwas mache, blinkt diese LED während des Programmablaufs schon mal auf; d.h. an einem der Eingänge hat sich also was getan.

    Wie sind da eure Erfahrungen?

    vG

    fredyxx

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    32
    Beiträge
    2.288
    Soweit ich die Zahlen im Hinterkopf habe sind die internen Widerstände SEHR ungenau und gehen von 10k - 80kOhm wirklich toll sind sie nicht aber wenn man sich unbedingt ein Bauteil sparen will reichen sie i.d.R. aus
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.180
    Dazu müssten die Leitungen zum Mäuseklavier schon sehr lang sein. Oder du produzierst in deinem Programmablauf irgend welche Störungen die sich an den Eingängen bemerkbar machen. Es könnte auch ein Fehler im Programm sein.
    Du siehst es gibt jede Menge Möglichkeiten für dein Phänomen. Ohne Kenntnisse von deinem Aufbau und Programm ist das ein stochern im Nebel.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.227
    Dazu müssten die Leitungen zum Mäuseklavier schon sehr lang sein. Oder du produzierst in deinem Programmablauf irgend welche Störungen die sich an den Eingängen bemerkbar machen. Es könnte auch ein Fehler im Programm sein. Du siehst es gibt jede Menge Möglichkeiten für dein Phänomen. Ohne Kenntnisse von deinem Aufbau und Programm ist das ein stochern im Nebel.
    ich habe auch 2 Megas schon seit ein paar Jahren aber so einen Fehler noch nicht beobachtet, wenn man die Taster unberührt lässt. Ich denke da auch eher an ein Kontakt- bzw. Wackelkontakt-, Kabellängen- oder Programmproblem, eventuell auch sehr starke elektromagnetische Störfelder in der Nähe, aber genaueres kann ich bei deinen Infos auch nicht sagen.

    ps,
    in meinen eigenen Programmen jage ich sämtliche Inputwerte (analog + digital) aber auch fast immer durch Filter (Lowpass oder gleitender Median von 3), um auch weitere (!) Störeffekte im laufenden Betrieb durch Prellen von Kontakten oder schwankende ADC Werte zu ent-rauschen und zu glätten, denn dann werden solche Störungen, wie du sie jetzt beobachtest hast, ständig unvermeidbar vorkommen. Dennoch wäre es schon sehr sinnvoll, deinen momentanen Fehler exakt zu lokalisieren.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235
    Hallo,

    Kommissar Zufall hat mir geholfen, den Fehler zu finden!!

    Ich hatte einen Schalter vom Mäuseklavier, den ich im Programm zZ noch nicht brauche, zwar auf Änderung überwacht, ihn aber weder als INPUT deklariert und schon gar nicht den Pullup-Widerstand eingeschaltet. Wenn der sich also was eingefangen hatte, hat er sofort die 500 ms, das Blinken der LED verursacht und das Drehen der Motore wurde unterbrochen.

    Trotzdem bin ich doch sehr überrascht, wie empfindlich so ein unbeschalteter Eingang auf Umweltbeeinflussung reagiert.

    Das Modell stand auf Kunststoffrädern auf einem Teppichboden, hatte keine Verbindung zum PC und wurde von einem Akku betrieben.
    Ich brauchte nur meinen Schuh vom Teppich zu heben und wieder auf den Boden zu setzen, oder mich mit meinem Schreibtischstuhl etwas zu bewegen und schon kam es meistens zu der Störung.

    Ich bin heil froh, dass das die Ursache war. Ich sah mich schon wild mit Entstörmaßnahmen rumexperimentieren.

    Zitat von HaWe
    in meinen eigenen Programmen jage ich sämtliche Inputwerte (analog + digital) aber auch fast immer durch Filter (Lowpass oder gleitender Median von 3), um auch weitere (!) Störeffekte im laufenden Betrieb durch Prellen von Kontakten oder schwankende ADC Werte zu ent-rauschen und zu glätten
    Trotzdem würde mich interessieren, wie das konkret aussieht.

    vG

    fredyxx
    Geändert von fredyxx (28.09.2016 um 18:38 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.227
    Zitat Zitat von fredyxx
    Zitat von HaWe
    in meinen eigenen Programmen jage ich sämtliche Inputwerte (analog + digital) aber auch fast immer durch Filter (Lowpass oder gleitender Median von 3), um auch weitere (!) Störeffekte im laufenden Betrieb durch Prellen von Kontakten oder schwankende ADC Werte zu ent-rauschen und zu glätten
    Trotzdem würde mich interessieren, wie das konkret aussieht.
    am einfachsten geht es mit dem Lowpassfilter; der merkt sich eine Art gleitenden Durchschnitt:

    du fragst in einer schnellen Schleife (z.B. alle 1-10ms) den Wert eines Ausgangs ab, z.B.

    Code:
     void loop() {
       float oldvar, fvar;
       int pinvar, pinNr;
    
       oldvar = fvar;
       pinvar = digitalRead (pinNr);
       fvar = 0.4*pinvar + 0.6*oldvar;
       pinvar = round(fvar);
       delay(5);
       //...
    }

    wenn z.B. bisher "0" anlag (also oldvar=0) und jetzt 1x "1" gemessen wurde, ergibt sich
    0.4*1 + 0 = 0.4
    round(0.4) = 0

    bleibt es ein einmaliger Ausreißer, wird der Wert also verschluckt, es bleibt bei 0.

    Kommt jetzt in der nächsten Abfragerunde aber nochmal eine "1" dazu, ergibt sich
    0.4*1 + 0.6*0.4 = 0.4 +0.24 = 0.64
    round(0.64) = 1

    wenn also erneut eine "1" anliegt, also quasi nach 2 Durchläufen "dauerhaft", dann kommt jetzt eine 1 heraus.

    Die Summe aus beiden Faktoren soll immer 1 betragen, also
    0.4 & 0.6
    oder 0.2 & 0.8
    oder 0.3 & 0.7
    oder 0.5 & 0.5 (entspricht arithmetischem Mittel)
    oder für analoge Werte auch z.B. 0.9 & 0.1 oder 0.1 & 0.9


    allgemein:

    Durchschnitt = a*aktuell + (1-a)*Durchschnitt, 0<a<1

    durch "Spielen" mit den Koeffizienten und testen kannst du den Filter für deine Anwendung darauf optimieren und Störungs-empfindlicher und schneller reagierend (größere a) oder Störungs-unempfindlicher und träger machen (kleinere a).

    Da du sowieso in den loops ein paar ms delays brauchst, fällt das bisschen float-Arithmetik auch absolut nicht ins Gewicht. Falls doch: per Integer mit 100 multiplizieren und das Ergebnis später wieder durch 100 teilen, ist aber nicht nötig bei dem bisschen Rechnerei.
    Geändert von HaWe (01.10.2016 um 16:16 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.227
    war das verständlich und hilfreich?

  8. #8
    Unregistriert
    Gast
    Verständlich? Ja! Interessant aber Fließkommarechnung nur zur Tastenabfrage frißt unangemessen viel Rechenzeit.
    Hilfreich eher nicht. Problem war ja schon gelöst, oder? Ein Danke wär es aber schon wert gewesen.

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    235
    Zitat Zitat von HaWe Beitrag anzeigen
    war das verständlich und hilfreich?
    Danke auf jeden Fall!

    Da ich es zZ nicht benötige, habe ich mich damit nicht sehr ausführlich befasst, habe es aber für den Fall, dass ich es mal brauche, gespeichert.

    vG

    fredyxx

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    09.10.2014
    Beiträge
    2.227
    ok, gerne.
    OT
    Nachdem in diesem Arduino-Unterform jedes unregistrierte ********* aus dem anonymen Off spammen und trollen und die Atmosphäre vergiften kann, werde ich dir künftig allerdings hier im Forum eher nur noch ausnahmsweise Hilfestellung geben. Ich hoffe, dass die admins und mods hier endlich Einsicht zeigen und hier ebenfalls eine Registrier / LogIn-pflicht für Posts einführen, um Spammer und Trolle zu identifizieren und notfalls zu sperrren. Zum Glück ist das ja auch nicht in allen Unterforen hier so ungeordnet.
    /OT
    Geändert von HaWe (01.10.2016 um 20:36 Uhr)

Ähnliche Themen

  1. HILFE - Stepper Motor Ansteuerung mit Arduino - Zieht sehr viel Strom
    Von DollyStepper im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 20.09.2015, 14:57
  2. Eingänge sind sehr empfindlich
    Von Blackaffe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 24.05.2011, 21:35
  3. Wie empfindlich ist der Ultraschallsensor?
    Von James C. im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 18.03.2009, 22:40
  4. Wie empfindlich ist der NE555?
    Von Mohles im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 31.10.2007, 14:08
  5. Interrupt ist zu empfindlich
    Von Fourstroker im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 02.03.2006, 11:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •