Telemetrie-Konverter: HOTT->FrSky

Status
Nicht offen für weitere Antworten.

sandmen

Erfahrener Benutzer
#21
Jo, anderer PIN passt.
Ich denke, hier passt der 8Bitter schon.
Hab mal mavlink dazu geschrieben.

Werde noch die ein oder andere FrSky sachen dazu schreiben, und dir zukommen lassen.
 

sandmen

Erfahrener Benutzer
#23
Vielleicht liegt's an der mangelnden Zeit, habe es momentan nicht gefunded. Gibt es irgendwo ein h-file oder Beschreibung zu den Sensor ID's?
 

nachbrenner

Erfahrener Pfuscher
#24
Zu den Sensor-IDs kenne ich keine Doku, ich hab einfach geschaut welche IDs der X8R pollt und davon eine genommen.

Aber: Pro Sensor kann man mehrere Datentypen (z.B. Höhe, Geschwindigkeit, Zellspannung) ausgeben: Einfach bei jedem Poll einen anderen Typen raus hauen (macht auch OpenXVario so). Die Datentypids sind hier:

https://code.google.com/p/opentx/source/browse/trunk/src/telemetry/frsky_sport.cpp#80

Bei Frsky gibt es übrigens gegen NDA auch die S.Port Doku. Ich weigere mich nur ein NDA zu unterzeichnen, wiederspricht für mich dem Opensource/Openhardware Gedanken
 

nachbrenner

Erfahrener Pfuscher
#25
So, komme langsam mit der Eingabeseite voran: Ich kann jetzt das Unilog 2 sowohl in den M-Link als auch in den Hott-Modus versetzen.

Der Schlüssel war der hier oben verlinkte Hardware-Mod mit Widerstand und Diode um RX und TX vom Arduino gescheit auf eine Half-Duplex-Leitung zum Unilog zu bekommen. Dann geht es sowohl mit Software Serial als auch mit Hardware Serial.

Nächster Task: Eingabeformat dekodieren. Ich denke ich fange mit M-Link an - dafür habe ich hier auf rcgroups eine PDF-Doku gefunden, zum Hott gibt es wohl keine offene Doku und ich muss das wieder aus Code reversen.

Auch das Unilog scheint TTL-Pegel auszuhalten.

Was noch ganz interessant sein könnte wenn zwei serielle Ports gleichzeitig per Software Serial laufen sollen: Die AltSoftSerial ist darauf spezialisiert (http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html)
 
Zuletzt bearbeitet:

sandmen

Erfahrener Benutzer
#26
Ich habe mal etwas gelesen, und konnte eigentlich keine Doku zu dieser Aussage finden.

SENSOR_ID 0xA1
if (lastRx == START_STOP && data == SENSOR_ID) {

Woher kommt die 0xA1?

Hmm, so wie ich die FrSky Telemetry verstanden habe, Pollt eigentlich der Sender, nach einer bestimmten Nummer (Sensor-ID).
Insgesamt ca. 29 unterschiedliche Sensor ID's !?

Darauf kommen bestimmte Datenpakete, mit Sensor/Daten ID, zurück.
Diese Daten ID's sind hier beschrieben.
https://code.google.com/p/opentx/source/browse/trunk/src/telemetry/frsky_sport.cpp#80

Ich würde aber ganz gerne wissen wollen, welche anderen Sensor-ID's gibt es denn sonst noch?
Also, außer 0xA1.
 

nachbrenner

Erfahrener Pfuscher
#27
Ich habe mal etwas gelesen, und konnte eigentlich keine Doku zu dieser Aussage finden.

SENSOR_ID 0xA1
if (lastRx == START_STOP && data == SENSOR_ID) {

Woher kommt die 0xA1?

Hmm, so wie ich die FrSky Telemetry verstanden habe, Pollt eigentlich der Sender, nach einer bestimmten Nummer (Sensor-ID).
Insgesamt ca. 29 unterschiedliche Sensor ID's !?
Doku habe ich auch keine, ich habe einfach geschaut nach was der X8R eben pollt und mir eine ID davon gekrallt.

Szenario: X8R im Setup wie oben, Sender (Taranis) ist und bleibt aus. Sketch nehmen der einfach nur Daten vom X8R empfängt aber nicht antwortet. Der Sketch gibt alles was er empfängt auf die serielle Arduino-Konsole aus.

Dort kamen dann Sequenzen der Art

Code:
0x7E 0x00
0x7E 0xA1
usw.
irgendwann ging ers wieder von vorn los
Da habe ich mir einfach eine ID heraus genommen - das war die 0xA1. Wenn gewünscht kann ich nochmal ein Log vom Pollen posten, da sind dann alle IDs drin die der X8R abfragt.
 

sandmen

Erfahrener Benutzer
#28
Doku habe ich auch keine, ich habe einfach geschaut nach was der X8R eben pollt und mir eine ID davon gekrallt.

Szenario: X8R im Setup wie oben, Sender (Taranis) ist und bleibt aus. Sketch nehmen der einfach nur Daten vom X8R empfängt aber nicht antwortet. Der Sketch gibt alles was er empfängt auf die serielle Arduino-Konsole aus.

Dort kamen dann Sequenzen der Art

Code:
0x7E 0x00
0x7E 0xA1
usw.
irgendwann ging ers wieder von vorn los
Da habe ich mir einfach eine ID heraus genommen - das war die 0xA1. Wenn gewünscht kann ich nochmal ein Log vom Pollen posten, da sind dann alle IDs drin die der X8R abfragt.
Ja, vielen Dank, so weit ist das klar.
Nur habe ich halt ne Doku/header file gesucht, wo die Poll's bechrieben sind.
Ich würde gerne halt auf den Poll bezogen antworten.
z.B wenn 0xA1 kommt, den entsprechenden Sensor ID wert zurücksenden, passend zum Poll.
oder
Vario modul, kann ja mehrere Sensoren, dann halt da richtig antworten.

Aber scheinbar gibt es dafür noch keine Doku.

Gruß
 

nachbrenner

Erfahrener Pfuscher
#29
Sandmen, hast du schon Code den du teilen magst?

Habe gerade die Routine zum Dekodieren von M-Link geschrieben und würde mich dann an den Puffer- und S.Port-Sendecode machen - es sei denn du hast da schon etwas ;)
 

nachbrenner

Erfahrener Pfuscher
#30
Grr, ich drehe noch durch: Zum gescheiten Entwickeln brauche ich ja 3 serielle Ports:

1) S.Port zum FrSky-Empfänger

