Hallo, ein frohes neues Jahr wünsche ich. Ich bin auf der sucghe nach einem C Code um die Fersteuersignale meiner Futaba Robbe Anlage auszuwerten. Z.B. möchte ich eine LED schneller oder langsamer blinken lassen, je nachdem, wie weit ich den Prop Kanal der Anlage steuere. Oder per PWM heller oder dunkler leuchten lassen. Leider habe ich bis jetzt nichts gefunden. Wer hilft mir weiter? Gruß Toby
>>Wer hilft mir weiter? ich würd mal schwer auf google tippen >>Leider habe ich bis jetzt nichts gefunden. wonach hast du denn gesucht? Bzw. worin liegt dein Problem? Der Servoimpuls kommt alle 20ms und ist zwischen 1 und 2 ms lang (1,5ms entspricht Mittelstellung). Miß die Dauer des Eingangssignals, "verrechne" die Dauer entsprechend deiner Anwendung und steuere deine Ausgänge. grüße leo
Hi, danke für die schnelle Antwort, aber gibt es nirgends ein C Code Beispiel ? Ach, ich habe einen ATmega8 und programmiere mit WinAVR, GCC. Gruß Toby
hmmh wozu so aufwaendig?? kann man nicht einfach einen Frequenzteiler aufbauen, wenn die LED immer blinken soll und es nur um die geschwindigkeit geht?? sollte doch machbar sein... Gruss Jens
Hi, es geht mir nicht darum, "nur" eine LED in verschiedenen Geschwindigkeiten blinken zu lassen. Da ich recht Unerfahren in Sachen Mc's bin, möchte ich einfach bei kleinen Dingen anfangen, um später mal meine Ideen zu verwirklichen. Ich würde gerne einfach mit dem Fernsteuersignal verschiedene Dinge steuern, - LED schneller/langsamer blinken lassen - mehr oder weniger LEDs an bei verschiedenen Steuerausschlägen - einschalten mehrerer LEDs nacheinander - usw. aber dazu brauch ich ja nunmal erst die Auswertung des Signals. Gruß Toby
Tipp: Fang mit noch kleineren Dingen an. Ein Fernsteuersignal auszuwerten ist als Anfänger nicht so trivial. Zwar ist es einfacher, fertigen Code irgendwo abzuschreiben, aber so richtig verstanden hat man ihn nicht, und das Erfolgserlebnis, wenn man es dann doch geschafft hat, ist umso größer... Auch, wenn hier immer wieder erzählt wird, C-Code sei portierbar - er ist es nicht. Also nutzt Dir ein C-Code für den MCS-51 nichts auf einem Mega-8... Ich würde in dieser Reihenfolge vorgehen: LED zum Leuchten bringen, LED blinken lassen, Eingänge abfragen, und dann auch mal die Spezialfunktionen des Timer1 anschauen.
Hallo Tobias, schon mal in der Codesammlung nach Servo gesucht? http://www.mikrocontroller.net/forum/list-4-1.html?filter=servo Da solltest Du alle Grundlagen finden. HTH, Klaus http://www.mikrocontroller-projekte.de
Hallo thkais, sooo unerfahren bin ich nun auch wieder nicht. Ich kann wohl schon eine LED per Timerüberlauf ein und aus schalten. Oder auch, durch setzen eines DDR Bits, eine LED dauernd zum leuchten bringen. Mir geht es halt nur um ein paar Tips, wie und womit ich die Signale einlesen und auswerten kann. Außerdem suchte ich ein C Code beispiel für den Mega8 und den WinAVR Compiler. Gruß Toby
Servosignal auf Int-Eingang. Steigende Flanke startet zwei Timer (einer für Messung, so skaliert dass 2ms z.B. 200 ergibt, der zweite so dass 255 nach ca. 25ms erreicht ist) und konfiguriert Int auf fallende Flanke. zweiter Int nach weniger als 1ms -> Impuls ungültig -"- nach 1..2ms -> gültiger Impuls zweiter Timer löst int aus -> Impuls zu lang -> ungültig und int wieder auf steigende Flanke konfigurieren. Den dritten Timer kannst du als Zeitbasis für die Blinklichter verwenden. grüße leo
Würde Dir gerne weiterhelfen - allerdings nur in Assembler, sorry. Mit den Tipps von Leo9 müßtest Du aber weiterkommen.
Hallo, und danke für die Antworten erstmal. Aber irgendwie bekomm ich das nicht hin.Anliegend schonmal meine Timerkonfiguration. Viellecht ist das ja schon mal richtig. Gruß Toby
Hallo Tobias, ich kann leider auch nur mit Assembler dienen. In meiner Bastelkiste (http://www.voidpointer.de/avr/index.html ganz unten) habe ich beschrieben, wie das PPM-Signal des Empfängers mit einem ATMega8 auszuwerten ist. Dazu wird der 16bit-Timer verwendet. Die Ansteuerung der LED etc. musst Du allerdings noch programmieren. Gruß, Achim.
Hallo, ich habe nun nach reichlich Forenblätterei und einiger Hilfe, die ich hier gefunden habe, einen C-Code erstellt, um mehr oder weniger LED's leuchten zu lassen, bei verschiedenen Impulslängen meines RC-Emfängers. Die LED's sind aber invertiert angesteuert, da das STK500 die lED's gegen VCC hat. Für weitere Tips und Anregungen bin ich offen. Gruß Toby
Hallo, ich nochmal, die Max Pulsdauer ist bei 2 ms == 68 und nicht 62, wie ganz oben im Code angegeben. Gruß Toby
Achim, beim Mega8 kannst Du den Interrupt auch auf beide Flanken stellen. Spart ein wenig Arbeit in der ISR. Axel
Axel, OK, ich kann also sowohl bei steigender als auch bei fallender Flanke einen Interrupt haben. Aber ich verstehe noch nicht ganz, was mir das im konkreten Fall helfen könnte. Das genannte PPM-Signal definiert ja einen Servo-Impuls nicht über die Länge, sondern den Abstand zwischen zwei Flanken. Also: __ __ ____ _ __ PPM: _ _ _ Servo1:___ _________ ___ Servo2:______ ____ usw. Achim.
Hallo, Achim, woher bekommst du das PPM Signal, (___-____--_____---__) in dem die Servos hintereinander einen High>Low Puls bekommen? Aus einem Empfängerkanal für das Dementsprechende Servo kommt doch "nur" ca. alle 20ms ein Impuls für das demetnsprechende Servo. (___-________________), Kanal1 (________--__________), Kanal2 (_______________---__), Kanal3 ... ... Oder versteh ich da jetzt was nicht? Gruß Toby
> Achim, woher bekommst du das PPM Signal, Oh, sorry. Hätte ich vielleicht noch mit dazu schreiben sollen. Die Fernsteuerung setzt die einzelnen Steuersignale zu dem sog. PPM-Signal zusammen und sendet es. Manche Empfänger geben dieses Signal dann wieder nach aussen weiter. Bei meinem Graupner C19 liegt es am unbenutzten 3. Pin des Batterieanschlusses an, muss aber noch verstärkt werden. Dieses benutze ich dann als Trigger. Für ein anderes Forum hatte ich das neulich dokumentiert. Vielleicht hilft die folgende Seite weiter: http://www.voidpointer.de/tmp/ppm.html Ich weiss nicht, ob Robbe / Futaba auch das PPM-Signal verfügbar macht, habe mal sowas gehört. Kannst ja mal mit nem Oszi nachschauen. Gruß, Achim.
Das ist doch der Demodulator-Ausgang, müsste also verfügbar sein, auch wenn es nicht extra herausgeführt ist. ...
Der Demodulatorausgang ist selbst bei meiner billigen 2Kanal Anlage herausgeführt. Ich habe mir das eben mal angesehen: rutscht der 2.Kanal dichter ran, wenn der erste Kanal nur eine Impulsdauer von 1000uS hatte, oder bleibt ein Zeitfenster für jeden Kanal von 2ms reserviert? Wenn dem nicht so ist, also die Impulse der nächsten Kanäle an den vorigen ohne Pause anknüpfen, reicht natürlich die Steigende Flanke.
Wenn die Pulsweiten der Servos kleiner werden, rücken die Flanken enger zusammen. Sieh lustig aus auf dem Oszi ;-) @HanneS: Ja klar, an den Demodulatorausgang ist auf jeden Fall ranzukommen. Aber ich habe lieber eine Black Box mit rausgeführtem Signal, als in dem Empfänger herumlöten zu müssen.
Die Flanke reicht, denn die Tastimpulse sind mit typisch 0,5ms immer gleich. Ein Telegramm mit lauter 1ms-Werten ist also schneller fertig, es bleibt eine größere Pause bis zum nächsten Kanal 1. ...
@Achim: Das ist wohl wahr... Das erfreut aber nicht jeden Hersteller. Denn der möchte nicht so gern, dass man seine billige Zweikanalanlage mit eigenen (vielkanaligen) Encodern und Decodern betreibt. Der möchte lieber seine Mehrkanalanlagen verkaufen. ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.