SBus2 Telemetriesensoren - wer hat schon was selbst gemacht

Neue SBUS2 Telemetrie Version

Neue SBUS2 Telemetrie Version

Habe gerade die neue Version auf Github geschoben.

- Der Code wurde aufgeräumt
- Man benötigt nur noch 2 Inverter oder 2 Transistoren + widerstände


smartport_inverter.png




Ich selber habe XOR Logik Gatter verwendet. Über einen GPIO kann ich so zwischen invertierter und nicht-invertierter UART umschalten (Futaba oder Jeti Telemetrie)
Für reine Futaba Telemetrie reichen Nicht-Gatter aus. Oder Transistoren wie im Bild.

Beim testen hatte ich noch ein paar verlorene SBUS Frames (eigentlich jeder 4. Frame ging verloren).
Das habe ich aber gefixt. Trat nicht bei den Tristate buffern auf.

Die Verlorenen Frames waren über den Alarmport (Temp125 Sensor) sichtbar.


Ich würde mich freuen wenn auch andere sich mal den Code ansehen und ihre Meinung äußern.
Eventuell baut ja jemand außer mir mal einen DIY Futaba Sensor?
Solange es keine Probleme gibt wird die Library nicht mehr verändert.

Gruß Brushlesspower
 
- Man benötigt nur noch 2 Inverter oder 2 Transistoren + widerstände

smartport_inverter.png


Hallo,

dieser Satz Man benötigt nur noch 2 Inverter oder 2 Transistoren + widerstände verwirrt mich etwas...

Das Schaltbild ist doch der Inverter ! ? oder ?
Braucht es den zwei mal oder verstehe ich den Satz nur nicht richtig.

Zweite Frage: dein Schaltbild nennt sich Smart-Port Inverter ??? wird das bei Futaba die Telemetrie nicht über S-Bus gehändelt ??

Erst mal danke für deine mühe das umzusetzen, wenn ich etwas Zeit habe schau ich mir deine Ino mal genauer an und versuche es dann nachzubauen, allerdings kann ich es nicht testen da ich kein Futaba habe, ich baue das teile für einen bekannten der bei mir noch etwas gut hat.

Hab mal schnell drüber geschaut und es sieht aus als hättest du kein Vario mit eingebunden, sondern nur Drehzahl, Temperatur, Strom und die Fehler Auswertung, sieht das nur so aus oder möchtest du das später noch hinzufügen ?

#define CURRENT_SLOT 3#define RPM_SLOT 2
#define ERROR_SLOT 6
#define TEMPRATURE_SLOT 1
 
Zum Inverter:
...
Futaba SBUS/SBUS2 ist invertiert. Genauso wie auch SmartPort von FrSky. Deswegen das Bild...wollte das Rad nicht neu erfinden.;)

du benötigst einen Inverter (oder einen Transistor) um vom SBUS zu RX zu invertieren. Dann kannst du SBUS auswerten und deine Servokanäle auswerten.
Für Telemetrie benötigst du einen zweiten inverter (oder einen 2. Transistor) um von TX wieder auf SBUS zu kommen.

Das Bild zeigt bereits 2 Inverter, in diesem Fall mit Transistoren aufgebaut.

Du kannst auch einen hiervon verwenden:

SN74LVC2G04

In diesem IC sind 2 Inverter integriert. So in etwa habe ich das verwendet.


Zum Vario bzw weitere Sensoren.
Der eigentlich Code ist ja nicht von mir. Ich habe es nur vereinfacht und für die Arduino IDE ein Projekt erstellt.
Der ursprüngliche Code war als Castle Creation Telemetrie zu Futaba Telemterie Adapter gebaut. Daher kein Vario.

Aber auf folgender Seite sind sehr viele Sensoren entschlüsselt worden. (Am besten den google Übersetzer nutzen)

https://sites.google.com/site/sbus2diy/home

Wenn man sich dann den Code der bereits implementierten Sensoren anguckt, sieht man das Prinzip und könnte auch ein Vario (F1672 und F1712) einfügen.
Bin dort auch gerne behilflich.
Habe nur in meinen Booten selber keinen Bedarf an einem Vario.:D

