Ähm...ich mache es sehr kurz: das hat rein gar nichts mehr mit Entprellen zu tun, wonach Du im ersten Posting gefragt hast. Du bildest Mittelwerte aus den A/D-Ergebnissen; wenn es dann beim Tastendruck prellt, bekommst Du einfach total verkehrte Resultate. Hast Du die Idee mit dem Entprellen ganz aufgegeben?
also eine gleitende Mittelung (moving average) würde sich sehr wohl zum entprellen eignen, sowas ist nämlich im Allgemeinen auch als Tiefpass bekannt der die hochfrequenten Anteile (Prellen) einfach wegfiltert. Wenn man die Grenzfrequenz sinnvoll wählt, und bei der weiteren Auswertung noch eine Hysterese mit einbaut, sollte das eigentlich recht zuverlässig funktionieren.
Allerdings, newbie1982, ist das so leider noch keine gleitende Mittelung.
Ich würde es etwa so implementieren (dient nur als Beispiel)
So hast du in AD_Result immer den aktuellen gefilterten Wert, und kannst im Hauptprogramm ganz bequem darauf zugreifen.Code:#define AD_EXP 4 //Mittelung über 16 Werte #define AD_BUF_LEN (1 << AD_EXP) volatile uint16_t AD_Result; SIGNAL(SIG_ADC) { uint8_t n; static uint8_t Buffer_index = 0; static uint16_t AD_Buffer[AD_BUF_LEN]; // Buffer zyklisch beschreiben AD_Buffer[Buffer_index++] = ADCW; Buffer_index = Buffer_index % AD_BUF_LEN; // Mittelung ADC_Result = 0; for(n=0;n<AD_BUF_LEN;n++) AD_Result += AD_Buffer[n]; AD_Result >>= AD_EXP; }
In diesem Beispiel wird jeweils über 16 Werte gemittelt, ob das sinnvoll ist oder nicht, hängt vom ADC-Takt ab. Wenn dieser bekannt ist, kannst du die Grenzfrequenz des TP berechnen (im Prinzip könnte man da problemlos auf 10Hz runter gehen, wer muss schon 10x pro Sekunde auf so eine Taste drücken?).
PS: wenn der Buffer bei der richtigen Grenzfrequenz zu groß wird, würde ich ihn als globale volatile Variable auslagern, und ihn in der ISR zwar zyklisch beschreiben, jedoch die Mittelung lieber im Hauptprogramm durchführen (damit die ISR nicht zu lange braucht). Diese Mittelung könnte man ja dann auch in eine nette kleine Funktion verpacken, irgendwas wie "getadc()" oder so, dann ist es auch sehr bequem zu nutzen.
Lesezeichen