2) Input vom Unilog (derzeit M-Link Telemetrie, später will ich auch Hott können)

3) Debug-Output für serielle Konsole

Am Arduino Uno habe ich aber nur einen UART. Wenn ich jetzt z.B. Debug-Output per SoftwareSerial mache und M-Link auf Hardware Serial dann klappt das nicht: Ich empfange immer FF wo 00 stehen müsste.

Mache ich Debug-Output UND M-Link per Software-Serial dann kommen die M-Link Pakete korrekt an.

Und jetzt die Quizfrage: Liegt das Problem

a) am Empfang auf Hardware-Serial (geht da etwas mit meiner Schaltung nicht?) oder

b) einfach an der Ausgabe: Irgendwelche Nebenwirkungen des Software-Serials Debug-Outputs in Kombination mit dem HW-Serial

Hier ein Output der seriellen Kommunikation vom Oszi:

tel_oszi_1.jpg
(Klick für Groß)

Auffällig sind die unterschiedlichen Pegel (-> kein Problem). Was mich auch wundert ist dass GND nicht wirklich auf GND liegt sondern ca. 800mv darüber.

Aber das löst mein Problem mit den fehlenden UARTs nicht. Weiß jemand Rat welcher uC mit 3 UARTs sich anbietet? Klar: Ein Atmega2560 würde es tun. Nur ist das ja ein riesiges Teil -> wohl kaum für einen kleinen Konverter geeignet.

Mit einem kleinen STM32 würde es wohl gehen - die Frage ist wie lange die Einarbeitungszeit dafür wird. Wenn ich so die Seite von OlliW lese dann gibt es doch diverse Stolpersteine ;)
 

helle

Erfahrener Benutzer
#31
Hy,

wie wäre es mit:
Arduino pro micro mit Atmega32U4

mit echter eigener USB als Serial "null"

mit RX/TX als Serial1

mit neuer Soft-Serial-Library für weitere SoftSerials


und dann noch via USB am PC einen Logikanalyser drann an den SPORT


Auf rcgroups gibt es einen S-Port Decoder/Analyser

Helle
 
Zuletzt bearbeitet:

nachbrenner

Erfahrener Pfuscher
#32
Danke helle, hab da noch ein Nanowii in der Bastelkiste gefunden (-> mit Atmega32U4).

Hab mir aber gerade noch einen Mega 2560 mit 3 hardware-uarts besorgt und entwickle vorerst dort: Die Timing-Probleme mit SoftwareSerial gehen mir auf den Zeiger, das mache ich dann erst wenn der Rest stimmt ;)
 

Tempo

Erfahrener Benutzer
#33
...
Aber das löst mein Problem mit den fehlenden UARTs nicht. Weiß jemand Rat welcher uC mit 3 UARTs sich anbietet? Klar: Ein Atmega2560 würde es tun. Nur ist das ja ein riesiges Teil -> wohl kaum für einen kleinen Konverter geeignet.

