PWM (servo) signal messen

Gast #365367
Hi!
Ich möchte ein Servo-Signal vom Modellbau-Empänger mit meinem mega8
messen. dazu habe ich Programm gemacht (Anhang), welches das Signal mit
Interrupts an INT0 und INT1 und dem Timer0 messen soll. Den
wert(signallänge) sende ich dann mal als Test (mit Uart) an den PC.
Doch leider kommt nur Unsinn raus: 86,32,61,67,40,97,40...... u.s.w.
dabei müsste das signal(1-2ms) bei 8MHz/256 höchstens etwa 70-20 Takte
lang sein. Wo ist der Fehler? rauscht ein Servosignal stark?


Zum Programm:
INT1 hat eine steigende Flanke, soll also bei beginn des PWM-high
signals den start der messung übernehmen. in diesem interrupt setzte
ich den 8bit timer auf null; nachher schalte ich den Interrupt für den
INT1 aus, den für INT0 ein. Interupt1 fertig.
INT0 hat eine fallene Flanke, soll bei Ende des High-Signals loslegen:
Schaltet den Interrupt für INT0 aus, für INT1 ein und liest den wert
von des Timers aus, sendet ihn per Uart an den PC.Interupt0 fertig.

bitte hilfe, bin für alles dankbar, auch Vorschläge wie ich das sonst
realisieren könnte.
Grüsse
Christian
Angehängte Dateien:
Gast
Ich weiss nicht warum du INT0 und INT1 verwendest. Einer würde es doch
auch tun.
Mein vorschlag wäre so:
INT0 auf steigende Flanke stellen
Timer auf 0 stellen
Bei Interrupt Timer starten
INT0 auf fallende Flanke stellen
Bei Interrupt Timer stoppen, auslesen,
INT0 auf steigende Flanke stellen usw.

Eine weitere Möglichkeit wäre wenn vorhanden den ICP zu verwenden.
Ob dir die Auflösung mit dem 8bit Timer fein genug ist musst du selbst
entscheiden.
Gast
Danke :-),
habe mir auch schon gedacht dass ein Pin reichen würde, aber würde das
etwas an der Sache ändern?.
Allerdings finde ich es doch ziemlich komisch, dass so willkürliche
werte dabei rauskommen. irgendetwas kann da ja nicht stimmen :-(
Gast
aslo: ich habe jetzt mal meinen 2ten mega8, der ein servo signal
erzeugt, als "empfänger-ersatz" am INT1 angeschlossen und siehe da,
es funktioniert; die Signallägen werden ordnungsgemäss gemessen und
ausgegeben. Das Programm funktioniert also.
Folglich liegt das Problem beim empfänger. der gibt doch ein PWM-signal
1-2ms high, 20ms low aus, oder?
Habt ihr irgendwelche Ideen weshalb der empfänger solchen schwachsinn
produziert? Habe leider kein Oszi um das signal zu messen, aber die
Servos funktionieren gut damit.
Grüsse
Christian

PS: habe jetzt das Programm wie Hubert.G vorgeschlagen hat geändert,
dass nur noch 1pin benötigt wir. Danke :-D
Gast
UHHHHHH ARGGGHHHHH :!:::::!!!!!!
MIST !!!!
Da habe ich trottel doch tatsächlich übersehen dass die empfänger
spannung höher war als die vom mega8. jetzt funktioniert alles:-P
(Firma: HTL Rankweil)
@ Christian Funck

ich muss eine ähnliche anwendung realisieren und bin aber ein neuling 
auf dem Mikrcontrollergebiet.

kannst du deshalb den kompletten code veröffentlichen? würde mir sicher 
weiterhelfen.

mfg Michael Fleisch

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.