• Die Forumsregeln und Nutzungsbedingungen findet ihr in der Navbar unter Impressum !
    Bitte unbedingt beachten!
    Wie überall im Leben gibt es Spielregeln, so auch hier!
    Die Datenschutzerklärung zum DSGVO findet ihr ebenfalls in der Navbar unter Datenschutzerklärung !
    Hinweis nach DSGVO :
    Es ist hier keinerlei Angabe erforderlich. Alle Angaben in diesem Bereich sind öffentlich sichtbar und werden freiwillig gemacht. Mit einem Eintrag in diesem Bereich erkenne ich dieses an, und bestätige die Datenschutzerklärung zur DSGVO für das Forum gelesen zu haben.

    Danke

Futaba/Robbe Multiswitch Decoder mit Arduino

Status
Für weitere Antworten geschlossen.

Magraina

New member
Registriert
17.03.2010
Beiträge
237
Hey,

Ich weiß nicht ob das schonmal jemand gemacht hat aber da ich die Möglichkeit nutze will ich sie euch zeigen.
In diesem kleinen Beispiel zeige ich wie man das Signal vom Empfänger zum Multiswitch-Decoder auswertet und mit einem Microcontroller(Arduino) nutzen kann.

Da ich in meinem LKW sowieso einen Microcontroller(Arduino) nutzen will für diverse Funktionien welche sowieso die meisten von den Multiswitchschaltern kommen und ich nicht sonderlich Platz habe kam ich auf diese Idee.
Außerdem sind die Multiswitch decoder teuer wenn man sie in jedem Fahrzeug nutzt.

Um das nachzumachen benötigt man etwas Erfahrung mit Microcontrollern(bzw. Arduino und C-Programmierung) und Elektrotechnik.

Ich nutze eine Futaba F14 und als Empfänger einen Futaba FP-R118F

Am Empfänger wo der Decoder angeschlossen wird liegt ein PPM Signal an.
Das Signal Besteht aus einem Startimpuls und 8 Impulsen.
Der Startimpuls(Sync) hat immer die selbe länge und dadurch kann man festellen wo der Anfang ist um die Reihenfolge beizubehalten.
Die anderen 8 Impulse(S1-S8) Stellen die Schalter des Multiswitch dar sie varieren mit der Länge je nach Schalterstellung.

Mann kann das Signal mit einem Oziloskop darstellen bzw. es mit einem Microcontroller beobachten.

Hier mal eine kleine Skizze um das zu verdeutlichen:
PPM Multiswitch.jpg

Also habe ich folgendes gemacht:
Ich habe meinen Arduino mit der Spannungsversorgung des Empängers verbunden und das PPM Signal auf einen Eingang gelegt.

Ich habe ein Programm auf den Arduino geladen womit ich die Impulslängen der einzelnen Impulse auf einem Seriellen Monitor sehe.

Programm:
Code:
void setup() {
  Serial.begin(57600);
  pinMode(3, INPUT); //Pin an dem das Signal anliegt.
}

void loop() {
  Serial.println(pulseIn(3, HIGH));
}

Damit bekamm ich fortlaufend Werte die etwa so aussahen:

915
1600
1600
1024
1600
1900
1900
1900
1900

Diese Zahlen sind die Zeit in Microsecunden die die Impulse auf High waren.

915 stellt denn Startimpuls dar und die restlichen die 8 Schaltkanäle.
Der 3. Schalter ist in diesem Beispiel geschaltet deshalb ist die Zeit für diesen geringer.
Bei allen Schaltern habe ich im geschalteten zustand einen Zeit wert von 1024 Microsekunden bekommen.
Ansonsten war der Wert zwischen 1600 und 1900.

Daraus habe ich dann folgendes Programm gemacht:
Code:
#define schalter 8 //Anzahl der Schalter bzw. Impulse
int value[schalter];

void setup()
{
  pinMode(3, INPUT); //Pin 3 als input
  pinMode(4, OUTPUT);
}
void loop()
{
  while(pulseIn(3, HIGH) > 1000){} //Wait for the beginning of the frame
  for(int x=0; x<=schalter-1; x++)//Loop to store all the channel position
  {
    value[x]=pulseIn(3, HIGH);
  }
  
  if ((value[0] < 1100) && (value[0] > 1000)) {
    digitalWrite(4, HIGH);
  } else {
    digitalWrite(4, LOW);
  }
}

Das Programm bleibt in der while-schleife bis der Startimpuls kommt da dieser als einziger kleiner als 1000 Microsekunden ist.
Dannach werden die Werte der 8 Impulse in den array "value" geschrieben.
Im Beispiel schalte ich den Ausgang 4 wenn der Schalter geschalten ist.

Sollte die Verbindung zur Ferbedienung unterbrechen geht der Wert von "value" nach einer bestimmten zeit auf 0 da kein Signal mehr kommt.
Man könnte mit der funktion pulseIn() auch einen Timeout bestimmen.

Sollte man einen Multiswitch mit proportionalen Funktionen haben wird vermutlich die zeit zwischen 1024 -2000 Microsekunden variieren je nach Stellung.
Das kann ich nicht testen da ich so ein Modul nicht besitze.

Hier noch ein Video zum veranschaulichen(Leider waren ein par sehr helle LEDs dabei).
Um diese Inhalte anzuzeigen, benötigen wir die Zustimmung zum Setzen von Drittanbieter-Cookies.
Für weitere Informationen siehe die Seite Verwendung von Cookies.

Ich hoffe der eine oder andere kann damit was anfangen.
Über Fragen oder Kritik würde ich mich freuen.

Für die Rechtschreibfehler kann ich nichts die sind angeboren;)

Links für Interisierte:
Eine erklärung zu PPM: http://www.rconline.net/magazin-2001/pcm-ppm/pcm-ppm.shtml
Bild zu PPM: http://www.rconline.net/magazin-2001/pcm-ppm/frame_ppm.gif
Arduino pulseIn() Reference: http://arduino.cc/de/pmwiki.php?n=Reference/PulseIn

MFG MetazeR
 
Tolle Idee!
Weil das Thema hier genauso gut hinpasst wie bei den Microprozessoren, habe ich es auch dort hin kopiert.
Da das Thema dadurch doppelt vorhanden ist, und durch eine eventuelle Diskussion nicht zerfetzt werden sollte, bitte für Antworten dem Link zum anderen Thema folgen.

Link::maus
 
Status
Für weitere Antworten geschlossen.

Servonaut
Zurück
Oben Unten