Forum: Mikrocontroller und Digitale Elektronik C Code Modellbau


von Tobias Tetzlaff (Gast)


Lesenswert?

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

von leo9 (Gast)


Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Jens123 (Gast)


Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von thkais (Gast)


Lesenswert?

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.

von Klaus Leidinger (Gast)


Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von leo9 (Gast)


Lesenswert?

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

von thkais (Gast)


Lesenswert?

Würde Dir gerne weiterhelfen - allerdings nur in Assembler, sorry.
Mit den Tipps von Leo9 müßtest Du aber weiterkommen.

von Tobias Tetzlaff (Gast)


Angehängte Dateien:

Lesenswert?

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

von Achim Walther (Gast)


Lesenswert?

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.

von Tobias Tetzlaff (Gast)


Angehängte Dateien:

Lesenswert?

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

von Tobias Tetzlaff (Gast)


Lesenswert?

Hallo,

ich nochmal,

die Max Pulsdauer ist bei 2 ms == 68 und nicht 62,
wie ganz oben im Code angegeben.

Gruß Toby

von AxelR. (Gast)


Lesenswert?

Achim,
beim Mega8 kannst Du den Interrupt auch auf beide Flanken stellen.
Spart ein wenig Arbeit in der ISR.
Axel

von Achim Walther (Gast)


Lesenswert?

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.

von Tobias Tetzlaff (Gast)


Lesenswert?

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

von Achim Walther (Gast)


Lesenswert?

> 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.

von ...HanneS... (Gast)


Lesenswert?

Das ist doch der Demodulator-Ausgang, müsste also verfügbar sein, auch
wenn es nicht extra herausgeführt ist.

...

von AxelR. (Gast)


Lesenswert?

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.

von Achim Walther (Gast)


Lesenswert?

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.

von ...HanneS... (Gast)


Lesenswert?

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.

...

von ...HanneS... (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.