RC-Empfänger einlesen

Gast #799534
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
Gast
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
Gast
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
Gast
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
(Firma: Promaxx.net)
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.