mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 3ms Filter für Digitaleingänge


Autor: Owen Senmeis (senmeis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

ich möchte einen 3ms Filter für Digitaleingänge im AVR einbauen. Wie 
kann das effizient gemacht werden? Man kann hier einfach 3ms warten, um 
zu sehen, ob der Eingangswert stabil ist, aber der Prozess wird 
blockiert. Vielleicht nur mit Interrupts?

Danke
Senmeis

Autor: Bertram S. (bschall)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer Interrupt das Polling der Eingänge betreibt... da blockt dann nix!

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interrupt auf 1ms stellen, in 3 aufeinanderfolgenden ISRs den Zustand 
prüfen, wenn stabil, dann Vorgang auslösen.

Autor: manateemoo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Simples Digitalfilter aber auch 3ms delay:
void ISR_all_300us(void)
{
  if ( true == InPort() )
  {
    if ( 10 > Ctr )  Ctr++;
    if ( 10 == Ctr) Result = true;
  }
  else
  {
    if ( 0 < Ctr )  Ctr--;
    if ( 0 == Ctr) Result = false;
  }
}

Bei einfachen Anwendungen wie Tasten einlesen reicht:
void ISR_all_3ms(void)
{
  Result = InPort();
{

Autor: Owen Senmeis (senmeis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wär mit diesem Code?
uint8_t di, di_old, digital_input;
ISR_1ms()
{
    if (di != di_old)  // Wert aktualisieren
    {
       di_old = di;
       counter = 1;
    }
    else
    {
       if (counter == 4)  // 3ms erreicht
       {  
         digital_input = di;  // neuen Digitaleingang melden
         counter = 0;
       }
       else
       {
          if (counter != 0)  // Ist ein Änderung vorgekommen?
          counter ++;
       }
    }
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.