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


von Remo (Gast)


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

von Fred S. (Gast)


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

von Remo (Gast)


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

von STK500-Besitzer (Gast)


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?

von Fred S. (Gast)


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

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


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.

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.