-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Tasten mit ADC einlesen und mit RC-Tiefpass entprellen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311

    Tasten mit ADC einlesen und mit RC-Tiefpass entprellen

    Anzeige

    Hallo Experten,
    ich weiß das Thema "Entprellen" gab's schon recht häufig, aber meistens bezog sich das immer auf TTL-Logik.
    Ich muss Pins sparen und wollte daher sowas wie ne "Ein-Draht-Tastatur" bauen. Naja es handelt sich dabei um 4 Taster, die so über Widerstände verdrahtet sind, dass durch den jeweiligen Druck eine gewisse Spannung erzeugt (aufaddiert) wird.
    Okay das ist nicht das Problem.
    Es ist aber bekannt, dass Tasten prellen.
    Könnte ich nicht einfach das Prellen mit nem brutalen "0Hz-Tiefpass" rausfiltern? Okay, die Flanke ist dann nicht mehr steil, aber das macht ja nicht wirklich was, weil ich würde dann gewisse Grenzen einbauen, wann eine Taste als gedrückt gilt und wann nicht. Z.B.
    1) 0V keine Taste gedrückt
    2) 1,24..1,26V = Taste 1 gedrückt
    3) 2,49..2,51V = Taste 2 gedrückt
    4) 3,74..3,76V = Taste 3 gedrückt
    ...

    Habe ich einen denkfehler?
    Grüße Simon

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    17.04.2006
    Beiträge
    2.193
    Naja, wenn Du Taste 3 drückst, erscheint das als kurz 1- kurz 2- 3.
    Du müsstets die Gültigkeit jedes möglichen Zustandes auch noch über die Zeit ermitteln.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.05.2007
    Beiträge
    109
    und was wenn du 1und2 drückst?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Diese Ein-Draht-Tastatur wird gern genutzt, z.B. auf dem C-Control 1 Erweiterungsboard oder auf dem RN-Control 1.4 (ältere Versionen bestimmt auch).

    Du machst einfach folgendes: Du liest immer 64 Werte ein, und bildest dann das mathematische Mittel. Dabei kannst Du auch auf eine Division verzichten, wenn Du ein Vielfaches von 2 benutzt, dann kannst Du einfach shiften. Bsp:

    8 Werte addieren, shift 3 mal nach rechts. Dann hast Du den Durchschnittswert der 8 Werte. Bei 64 Werten wäre es dann eben 6 mal.

    Dadurch kannst Du Prellungen sehr einfach "entwerten", da sich der "dauerhafteste" Wert durchsetzt. Und keine Angst, die Zeit ist noch ausreichend, das man nur kurz drücken muss, um einen dauerhaften Wert zu erreichen. Ansonsten auf 32 Werte runtergehen.

    Beachten musst Du allerdings, dass Du in dem Fall unbedingt mit 16 Bit rechnen musst.

    @MSN: Das kannst Du über 2er-Potenzen lösen...

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Hi,
    danke für die Tipps. Ja das mit den mehrfach wandeln und Mitteln schwärmte auch in meinen Kopf herum. Das Prellen der Schalter im Hochfrequenten Bereich wollte ich eben mit diesem Tiefpass abfangen.
    thewulf: meinst du den brauch man bei deinem Verfahren noch? Eine zusätzliche Sicherheit wär's ja schon und viel verzögerung + Hardwareaufwand kommt ja nicht dazu...
    Grüße Simon

  6. #6
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Aud den analogen Tiefpass kann man verzichten. Ein Prellene rkenn man daran das der AD Wert schwankt. Eine Gültige Taste hat man also nur wenn sich die letzten (z.B. 4 Werte über 10 ms) Werte des AD Wandlers wenig unterscheiden.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von PCMan
    Registriert seit
    05.08.2006
    Ort
    Munich
    Beiträge
    311
    Würde das dann so aussehen: Also ich hab einen Timer laufen - bei der entsprechenden ISR werden dann die zB 64 Werte genommen und gemittelt (shift). Wenn die ISR 4 mal aufgerufen wurde und die gemittelten Werte in nem definierten Bereich liegen kann ich von nem tastendruck ausgehen?
    Danke
    Simon

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Bei nur 4 Tasten braucht man eigentlich gar nicht viel mitteln, da reicht die normale Auflösung des AD-wandlers, es sei denn man kriegt viel 50 Hz Störungen rein.
    Normalerweise sollte es reichen in einen Interrupt immer die Gruppen von 4 oder 8 Werte in einen puffer zuschreiben. Wenn der Puffer voll ist kann man testen ob die Differenzen kleine sind (z.B. Differenz der nachbarn und 1.ter und letzter Wert). Wenn die Differenzen alle klein sind, kann man wohl von einem Stabilen gültigen wert ausgehen. Ob man dann den letzten Wert oder den Mittelwert nimmt sollte relativ egal sein. Als Interrupt könnte man einen Timer oder auch den AD-ready interrupts nehmen.

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.07.2004
    Ort
    Südhessen
    Beiträge
    1.312
    Wenn Du 64 Werte (was SEHR VIEL ist) nimmst, dann ist der Wert bereits "fertig genug", da brauchste keine 4 Werte mehr.

    Vom Prinzip her so: (Pseudocode)

    Code:
    while (1)
    {
        werte = 0;
        for (1 to 64)
        {
            werte += get_ADC();        
        }
        werte >>= 6;
        mache_was_mit_dem_wert(werte);
    }

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    @thewulf: Der Mittelwert von 64 Werten gibt schon relativ viel oversampling, hilft aber nicht dagegen das sich der Wert gerade ändert und man so einen mittelwert kriegt, der nicht zu der gerade gedrückten oder losgelassennen Taste passen muss. Das mittel von 64 Werten könnte gut gegen 50 Hz Störungen helfen, aber nicht gegen Prellen.

    Um sicherzustelln , das man nicht gerade eine sich ändernde Spannung hat muß man wenigstens 2 Spannungswerte vergleichen. Nur wenn man mehrmals hintereinander etwa die gleiche Spannung mißt, kann man sicher sein, dass das es ein gültiger wert ist. Die Messungen sollten auchnicht zu schnell erfolgen, ein paar ms sollten schon dazwischen sein, um Prellen zu erkennen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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