Protokoll analysieren

Hallo,

jetzt wird's für mich etwas zu hoch. Evtl. kennen ja hier einige das S.BUS Protokoll der Firma Futaba, welches im RC-Bereich seit "neustem" eingesetzt wird. Es ist, wie der Name schon sagt, ein BUS Signal. Hier hat jemand das ganze mal analysiert: http://www.turbinenheli.de/rc-elektronik/turbinen-heli-24-ghz/futaba-s-bus-protokoll.html

Nun, was ich vorhabe, ist einen Kanal abfragen (explizit Ch. 6), am Sender ist ein Schalter mit diesem belegt. Jedoch möchte ich auch die Möglichkeit haben, das Signal zu "manipulieren" - sprich normalerweise ist Ch. 6 auf low -100% (Bei Futaba +100%) (Schalter OFF), ich möchte aber u.U. via Arduino den Kanal auf high schalten und so einen Schalter ON simulieren.

habt ihr da ideen ?

Danke und liebe Grüße

Die Infos aus Deinem Link sind doch schon super. Ein bissel wirst Du aber noch machen müssen. Ich bleib in jedem Fall am Ball, interessiert mich.
Das Manipulieren decodierter Daten sollte kein Thema sein wenn das Protokoll klar ist.

...wie taste ich mich da am besten ran ? Wichtig ist, das beim "durchschleifen" der anderen Kanäle bzw des kompletten Signals auf keinen Fall irgendwas verloren geht.

Ein Oszi hab ich z.Z. nicht parat, hab ich andere Möglichkeiten, dass Protokoll zu analysieren ?

Hallo,

würde es nicht schon reichen, den Arduino direkt an den Servoausgang 6 zu legen, das Signal im Arduino nach Belieben auszuwerten und dann das Servo direkt über den Arduino anzusteuern?

Gruß
Reinhard

Hallo,

  1. Nein, reicht nicht.
  2. bei S.BUS hat man ja keine einzelnen Servoports mehr, widerspricht ja sonst einem BUS System :slight_smile:

Zum Vorgehen: die serielle Schnittstelle lässt sich mit den geannten Parametern (100kbps, 8E2) konfigurieren (viel genauer als mit den üblichen Baudraten), somit kannst Du über RX die Daten komplett einlesen und verändert über TX wieder ausgeben. Welchen Teil Du dabei verändern willst, ist komplett Dir überlassen.

Hey,

Also im Grunde im Setup einfach die serial auf 100k stellen und mal an einem digitalen Pin horchen was da so ankommt ? Wie stelle ich diese Bitreihnfolge am besten dar ? 8E2

Also im Grunde im Setup einfach die serial auf 100k stellen und mal an einem digitalen Pin horchen was da so ankommt ?

Fast, so kriegst Du die Konfiguration hin:

Serial.begin(100000L, SERIAL_8E2);

Horchen brauchst Du ja gar nicht mehr, das Protokoll ist ja recht gut analysiert. Lies die 25 Bytes einfach ein, verändere die Bits, die Du anders möchtest und schreibe das ganze wieder raus. Wenn Du's komfortabel machen willst, kannst Du ja eine union-Struktur bauen, damit Du auf die Werte direkten Zugriff hast.

Und wie schnell ist das ganze, selbst wenn ich einfach die Signale nur "weiterleite" ohne manipulation ? Da darf eigentlich keine Verzögerung vorhanden sein...

Da darf eigentlich keine Verzögerung vorhanden sein...

Da darf ganz viel Verzögerung drin sein, die Telegramme werden schliesslich nur ca. alle 10ms verschickt. Hier wären es bei simpler Programmierung ca. 4ms Verzögerung, Wenn Du's etwas geschickter machst, sind es vielleicht 200µs. Bei den normalen Anwendungsbereichen des Protokolls dürfte jedoch auch eine Verzögerung um 10ms absolut problemlos sein.

Hm stimmt, dann hab ich ja eeewig zeit *lach :slight_smile:

dann dürfte auch genug zeit zur "manipulation" sein :slight_smile:

Die Zeiten sind inkl. Manipulation (aber ohne lange Entscheidungszeiten).

Ja ich denke das passt. Werde das ganze Montag mal probieren und schauen was ankommt. Wie leite ich eigentlich die eingelesenen Daten direkt weiter ?

Du kannst bzw. Wirst ja vermutlich in letzter Konsequenz den Kanal 6 separat für irgendwas verwenden. Also kannst Du mit dem arduino den Bus abhören, die Daten für Kanal 6 ausfiltern und dann damit alles mögliche machen. Der Bus bleibt damit original erhalten.
Hängt halt vom Einsatz ab.

Ne, also das Signal wird nur manipuliert, muss aber ebenfalls mitgesendet werden. Aber wie sende ich solche Daten eigentlich an ein Pin ? Kann ja schlecht die ganze zeit HIGH, LOW, HIGH, LOW da rein "schreien".

Steht doch schon weiter oben: Daten rein in RX, raus über TX. Die Ansteuerung wird von der Arduino Software erledigt. Du musst nur die Daten manipulieren.

Aber wie gebe ich die Daten über TX wieder aus ?

Fast, so kriegst Du die Konfiguration hin:

Code:

Serial.begin(100000L, SERIAL_8E2);




Horchen brauchst Du ja gar nicht mehr, das Protokoll ist ja recht gut analysiert. Lies die 25 Bytes einfach ein, verändere die Bits, die Du anders möchtest und schreibe das ganze wieder raus. Wenn Du's komfortabel machen willst, kannst Du ja eine union-Struktur bauen, damit Du auf die Werte direkten Zugriff hast.

Leider kommt dann bei mir:
error: 'SERIAL_8E2' was not declared in this scope

hab ich da irgendwas vergessen ? Habs auch Hexadezimal versucht 0x2E, läuft aber auch nicht!

Welche Version der Arduino-IDE verwendest Du?
Uwe

Gerade aus dem Kopf heraus: 0023