mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Code Modellbau


Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Leidinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tobias,

schon mal in der Codesammlung nach Servo gesucht?

http://www.mikrocontroller.net/forum/list-4-1.html...

Da solltest Du alle Grundlagen finden.

HTH,
Klaus

http://www.mikrocontroller-projekte.de

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkais (Gast)
Datum:

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

Autor: Tobias Tetzlaff (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Achim Walther (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias Tetzlaff (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nochmal,

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

Gruß Toby

Autor: AxelR. (Gast)
Datum:

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

Autor: Achim Walther (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tobias Tetzlaff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Achim Walther (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ...HanneS... (Gast)
Datum:

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

...

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Achim Walther (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.