Mit einem kleinen STM32 würde es wohl gehen - die Frage ist wie lange die Einarbeitungszeit dafür wird. Wenn ich so die Seite von OlliW lese dann gibt es doch diverse Stolpersteine ;)
Hallo nachbrenner,

Dein Wunsch geht mit dem Teensy3 in Erfüllung :
http://www.pjrc.com/teensy/index.html
Das ist ein ARM32 Prozessor, den Du als "Anfänger" mit der Arduino-Umgebung bedienen kannst.
Der hat 3UART und noch viel mehr und ist preislich auch sehr interessant.
Ich kaufe den z.B. bei http://www.watterott.com/de/Teensy-v30-MK20DX128

Statt der Arduinos benutze ich inzwischen lieber die Teensy2 mit dem Atmel32U4.
Die Platine ist auch schön klein gemacht mitsamt USB-Buchse.

P.S.: Und danke für Deine Informationen dort
http://fpv-community.de/showthread....meter-FVAS-02H&p=486055&viewfull=1#post486055
 
Zuletzt bearbeitet:

nachbrenner

Erfahrener Pfuscher
#36
Danke für die Tipps! Teensy 3.0 habe ich mal bestellt, schaut ja sehr nett aus und falls ich mit den Atmegas nicht weiter komme habe ich eine Alternative.

Herausforderung jetzt: Wie spreche ich invertiertes TTL-Serial mit meinem Arduino Mega 2650 auf einem Hardware-UART? Klar: Es gibt einfache Inverter-Schaltungen wie hier:



Allerdings gibt es für das Telemetrie-Signal nur einen Port -> das ist half duplex wo auf der gleichen Leitung gesendet und empfangen wird. Zum Aufspalten habe ich ja diese Schaltung verwendet:



Nur: Wie kombiniere ich das Invertieren mit meiner Gabelschaltung RX/TX? Einfach zwei Inverter nehmen und die jeweils dahin klemmen wo jetzt RXD und TXD stehen?

Danke
 

nachbrenner

Erfahrener Pfuscher
#37
Nachdem ich noch mit SoftwarSerial herum gespielt habe und mir der Atmega2560 jetzt einfach immer wieder crasht: Schnauze voll vom bisherigen Ansatz.

Neuer Plan:

Teensy 3.0 mit ARM Cortex M4 (immer noch Arduino-Kompatibel). Mehr als genug Bumms und immer noch relativ günstig.

Er hat 3 UARTS - so wie ich es brauche. Dort kann man den seriellen Port direkt invertieren: Beschreibung hier

Der Chip unterstützt auch single wire serial, wobei ich schauen muss inwiefern sich das mit Arduino ansteuern lässt (Datasheet, Suche nach "Single Wire Operation").

Da mir der Arduino-Editor auf den Zeiger geht (keine Code-completion, keine live Syntaxprüfung) plane ich das AVR Studio zusammen mit Visual Micro einzusetzen: Beschreibung hier

Wahrscheinlich mit Kanonen auf Spatzen geschossen, aber der Weg soll ja Spaß machen ;)

Der Teensy kommt hoffentlich am Dienstag. Danke an Tempo für den Tipp.
 

nachbrenner

Erfahrener Pfuscher
#38
Kurzer Zwischenstand nach einer Stunde mit dem Teensy 3.0: Das Teil rockt total. Winzig klein und preisgünstig. Ports ohne Ende. 3 echte UARTs + USB-Serial für Debugging. Hardware-Serial Ports invertieren kein Problem. Es geht sogar single wire serial, d.h. keine Beschaltung für separate TX und RX pins notwendig.

Installation in die Arduino-Umgebung kein Problem.

Zum verbauten STM32-clone "K20P64M50SF0" gibt es einen guten Datasheet mit dem man ruck-zuck durch die UART-Funktionen durch steigt.


Echt eine super Empfehlung von Tempo.
 

nachbrenner

Erfahrener Pfuscher
#39
So, ein proof of concept rennt: Die Airspeed-Daten vom Unilog2 werden via FrSky S.Port direkt auf die Taranis übertragen. Kleine Demo:

http://www.youtube.com/watch?v=4YsXq2nD1hA

Das Oszi zeigt den S.Port (Request/Reply)

Das alles ohne Hardware-Hacks dank des Teensy 3.0 mt STM32: Er kann RX und TX auf einem einzigen Pin, invertiertes Hardware-Serial und Pegel ist bei dem Teil sowieso zeitgemäß 3.3V.
 
Erhaltene "Gefällt mir": Nitro
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten