Bei 10 µS und 8 MHZ vergehen bei der Bascom-Servo-Methode
https://www.roboternetz.de/wissen/in...ide-Code#SERVO
gerade mal 800 Cycles von einem Intgerrupt zum nächsten. Das ist eine knappe Sache, wenn noch was anderes zu tun ist.
Hallo zusammen,
nach langer Zeit beschäftige ich mich mal wieder mit meinen Megas. So nun spiele ich gerade ein wenig mit dem Befehl "Config Servo".
Soweit ist alles klar, nur eins ist mir nicht ganz verständlich. Warum brauche ich so "krumme" Servowerte? Wenn ich das richtig verstanden habe bastelt Bascom anhand der $crystal=XX, dem Preload = 10 die Timereinstellung so, das der Servowert eigentlich doch so um 100 (=1ms), 150 und 200 liegen sollte.
Ich habe schon mit versch. Takten und $crystal Werten gespielt. Die Werte sind immer "krumm".
Ich benutze:
1. Mega8
2. Internen Oszilator mit 8Mhz
3. Ein Graupner Digi-Servo DS361
4. Das ganze auf nem STK500
5. Terminalprogramm auf PC
Mit den paar Codezeilen hier, (nur zum Spielen) gebe ich übers Terminal die Werte fürs Servo vor.
Framesize; HW-Stack usw. habe ich mal weggelassen.
Die Werte sind immer so entstanden: Ich habe mit den Endausschlagswerten so lange gespielt, bis das Digi-Servo ausgestiegen ist. Die Werte sind also die Maximalwerte die das Servo noch verarbeitet.Code:$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Dim Servowert As Byte Dim Links As Byte Dim Mitte As Byte Dim Rechts As Byte Dim Rc_ch1_out As Word Dim Rc_ch1_in As Word Config Pinb.0 = Output 'LED Config Pinc.0 = Input 'Servo in Config Pinc.2 = Output 'Servo out Config Servos = 1 , Servo1 = Portc.2 , Reload = 10 Enable Interrupts Portb.0 = 0 Links = 132 Mitte = 87 Rechts = 43 '+++++++++Werte bei 3.6864 Mhz und Preload =10++++++++++++++++ 'Links = 97 'Mitte = 66 'Rechts = 36 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Servo(1) = Mitte Do Pulsein Rc_ch1_in , Pinc , 0 , 0 Print "R/C- Impuls Input:" ; Rc_ch1_in Input "Bitte Servoinput (132- 43 bei 8Mhz Prozessortakt) : " , Servowert Servo(1) = Servowert Loop End
Gibt es einen Trick um "saubere" Werte zu bekommen die so in etwa an die 100, 150, 200 kommen? Die Auflösung ist zudem jetzt doch recht bescheiden. Kann man die mit dem Preloadwert (auf 5) noch erhöhen? Ich möchte in Zukunft ein wenig mit Servomanipulation arbeiten. Also die Signale vom Empfänger verändern und je nach dem manipuliert an die Servos weiterleiten.
Merci schon mal
Gruß
Markus
Bei 10 µS und 8 MHZ vergehen bei der Bascom-Servo-Methode
https://www.roboternetz.de/wissen/in...ide-Code#SERVO
gerade mal 800 Cycles von einem Intgerrupt zum nächsten. Das ist eine knappe Sache, wenn noch was anderes zu tun ist.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi PickNick,
danke für die Antwort. Dann ist es, wenn man etwas komplexere Aufgaben zu erledigen hat, nicht sinnvoll die Bascom Servo Methode oder eine Messmethode mit Interrupts zu verwenden?
Habe auch nachgedacht das über den mitlaufenden Timer zu machen der bei Flankenwechsel abgefragt wird. Das ganze dann über einen Atmega88 mit Pin Change. Glaube das ist sicher der bessere Weg, oder?
Kein Interrupt belegt, der Timer ist auch noch für andere Sachen zu gebrauchen und die Messungen werden zuverlässiger.
Hat der µC ausser der Impulsbearbeitung noch was (zeitkritisches) zu tun ?
Wenn nicht, ist die von dir angedachte Methode sicher am besten, denk' ich.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Na ja,
er soll im Endausbau eine kleine autom. Fluglagensteuerung übernehmen.
Er muss bis zu 4 R/C- Kanäle einlesen,
Sensoren abfragen, (z.B. Geschwindigkeit, Höhe usw. )
und nach Bedarf die vier R/C Kanäle an- bzw übersteuern. Also entweder die Impulse "durchschleifen"oder eigene saubere R/C Impulse ausgeben.
Wird noch ne Menge Arbeit, ich möchte mich im Vorfeld nur auf ein sinnvolles Grundgerüst einlassen und mir nicht selbe ein Bein stellen.
uiuiui. Naja, der Weg ist das Ziel
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
so ist es! Erst mal die vielen kleinen Teile einzeln ausprobieren und dann schön langsam Stück für Stück zusammenführen.... so habe ich es mir zumindest gedacht.
Was denkst Du, ist die Vorgehensweise mit der R/C- Signalausleserei sinnvoll mit der Geschichte ständig laufender Timer und PinChange? Ich denke schon.
Habe bisher mit der Servosignal - Geschichte nix gemacht. Sonst schon (fast) alles....
Ein ständig laufender Time/Counter ist sicher gut, mach ich auch immer. Denn für fast alles braucht man eine Time-Line.
Und bei PinChange brauchst du nur die Zeit übernehmen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hi M@rkus,
hast Du schon mal PWM in Betracht gezogen? Ich weiß, "machs-doch-ganz-anders" - Lösungen sind immer doof, aber Hardware-PWM besticht durch zwei Vorteile: Es ist sehr fein abstufbar, und es kostet keine Rechenlesitung. Mit einem Mega88 könntest Du 4 Kanäle nutzen und hättest trotzdem noch einen Timer frei, um die Eingangssignal-Längen zu messen.
Ich habe vor einem Jahr mal für einen Modellflieger-Kollegen etwas gelötet und programmiert, das qualitativ ähnlich war wie Dein Problem (wenn auch mit weniger Kanälen - dafür läuft´s auch mit einem Tiny25):
Mit einem senderseitigen Kippschalter (ein-aus) sollte das Hauptfahrwerk einer Scale-ME109 ein- und ausgefahren werden. Im Modell war es dafür notwendig, dass erstens ein Servo das Fahrwerk ein- bzw. ausfährt, wobei nach einem bestimmten Teilweg eine kurze Pause gemacht werden musste (für die Fahrwerksklappen). Danach musste zweitens ein weiteres Servo die Ver- bzw. Entriegelung übernehmen - nicht zu früh, aber auch nicht zu spät...
Und was soll ich sagen - sie fliegt noch heute
Und PWM??Habe bisher mit der Servosignal - Geschichte nix gemacht. Sonst schon (fast) alles....
Gruß,
Daniel
Hallo Daniel,
PWM - Ja daran habe ich auch gedacht und nein ich habe damit noch nicht wirklich viel damit gemacht.
Das Ganze wird eine automatisierte, Speedabhängige Klappensteuerung mit Throttle- und Höhenruder- Kompensierung. Uff.... da hab ich mir was angetan....
Das Flußdiagramm steht, jetzt muss ich mir schön langsam Gedanken machen wie ich die R/C Signale auslese und zum Schluß wieder ausgebe.
Das ganze muss dann noch einen "Notaus" haben, per Schalter am Sender komplett wegschaltbar. Auch Hardwaremäßig, alle R/C Signale 1 zu 1 an die Servos.
Wir ein größeres und längeres Projekt.........
Lesezeichen