www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RC-Empfänger einlesen


Autor: Remo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich hätte da folgendes problem.
Ich habe ein RC-Empfänger und möchte nun mit meinem Mikrokontroller 
(PIC)

-20 Kanäle einlesen
-Mixen und mischen

-20 Kanäle ausgeben auf einem anderen PIC (übertragung per I2C)

Ich habe bis jetzt nur kleine Programme in MikroBasic geschrieben.
Ich weiss das das Signal eines Kanals ca. alle 20ms einen Puls von 1 bis 
2ms ausgibt.

Hat jemand nun eine Idee:

-ob dieses Projekt in MikroBasic gelöst werden kann?
-was für ein Mikrokontroller (PIC) ich dafür nehmen müsste?
-was für ein Quarz ich dazu benötige?

freundliche Grüsse

Remo

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Remo,

von PICs und Basic versteh ich absolut nichts, daher kann ich Dir nur 
allgemeine Tipps geben. Bis zu 9 Kanäle habe ich problemlos mit einem 
ATmega48 ausgewertet. Eine allgemeingültige Lösung (die also zu PPM 
und PCM Empfängern mehrerer Hersteller[!] passt) zu finden ist schwer. 
Hier eine gründliche Diskussion zu den anfallenden Software-Problemen: 
http://www.rcgroups.com/forums/showthread.php?t=752440

Gruß

Fred

Autor: Remo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Fred

Erstmal danke für deine Antwort.

Nun meine Fragen:

-Wie hast du das Softwaretechnisch gelöst?
-Wie sieht der Ablauf deines Programms aus?


freundliche Grüsse

Remo

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher RC-Empfänger hat denn 20 Kanäle?
Und wieso sollte man 20 Kanäle mischen wollen?
Und warum braucht man dazu 2 PICs?

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Remo,

das Programm analysiert einfach das an einem Eingangspin anliegende 
PPM-Signal. Zunächst musst Du herausfinden, ob die Kanal-Impulse aus 
Deinem Empfänger positiv oder negativ sind. Ich gehe im Folgenden von 
negativen Impulsen (z.B. bei Futaba üblich) aus. Du lässt Deine Software 
die Synchronisationsphase entdecken (also Signal=HIGH für länger als 
etwa [20ms-Kanalzahl*1.5ms]) und wartest dann auf einen Kanalimpuls. Der 
erste Impuls nach der Synchronpause ist für den ersten Kanal usw. Dein 
Programm misst jeweils die Impulsbreite (900-2100us), wobei 1500us immer 
die Mittelstellung darstellt (kann bei einigen Herstellern anders sein; 
viele der Computer-Sender erlauben die Einstellung der Mitte).

Software-Ansätze dafür gibt es viele; alle gehen etwa so:

        warten auf Synchronsignal bis Synchronsignal gefunden

        Kanaldaten_neu:
          Kanal=1
        Kanaleinlesen:
           Signal H->L : Timer starten
           Signal L->H:  Timer stoppen
           Zeitdauer für Kanal speichern
           Kanal:=Kanal+1
           Pausenzeit messen
        wenn Pausenzeit >= Synchronphase: goto Kanaldaten_neu
           sonst: goto Kanaleinlesen

Wenn man Interupts zur Impulserkennung verwendet, was bei der üblichen 
Signalqualität problemlos geht, hat der Prozessor riesig viel Zeit für 
alle anderen Aufgaben (Weitergabe des Signals, berechnen von neuen 
Werten aus Kanaldaten usw.). Selbst ein Timer-gesteuertes Polling des 
Signals geht.

Wie gesagt, das lässt sich mit den AVRs in Assembler oder C 
implementieren, ohne dass der Prozessor bei den üblichen Taktraten zu 
langsam ist.

Zu Fernsteuerungen mit mehr als 9 Kanälen kann ich nichts sagen.

Gruß

Fred

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das in einem PIC gelöst, indem ich Eingänge benutzt habe, die 
einen Interrupt bei Änderung auslösen.
Dann läßt man einen Timer passend laufen, daß er nur max. alle 20ms 
(besser 30ms) überläuft und speichert bei jeder wechselnden 
Eingangsflanke den Timerstand und kann durch Subtraktion die Länge des 
Impulses ermitteln.

Aber 20 Eingänge ...

Ist es eine professionelle Entwicklung:
z.B. dsPIC33FJ32GP202 - 28 Pins, 22 davon mit 
Change-on-Interrupt-Fähigkeit.
Dann wirfst Du aber den Compiler weg und mußt den C30 von Microchip 
verwenden.

Ist es was privates:
Nimm ein paar 18Fxxx mit einigen Interrupt-on-Change Eingängen und häng 
Sie an den I2C-Bus, den der Mixer als Master bedient und alle Empfänger 
pollt.

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.