RC Signal wackelt

OP #720446
Hallo,

ich werte mir einem ATmega8 ein PPM RC Signal aus.

Externer Interupt, steigende Flanke:
Timer0 mit Vorteiler 256 start
Externen Interupt auf fallende Flanke setzen

Externer Interupt, fallende Flanke:
Timer stop
Pulslänge = Timerwert
Externen Interupt auf steigende Flanke setzen


Im Main frage ich die Pulslänge ab:
If (Pulslänge < 70)
LED1 an
..
If (Pulslänge >= 70 && Pulslänge < 90)
LED2 an
..
If (Pulslänge >= 90 && Pulslänge < 110)
LED3 an
..


Wenn der Puls nun aber genau 70 oder 90 an Wert hat,
flackert die LED hin und her, da der Puls zwischen 69 und 71,
bzw. zwischen 89 und 91 "wackelt".

Wie kann man das wackeln beseitigen, bzw. ausblenden?

Kann man so abfragen:
If (Pulslänge < 65)
LED1 an
..
If (Pulslänge >= 75 && Pulslänge < 85)
LED2 an
..
If (Pulslänge >= 95 && Pulslänge < 105)
LED3 an
..

Also quasi die 10 Werte von 65-74 und 85 bis 94
garnicht beachten?

Oder wie macht man es sonst, wenn Werte in einem bestimmten Bereich 
flackern, aber man trotzdem einen eindeutigen Schaltpunkt haben will?

Gruß Toby
Gast
mehrere Ansätze die sich auch kombinieren lassen.

1. Filtern ==> mehrer Meßwerte zusammenfassen und daraus den 
resultierenden Wert bilden, der in der IF Abfrage genutzt wird. Es gibt 
viele Filtermöglichlickeiten die sich in Rechenaufwand, Rambedarf, 
Wertigkeit der einzlenen Werte, Schnelligkeit,...... unterscheiden. Die 
einfachste Möglcihkeit ist eine Mittelwertbildung über X- Werte.

2. Ein Toleranzband verwenden. Das heißt die Werte von Schaltpunkt +-x 
werden nicht beachtet.

3. Hysterese verwenden. Beispiel: schaltpunkt 70: Wert ist > 70 und 
geschaltet wird wen der Wert 69 unterschritten hat. Der Wert < 70 und 
geschaltet wird wenn der Wert 71 überschritten hat.

Was für deine Anwendung der günstigste Wert ist, musst du entscheiden, 
da wird dir niemand helfen können, weil die Rahmenbedimgungen nicht 
bekannt sind.

Zum ermitteln der Pulsweite, wäre eine "Capture&Compare Unit" ( heißt 
bei jedem µC hersteller anderst) günstiger, weil die Zeitmessung dort in 
Hardware realisiert wird und keine Interruptlatenzzeiten als Fehler 
hinzukommen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.