Forum: Compiler & IDEs PWM (servo) signal messen


von Christian Funck (Gast)


Angehängte Dateien:

Lesenswert?

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

von Hubert.G (Gast)


Lesenswert?

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.

von Christian Funck (Gast)


Lesenswert?

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 :-(

von Christian Funck (Gast)


Lesenswert?

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

von Christian Funck (Gast)


Lesenswert?

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

von DL4MCV (Gast)


Lesenswert?

is der MEGA8 jetzt hin?

von Christian Funck (Gast)


Lesenswert?

nene,funzt noch. habe glück gehabt :-D

von Michael F. (Firma: HTL Rankweil) (mik2412)


Lesenswert?

@ 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

von STK500-Besitzer (Gast)


Lesenswert?

1. Leichenschänder!
2. Such mal hier im Forum nach "Servo". Da wirst du genug Code finden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.