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
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
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
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.