Forum: Mikrocontroller und Digitale Elektronik PWM mit Controller auslesen, verändern und wieder ausgeben?


von Jan Weber (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe folgendes Problem:
Ich möchte 2 Modellbau Fernsteuerungen im sogenannten Lehrer-Schüler
Modus betreiben.
Dabei werden die Sender mit einem Kabel verbunden.
Der Lehrer-Sender ist an und steuert das (Flug)modell.
Der Schüler Sender ist an, sendet aber keine Signale an den Emfäger im
Modell (Quarz wurde dem Sender entnommen).
Der Lehrer Sender hat einen Taster, und sobald dieser gedrückt wird hat
der Schüler die kontrolle über das Modell. Dazu wird dann über das Kabel
vom Schüler aus das Schüler PWM Signal an den Lehrer-Sender geleitet und
dort anstatt des Lehrer PWM vom sogenannten HF-Modul an den Empfänger
gesendet.
(Wer das nich verstanden hat kann mal hier gucken
http://www.rc-network.de/magazin/artikel_03/art_03-0069/art_03-0069-00.html)
Das alles funktioniert auch schön und gut, wenn die Hersteller der
beiden Sender das gleiche PWM benutzen. Es gibt unterschiede zwischen
PWM positiv und PWM negativ. Dieses Problem kann man aber mit nem
Transistor und und ein paar wiederständen aus der Welt schaffen.
Das viel größere Problem ist, dass die Kanalzuordnung nicht passt.
So hat zum Beispiel Graupner Gas auf Kanal 1 und Sanwa Höhenruder auf
Kanal 1.
Um diese beiden Sender jetzt im Lehrer-Schüler Modus zu betreiben
müsste der Schüler also entweder mit dem Gasknüppel das Höhenruder
betätigen oder man versucht, das PWM Signal zu verändern.
Das PWM fuktioniert so: (siehe Anhang 1)
Ein "Packet" besteht aus 8 einsen.
Der Abstand der ersten 1 zur zweiten definiert den ersten Kanal, er
beträgt wie bei der Servoansteuerung 1-2ms (1,5ms heißt, das der
Knüppel an der Fernsteuerung neutral ist.)
Der Abstand von der zweiten zur dritten 1 definiert Kanal 2...
Diese "Packete" werden ca alle 10ms gesendet.
Bewegn mann nun den Knüppel des Kanal 1, verädert sich der Abstand
zwischen der ersten und der zweiten 1 (siehe Anhang 2+3).
Um jetzt das Problem mit der Kanalzuordnung zu beheben müsste man also
zum Beispiel Kanal 1 mit vier(Höhenruder und Gas) in dem Signal
auszutauschen. Das heißt, man müsste den Abstand zwischen der ersten
und der zweiten 1 mit dem Abstand zwischen der vierten und der fünften
1 austauschen.
Nun meine Frage:
ist es mit einem Microcontroller (AVR am liebsten Mega-Serie) möglich
dieses Signal auszulesen, es wie beschrieben umzuändern und es dann
wieder auszugeben?
MfG
Jan

von Jan Weber (Gast)


Angehängte Dateien:

Lesenswert?

Hier das zweite Bild;
Der Kanal 1(Höhenruder) wurde wurde nach oben gelenkt

von Jan Weber (Gast)


Angehängte Dateien:

Lesenswert?

Bild 3;
Der Kanal 1(Höhenruder) wurde wurde nach unten gelenk.

von Uwe (Gast)


Lesenswert?

Hi!
Ich denke mal das sollte mit fast allen uC's gehen die einen
Timergeführten Ausgang haben(OC1A..). In Echtzeit wird das zwar nichts,
aber mit 10ms Versatz sollte das kein Probl. sein.
Was ich meine ist:
alle 8 Zeiten mit ICP einlesen und dann je nach Zuordnung über OC..
ausgeben. Wenn es komfortabel sein soll dann Displ. drann und Zuordnug
variabel gestalten. zb.
CH1=CH4
CH2=CH2
CH3=CH3
CH4=CH1

Viel Erfolg, Uwe

von Jan Weber (Gast)


Lesenswert?

Hi,
danke für die Antwort!
Also sollte es mit nem Mega8 gehn.
>In Echtzeit wird das zwar nichts,
>aber mit 10ms Versatz sollte das kein Probl. sein.
Was meinst du damit genau? Eine Zeitspanne von 1-2ms müsste ja relativ
genau machbar sein.
Ich wollte es ohne Display machen;
es geht ja in erster lienie um die ersten 4 Kanäle(Höhe, Seite Gas,
Quer)
2hoch4 sind dann 16 verschieden möglichkeiten.
Zur konfiguration muss dann entsprechen oft z.B. ein Taster gedrückt
werden.
Hat jemand ne idee wie ich das Programm aufbauen soll?
Ich hab mir das so vorgestellt:
Eine Schleife die ca. 10ms zum durchlaufen braucht.
In der Schleife wird zuerst mit ICP?(hab noch nie damit gearbeitet)
nacheinander? die Pausen der einzelnen Kanäle ermittelt und in einer
Variabel gespeichert.
Anschließend werden je nach Modus die Werte nacheinander über OC1A
ausgegeben. Und dann alles wieder von vorne.
Da ich noch nicht allzuzviel erfahrungen mit Controllern habe, wäre ich
für ein paar Tipps sehr Dankbar.
In welcher Sprache soll ich das Prog schreiben? In C oder Assembler?
Oder reicht Bascom auch?(Da hab ich Haupsächlich Erfahrung)
MfG
Jan

von Jan Weber (Gast)


Lesenswert?

Hi, bin auf was gestoßen:
http://www.rclineforum.de/forum/thread.php?threadid=82401&sid=&hilight=ppjoy&hilightuser=0
Da wird mit Bascom immerhin schon ein entsprechendes Signal erzeug.
Muß jetzt nurnoch :) durchsteigen und es schaffen, ein signal
auszulesen.
Das ändern der Reihenfolge wird ja auch nicht so schwer werden...
MfG
Jan

von Uwe (Gast)


Lesenswert?

Hi!
Spät, aber immerhin,
<Also sollte es mit nem Mega8 gehn.
Ja.
<In Echtzeit wird das zwar nichts,
>aber mit 10ms Versatz sollte das kein Probl. sein.
<Was meinst du damit genau?
Nunja, du kannst Kanal 8 nicht eher ausgeben wie du ihn empfangen hast.
Übrigens, ich zähle nur 7 auswertbare (fallende)Flanken? Nochmal oben
gelesen, aja du schreibst ja 8 1sen und nicht Kanäle.
Wie würde ich das machen? Ämmm ICP auf fallende Flanke, Timer CLK so
einstellen das bei 16 Bit Auflösung nach 2,5 ms OVL eintritt(0,5ms
Reserve) Im OVL-Int eine "Kein Signal"-Variable setzen damit du den
Paketbeginn feststellen kannst. Irgendwann kommt dein 1.ICP-Int,
1. Timer auf 0 setzen,
2. ist Kein Signal=1 dann
2a.Zeit verwerfen,"kein Signal" auf 0,und Variablenzeiger auf 1.
Zeit
2b.sonst Zeit in Variable ablegen und Zeiger(Variable)+1
Im HP Zeiger(Variable) auf 7 (fallende Flanken)prüfen.
Wenn OK, die eingelesenen Zeiten in der gewünschten Reihenfolge über
OC1A ausgeben. Gefahr sehe ich eigentlich nur wenn die Pause zwischen
den Paketen kürzer ist als das Paket selbst. Dann musst du den Timer
durchlaufen lassen und die Zeiten unter Beachtung des Überlaufes
errechnen.
<In welcher Sprache soll ich das Prog schreiben? In C oder Assembler?
<Oder reicht Bascom auch?(Da hab ich Haupsächlich Erfahrung)
Das sollte in allen Sprachen machbar sein, am realsten wird es in ASM.

Viel Erfolg, Uwe

von Rahul (Gast)


Lesenswert?

Ich bin robbe-Benutzer, und bei deren Fernsteuerungen kann man durch
simples Kanal-Umstecken (im Sender) das Fernsteuer-Telegramm
(Reihenfolge der Kanäle) verändern...

Viel besser wäre es aber doch, einen alten Sender zu "schlachten"
(ebay und dergl lassen grüssen), und dann per Mega8 (oder grösser) das
Telegramm des Schüler-Senders selber herzustellen (Knüppel-Werte vom
ADC einlesen, verarbeiten und dann per Telegramm ausgeben).

Dann hätte man halt einen reinen Schüler-"Sender".

Übrigens zum Thema Echtzeit: Das bedeutet nicht weiter, als dass das
Ergebnis innerhalb einer bestimmten Zeit auftritt, nicht sofort. Ein
Echtzeit-System ist deterministisch...

von Rolf Magnus (Gast)


Lesenswert?

> Viel besser wäre es aber doch, einen alten Sender zu "schlachten"
> (ebay und dergl lassen grüssen), und dann per Mega8 (oder grösser)
> das Telegramm des Schüler-Senders selber herzustellen
> (Knüppel-Werte vom ADC einlesen, verarbeiten und dann per
> Telegramm ausgeben).

Es gibt auch diesen "Gamebird". Praktisch ein Joystick für den PC in
Senderform mit 4 Achsen. Siehe http://www.gamebird.de
Da könnte man einen µC anschließen, der das Impulstelegramm baut. Da
braucht man aber keinen Mega8, da reicht auch ein Tiny26 locker aus. Im
Prinzip reicht sogar ein Tiny13 (4 Analog-Eingänge, ein
Digital-Ausgang).

> Übrigens zum Thema Echtzeit: Das bedeutet nicht weiter, als dass
> das Ergebnis innerhalb einer bestimmten Zeit auftritt, nicht
> sofort. Ein Echtzeit-System ist deterministisch...

Richtig. Und wie groß diese bestimmte Zeit ist, hängt davon ab, womit
das System interagiert. So ist die maximale erlaubte Reaktionszeit für
den Auslöser eines Airbags sicherlich kürzer als die einer
Speicherheizung. Dennoch ist beides "Echtzeit".

Noch was zum Lehrer/Schüler-Betrieb: Achte auf die Versicherung (daß
Modellflugzeuge generell Versicherungspflichtig sind, ist hoffentlich
bekannt). So deckt z.B. die Haftpflichtversicherung des DMFV den
Lehrer/Schülerbetrieb ausßerhalb eines Fluggeländes nicht ab.

von Jan Weber (Gast)


Lesenswert?

Hi, erstmal Danke für eure Antworten!
@Use: Danke für deine ausführliche Beschreibung!
>Gefahr sehe ich eigentlich nur wenn die Pause zwischen
>den Paketen kürzer ist als das Paket selbst. Dann musst du den Timer
>durchlaufen lassen und die Zeiten unter Beachtung des Überlaufes
>errechnen.
Das könnte durchaus ein Problem werden. Wenn alle Kanäle auf max sind
haben wir 7x 2ms Pausen =14ms... Die Pause ist glaube ich immer ca
10ms.
Werd gleich nochmal den Sender ans Oscilloscop hängen und gucken, ob
die Pause länger wird, wenn das Packet länger ist.

@Rahul:
>Ich bin robbe-Benutzer, und bei deren Fernsteuerungen kann man durch
>simples Kanal-Umstecken (im Sender) das Fernsteuer-Telegramm
>(Reihenfolge der Kanäle) verändern...
Normalerweise würde das auch gehn, aber wenn man zumbeispiel ein Delta
mit speziellen mischer fliegen will würde das auch alles nich stimmen.
Oder wenn man ein Motor flieger mit Throttel-Cut hat(Taste am Sender
auf die man drückt um einen Glühzünder aus zu machen, Vergaser wird
dann ganz geschlossen) würde man diese funktion auch nicht nutzen.
Natürlich könnte man irgendeinen Sender "ausschlachten", aber halt
ohne Mischer ect...

@Rolf:
Nach dem neuen Gesetz muss jedes Flugobjekt versichert sein.
Theoretisch auch ein Papierflieger.
Ich flieg immer fernab von allem was lebt.
Aber versichert bin ich trotzdem.

MfG
Jan

von Rahul (Gast)


Lesenswert?

Mischer etc kann man entweder übernehmen (sofern die Dinger nur aus ein
paar Potis bestehen), oder mit dem Mikrocontroller nachbilden.
Schalter mit einem Mikrocontroller abfragen ist ja nun auch nicht
wirklich anstrengend.
Mit Ausschlachten meinte ich, dass sich ausser den Kreuzknüppeln (und
ein paar Schaltern / Hühnerfutter) nichts mehr im Sender befindet.

von Jan Weber (Gast)


Lesenswert?

Hi,
die Mischer müssten schon mit dem Controller gemacht werden, da mit nem
Poti da nichts zu machen ist.
Das ganze Projekt wollte ich hinterher eigentlich veröffentlichen,
deswegen möchte ich nicht extra nen Sender Umbauen. Es soll ne
Elektronik werden, die man einfach ins Lehrer/Schüler Kabel hängt.
Das Projekt sollte auch von weniger begabten Leuten(müssten schon das
Prog auf den Controller überspielt kriegen) durchfürbar sein.
Aber ich werde wahrscheinlich ziemlich viele Probleme habe, weil die
Pause zwischen den Packeten nicht lang genug ist...
MfG
Jan

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.