Dazu sollte man eventuell erwähnen das nur Sensoren die Futaba anbietet nachbauen kann. Diese müssen natürlich auch entschlüsselt sein:rolleyes:

Weitere Information:

Die Slots können natürlich frei gewählt werden zwischen 1 und 31.
Dabei sollte man ein paar Dinge beachten bzw verstehen.
Einige Sensoren benötigen mehrere Slots. z.B. der Sensor F1678 belegt 3 Slots (Strom, Kapazität, Spannung)
der GPS Sensor belegt sogar 8 Slots wenn ich mich nicht irre.

Deswegen ist der Sensor F1678 (Current Slot) auf Slot 3 (Slot 4 und Slot 5). Der Nächste freie ist Slot 6.

Futaba kann aber nur 8 Slots am Stück senden!
Slot 0-7
Slot 8 bis 15
Slot 16 bis 23
Slot 24 bis 31

Das bedeutet der Current Sensor kann niemals auf Slot 6 oder Slot 7 gelegt werden.

Weitere Information:
Slot 0 ist immer RX Voltage und wird automatisch vom Empfänger belegt.
Daher kann z.b. der GPS Sensor mit 8 Slots nur auf Slot 8, Slot 16 oder Slot 24 gelegt werden.


So jetzt habe ich genug Verwirrung verbreitet ;)
 
