PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoimpulse einlesen und ausgeben



moelski
15.08.2006, 08:21
Moin !

Da es nicht mehr so ganz in den alten Fred passt, fange ich mal einen neuen an. Ich hoffe das ist so ok. Wenn nicht ... Öhm ... Sorry.

Also ... Es geht immer noch um die Sache mit den Servoimpulsen. Ich möchte folgendes erreichen:
- einen Servoimpuls messen
- 1-2 Servoimpulse ausgeben
- das Ganze möglichst genau
- µC ist bei mir ein Mega88 an 8 MHz

Was ich bis dato rausgefunden habe ...
- der PulseIn Befehl ist zwar verwendbar, liefert aber nur eine unzureichende Genauigkeit. Bei mir waren es ~90 Schritte für ein Servosignal von 1,1-1,9ms. Ausserdem liefert der Befehl sofort andere Ergebnisse, wenn man die Servo Routinen von Bascom nutzt.
- der Servo Befehl ... Zwar nutzbar, aber auch nicht wirklich gut. Er beeinflusst z.B. (wegen der Interrupts ?) den Pulsein Befehl und verringert dessen Auflösung nochmals ... Ausserdem ist die Auflösung der Servoschritte nicht wirklich gut. Ein normales Servo hat nunmal 256 Schritte. Ob das alle umsetzen sei dahingestellt. Jedefalls kriegt man das mit dem Servo Befehl nur unzureichend hin.

Wie könnte man die Sache lösen ...
- Die Messung des Servoimpulses könnte man z.B. mit dem Timer 1 erledigen. Dazu könnte man die Capture Input Unit nutzen. Nachteil ... Der Timer1 wird mehr oder minder verschwendet.
- Die Ausgabe der Servosignale könnte Timer 0 bzw. Timer 1 übernehmen mittels PWM.
- Ideal wäre wenn beide Funktionen mit dem Timer 1 abgedeckt werden könnten. Also erst Impuls messen und dann die PWM erzeugen.

Meine Fragen ... :-s
Ich lese mir nun schon eine ganze Weil die Sachen mit den Timern durch, aber irgendwie kriege ich den Dreh nicht raus (weiss meist nicht wie ich die Infos aus dem Datenblatt in Bascom umsetzen kann). Ich würde mich also freuen wenn mir jemand mit etwas Code helfen könnte.

1) Wie kann ich die Länge des Servoimpuls mit der Capture Input Unit des Timer 1 messen?
2) Wie kann ich mit Timer 0 die PWM Servo Signale erzeugen? Mit welcher Genauigkeit / Auflösung wäre das überhaupt möglich? Ist Timer 0 dafür überhaupt sinnvoll?
3) Ist es möglich (und wenn ja wie) das ich Timer 1 zum messen und Erzeugen der PWM nutze? Weil Zeit genug wäre ja prinzipiell nach dem Messen des Impulses.

Vielleicht gibt es auch noch andere Möglichkeiten Servoimpulse auszugeben und ein Servoimpuls zu messen!?

Würde mich jedenfalls freuen, wenn mir jemand mit etwas Code helfen könnte. :roll: Und Sorry wenn ich mit dem Thema im moment etwas nerve ... :oops:

moelski
16.08.2006, 07:18
Moin !

Hat sich alles erledigt. Habe es gestern Dank einiger guter Codebeispiele aus dem RCLineForum hinbekommen.

JanB
16.08.2006, 11:16
Hallo,

Hat sich alles erledigt. Habe es gestern Dank einiger guter Codebeispiele aus dem RCLineForum hinbekommen.

Wie wäre es, wenn du deine Lösung hier kurz vorstellst,
da sind sicher auch andere dran interessiert.

Gruß Jan

moelski
21.08.2006, 08:24
Moin JanB,

tja das ist so ne Sache. Die Infos habe ich aus meinem Stammforum: www.rclineforum.de .
Dort unter Bascom findet man den ganzen Kram. Einfach mal nach Servoroutine mittels Timer 0 suchen. Und das Impulsmessen findet man da auch.
Da ich nicht weiss ob ich den Code einfach hier posten darf (ist schliesslich nicht von mir), ist das so wahrscheinlich die bessere Lösung.

Wenn jemand Fragen hat wie ich das zusammengebaut habe, kann er mich gerne kontakten.