Ich selber habe XOR Logik Gatter verwendet. Über einen GPIO kann ich so zwischen invertierter und nicht-invertierter UART umschalten (Futaba oder Jeti Telemetrie

Umschaltung zwischen Futaba und Jeti funktioniert. Im Moment lade ich noch 2 unterschiedliche Sketches. Soll aber zur Laufzeit (bzw beim booten ausgewählt werden. (Geladen aus EEPROM)
Die Hardware bleibt aber immer die gleiche.

Die Daten zum Senden sollen später über I2C übertragen werden. So kann Sensor und Telemetrie unabhängig voneinander betrieben werden
Über I2C wird dann auch das Telemetrie Protokoll ausgewählt.
 
Warum eigentlich Jeti ?
Jeti wird doch vom OXS komplett unterstützt.

Futaba und Jeti haben bei mir Priorität weil ich beide Systeme habe/nutze. Außerdem Bilden sie technisch 2 Unterschiedliche Welten ab: Invertierte UART und Nicht Invertierte UART. Wenn das funktioniert geht auch alles andere und ist nur eine Frage des Codes.
Die anderen Telemetriesysteme werden nach und nach ergänzt.

Natürlich könnte ich auch OXS einsetzen für "die anderen Systeme"
Aber dann bin ich immer gezwungen verschiedene Sketches zu flashen.
Ich möchte aber gerne zwischen den protokollen umschalten. Und Futaba wird nicht von OXS unterstützt. Die Gründe sind bekannt.

Daher möchte ich hier eine kleine Doku erstellen wie die Futaba Telemetrie bei mir eingesetzt und weiterentwickelt/genutzt wird.
 
Ein interessantes Projekt. Wenn es erfolgreich ist könnte man darüber nachdenken es den oxs entwicklern zu geben: wenn das ganze über einen externen Inverter gelöst ist wird es ja vielleicht wieder möglich zu implementiren...
 
Warum verwendet ihr nicht den Atxmega? Die giebts in der selben Bauform wie den 328 und der kann Pins invertieren. Den habe ich bis jetzt für Futaba verwendet. Durch die sehr saubere interne kalibrierung ist es auch problemlos möglich ohne externen Quarz zu arbeiten.
Gruß Ralf
 
Ein interessantes Projekt. Wenn es erfolgreich ist könnte man darüber nachdenken es den oxs entwicklern zu geben: wenn das ganze über einen externen Inverter gelöst ist wird es ja vielleicht wieder möglich zu implementiren...

ganz so einfach wird es nicht.

OXS arbeitet mit der SoftUART für Telemetrie. Und nutzt die HardwareUART für Sensoren z.B. GPS

Leider läuft Futaba's SBUS/2 mit 100000 Baud. Das wird nichts mit SoftUART. Höchstens wenn man den Atmega328P übertaktet. Das ist dann aber nicht mehr Plug&Play
 
Warum verwendet ihr nicht den Atxmega? Die giebts in der selben Bauform wie den 328 und der kann Pins invertieren. Den habe ich bis jetzt für Futaba verwendet. Durch die sehr saubere interne kalibrierung ist es auch problemlos möglich ohne externen Quarz zu arbeiten.
Gruß Ralf

1. Grund bisher gibt es nur Futaba Code für den 328P. Wie kompatibel der zum XMega ist, weiß ich nicht. Kannst du uns dazu ein paar Informationen geben? Eine interne invertierung wäre natürlich sehr interessant.
Würdest du deinen Futaba Code mit uns teilen?

2. Der für mich wichtigste grund: Alle Telemetrieprotokolle (Futaba, Jeti Hott, FRsky Flysky) sind als Arduino Library für den 328P verfügbar.
 
Ich habs mal in Bascom programmiert, alle Funktionen für die Telemetrie sind komplett in Interrups untergebracht, so wird eigentlich das Hauptprogramm gar nicht gebremst.
Hier in den Beispiel Code der Futaba JETCAT Turbinen ECU Sensor (ohne ECU auswertung )




Die Invertierung funktioniert einfach so:
Portc_pin3ctrl.6 = 1
Portc_pin2ctrl.6 = 1


damit wird einfach jede Finktion am Pin invertiert :)

der XMega wird auch von Arduino unterstützt.


Gruß Ralf


Code:
'-----------------------------------------------------------

'-----------------------------------------------------------
$regfile = "xm16a4def.dat"
$crystal = 32000000
$hwstack = 64
$swstack = 40
$framesize = 40

$lib "xmega.lib"
'$external _xmegafix_clear
'$external _xmegafix_rol_r1014
Config Osc = Enabled , 32mhzosc = Enabled

'configure the systemclock
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1

'Interrupt Level Configuration
Config Priority = Static , Vector = Application , Lo = Enabled , Med = Enabled , Hi = Enabled       'config interrupts

'Futab FAST
Config Com1 = 100000 , Mode = Asynchroneous , Parity = Even , Stopbits = 2 , Databits = 8       ', Clockpol = 0
'On Usartc0_txc Sende
'Enable Usartc0_txc

On Usartc0_rxc Fast
Enable Usartc0_rxc

On Usartc0_txc Ouz
Enable Usartc0_txc

Enable Interrupts
'--------------------[Main Loop]------------------------------------------------

Dim Z As Byte
 Dim T As String * 15

'Timer C0 für Byte erkennung
Config Tcc0 = Normal , Prescale = 4
On Tcc0_ovf Slot_timing
Enable Tcc0_ovf , Hi


Config Tcd0 = Normal , Prescale = 4
On Tcd0_ovf No_data
Enable Tcd0_ovf , Hi

 'Timer C0
Config Tcc1 = Normal , Prescale = 1024
Tcc1_per = 31250                                            

On Tcc1_ovf Sekunden_isr                                    
Enable Tcc1_ovf , Lo


Config Portd.0 = Output
Led Alias Portd.0
Gosub Futaba_in
Dim Byterec As Byte
Byterec = 0
Dim B As Word
'Uarts inertieren
Portc_pin3ctrl.6 = 1
Portc_pin2ctrl.6 = 1
Usartc0_data = 50


Dim Slot As Byte
Dim Sendestep As Byte
Dim Slotstack As Byte
Dim Dummy As Byte
Dim Slot_werte(32) As Word
Dim Firstbyte(32) As Byte
'Zeitslot 1 Abfragenummer 0x4
'Firstbyte(0) = wird vom Empfänger belegt
Firstbyte(1) = 131
Firstbyte(2) = 67
Firstbyte(3) = 195
Firstbyte(4) = 35
Firstbyte(5) = 163
Firstbyte(6) = 99
Firstbyte(7) = 99
'Zeitslot 2 Abfragenummer 0x14
Firstbyte(8) = 19
Firstbyte(9) = 147
Firstbyte(10) = 83
Firstbyte(11) = 211
Firstbyte(12) = 51
Firstbyte(13) = 179
Firstbyte(14) = 115
Firstbyte(15) = 243
'Zeitslot 3 Abfragenummer 0x24
Firstbyte(16) = 11
Firstbyte(17) = 139
Firstbyte(18) = 75
Firstbyte(19) = 203
Firstbyte(20) = 43
Firstbyte(21) = 171
Firstbyte(22) = 107
Firstbyte(23) = 235
'Zeitslot 4 Abfragenummer 0x34
Firstbyte(24) = 27
Firstbyte(25) = 155
Firstbyte(26) = 91
Firstbyte(27) = 219
Firstbyte(28) = 59
Firstbyte(29) = 187
Firstbyte(30) = 123
Firstbyte(31) = 251

Dim Slot_aktiv As Long
Slot_aktiv = 0
Dim Aktiver_slot As Byte
'
Slot_aktiv.10 = 1
Slot_aktiv.9 = 1
Slot_aktiv.11 = 1
Slot_aktiv.12 = 1
Slot_aktiv.13 = 1
Slot_aktiv.15 = 1
Slot_aktiv.14 = 1
Slot_aktiv.8 = 1
Slot_aktiv.16 = 1
Slot_aktiv.17 = 1
Slot_aktiv.18 = 1
Slot_aktiv.19 = 1
Slot_aktiv.20 = 1
Slot_aktiv.21 = 1
Slot_aktiv.22 = 1

Dim X As Word
For X = 1 To 32 Step 1
Slot_werte(x) = 19
Slot_werte(x) = 19
Next X
B = 0

'drehzahl x100 bit 14 auf 1
Dim Drehzahl As Word

'temperatur x1
Dim Temperatur As Word

'Pumpenspannung (V) x,xx
Dim Pumpenspannung As Word

'Solldrehzahl x100
Dim Solldrehzahl As Word

'Schub in Newton (x,x)
Dim Newton_schub As Word

'angabe in ml
Dim Rest_kraftstoff As Word

'verbrauch ml(min
Dim Kraftstoffverbrauch As Word

'Kraftstoffqualität in %
Dim Kraftstoffqualitat As Word

'ECU Batterie x,xx
Dim Ecu_batt As Word

'ECU STROM x,x
Dim Strom As Word



'#####################################################################
'########  Hauptprogrammschleife


Do




'#####################  
'Hier Daten in die Einzelnen Slots Schreiben
'Beispiel JETCat ECU

Slot_werte(20) = Status_ecu_sum
Slot_werte(21) = Versioni
Slot_werte(19) = 0
Slot_werte(18) = Strom
Slot_werte(17) = Ecu_batt
Slot_werte(16) = Kraftstoffqualitat
Slot_werte(15) = 0
Slot_werte(14) = Kraftstoffverbrauch
Slot_werte(11) = Solldrehzahl
Slot_werte(12) = Newton_schub
Slot_werte(13) = Rest_kraftstoff
Slot_werte(10) = Pumpenspannung
Slot_werte(9) = Temperatur
Slot_werte(8) = Drehzahl
Slot_werte(8).14 = 1

Loop


' ###########   ENDE Hauptprogramm   ######################################
'##########################################################################





Fast:
Z = Usartc0_data
Incr Byterec
If Byterec = 25 Then
   Slot = 99
   If Z = 20 Then Slot = 8
   If Z = 4 Then Slot = 0
   If Z = 36 Then Slot = 16
   If Z = $34 Then Slot = 24
      Disable Usartc0_rxc
   Slotstack = 0
   Tcc0_cnt = 48500
   Start Tcc0
End If
'If Z = 20 Then
Tcc0_cnt = 48500
'reset byte resetter
Tcd0_cnt = 64000
 Toggle Led
Return









Futaba_out:
Portc.3 = 1
Disable Usartc0_rxc
Config Portc.3 = Output
Usartc0_ctrlb.3 = 1

Return



Futaba_in:
Config Pinc.3 = Input
Usartc0_ctrlb.3 = 0
Usartc0_status.7 = 0
Usartc0_ctrlb.4 = 1
Dummy = Usartc0_data
Dummy = Usartc0_data
Dummy = Usartc0_data
Enable Usartc0_rxc
Return



Slot_timing:
'Tcd0_cnt = 61000
Incr Slotstack
If Slot_aktiv.slot = 1 Then
Aktiver_slot = Slot
Gosub Futaba_out
Usartc0_data = Firstbyte(slot)
Sendestep = 1
End If
Byterec = 0

'Toggle Led
Incr Slot
If Slotstack < 8 Then
Tcc0_cnt = 60200
Else
Gosub Futaba_in
End If
Return








Ouz:
Incr Sendestep
'If Sendestep = 3 Then Usartc0_data = Aktiver_slot
'If Sendestep = 2 Then Usartc0_data = 64

If Sendestep = 3 Then Usartc0_data = Low(slot_werte(aktiver_slot))
If Sendestep = 2 Then Usartc0_data = High(slot_werte(aktiver_slot))
If Sendestep = 4 Then Gosub Futaba_in
Return
 
Ich habs mal in Bascom programmiert, alle Funktionen für die Telemetrie sind komplett in Interrups untergebracht, so wird eigentlich das Hauptprogramm gar nicht gebremst.


der XMega wird auch von Arduino unterstützt.

Schön das auch andere am Futaba Telemetrie System arbeiten.

Für mich kommt der XMeag aber nicht infrage. Viele (alle?) Telemetriebibliotheken haben Low Level (Register) funktionen die alle umgeschrieben werden müssten. Außerdem ist der Atmega328P an jeder Ecke für ein paar Euro zu bekommen (Arduino Pro Mini usw)
Für ein einzel Futaba Projekt aber durchaus interessant.
 
Auf der neuen Revision die gerade designed wird (zu 90% fertig) kommen 2 zusätzliche Mikrocontroller dazu (Atmega 328P -> Arduino)
Der 1. Controller wird nur messen (Spannung/Strom/Temperatur/Drehzahl usw) und auf der SD Card Speichern. Ausserdem werden die Daten an den 2.Mikrocontroller gesendet (via i2c oder Softserial). Der 2. Mikrocontroller ist nur für die Telemetrie zuständig.
Ursprüglich sollte alles auf einem Controller laufen, aber es gibt dabei ein paar Probleme. Und die einfachste Lösung war ein 2. Controller (2€ mehr...was solls).

So, ein paar Neuigkeiten.

Offtopic:
Der neue Prototyp meines Brushlessreglers ist aufgebaut und prgrammiert mit Futaba Telemetrie.
Soweit funktioniert alles, zumindest was die Telemetrie angeht.

Ontopic:
Bei programmieren des Reglers ist mir aufgefallen, dass die aktuelle Version meiner SBUS2 Library nicht ideal ist.
Daher habe ich für das Projekt die Library umgeschrieben.

Die Änderungen werde ich demnächst auch ins Git übernehmen.

Die Initialisierung erfolgt ohne Parameter und den Sensoren wird der Slot mit übergeben:

SBUS2_Setup();

send_temp125(TEMPRATURE_SLOT1,tempAVG);
send_temp125(TEMPRATURE_SLOT2,tempAVG);
send_temp125(TEMPRATURE_SLOT3,tempAVG);
send_temp125(TEMPRATURE_SLOT4,tempAVG);
send_temp125(TEMPRATURE_SLOT5,tempAVG);
send_RPM(RPM_SLOT,RPM);
send_s1678_current(CURRENT_SLOT, current, capacity, voltage);

So lassen sich sehr leicht mehrere Sensoren kombinieren. Man muss nur aufpassen, das man keine Slot's durcheinander bringt, bzw richtig verteilt.
Das lässt sich aber nicht so einfach umgehen und war vorher auch so.

Ich werde aber versuchen eine entsprechende prüfung einzubauen.

Außerdem möchte ich mich mal an den Vario und GPS Sensoren versuchen. Theoretisch ist alles klar.


P.s. Gibt es überhaupt schon einen Diy Sensor basierend auf meiner Library?
 

onki

User
Hallo,

ich hab mich leider ausgeklinkt. Ohne eigene Hardware wird es nahezu unmöglich einen Durchflusssensor zu "entwickeln".
Ich denke das ist auch bei der (meiner Meinung nach mit der heißen Nadel gestrickten) Telemetrie nicht geplant, sonst gäbe es schon lange so etwas.
Zudem geht mir die proprietärte Futaba-Lösung gewaltig auf den Zeiger. Daher tu ich mir Futaba nicht an.

Gruß
Onki
 
Ich kann dich gut verstehen.

Es gibt wirklich bessere Telemetrieprotokolle.


Für mich ist es nur interessant, ob es sich lohnt Zeit in die Library zu stecken.
Für mich alleine brauche ich keine öffentliche Github Library.
Und überall wo ich die Library bekannt gemacht habe kommt exakt 0 feedback.
 

onki

User
Hallo,

ich möchte dich keineswegs entmutigen. Meinen großen Respekt all denen die so etwas realisieren und zur Verfügung stellen.

Ich bin aber eher der Typ "Configfileanpasser" und umgehe es selbst Code zu schreiben, weil ich außer den üblichen Mickymaus-Turbopascal-Programmen in den 80ern nie was aktuelles gemacht habe.
Der Durchflussmesser wäre vermutlich eh eine Nummer zu groß für mich und ohne OpenXSensor Implementierung ziemlich unrealistisch.

Gruß
Onki
 
Meine Library sollte auch kein Plug&Play Arduino Sensor Projekt sein.

Allein wegen der zusätzlichen Hardware ist es doch eher für "fortgeschrittene"


Der Einstieg ist definitiv gemacht.
Nur wenn ich weitere Änderungen und Sensoren teste, brauche ich Zeit und Geduld.
Und ich sehe dort aktuell kein Bedarf.
Ich könnte auch Hardware anbieten für die Arduino Pro Mini's.
Aber auch dort sehe ich offensichtlich kein Bedarf.


Solche Github/Open Source Projekte leben davon das Leute sie nutzen und feedback geben.
In dem Fall ist "Futaba Arduino Telemetrie" wohl dem untergang geweiht.
 

onki

User
Hi,

für mich ist eher Futaba selbst dem Untergang geweiht :D.
Wer so innovationslos ist und nach dem Telemtrie-Zickzackkurs wäre das die logische Konsequenz.

Gruß
Onki
 
Hi,

für mich ist eher Futaba selbst dem Untergang geweiht :D.
Wer so innovationslos ist und nach dem Telemtrie-Zickzackkurs wäre das die logische Konsequenz.

Gruß
Onki

Nunja. Ich nutze Futaba aus ganz bestimmten Gründen. Und viele die ich kenne tun das aus dem selben Grund.

Kein Zweifel, für diese Umsetzung der Telemetrie gehört Futaba links und rechts geohrfeigt.
Aber wen stört sowas? Leute die selber Sensoren bauen wollen. Wie viele sind das?

Ich würde auch gerne komplett auf Jeti umsteigen. Die habe ein nahezu perfektes Telemetrie Protokoll.
Aber leider extrem teuer, und eigentlich nur 2 Sender im Angebot.
 
...
Ich würde auch gerne komplett auf Jeti umsteigen. Die habe ein nahezu perfektes Telemetrie Protokoll.
Aber leider extrem teuer, und eigentlich nur 2 Sender im Angebot.

OT an:

es sind inzwischen 6 ernstzunehmende Sender - in diesem Jahr gibt es einen Sender für 600 € der wohl gar nicht schlecht sein wird.

Und teuer relativiert sich bei einem Einschlag schnell ...

OT aus

Gruß

gecko
 
Ansicht hell / dunkel umschalten
Oben Unten