OXSENS openXsensor mit HOTT Protokoll, erste Tests

Wie geht es jetzt weiter? Was sind die nächsten Schritte? Was können/sollen wir testen und liefern?
Stromsensortest wäre noch zu machen, Einzelzellenspannungen müsste noch getestet werden, Airspeed ist in Arbeit. Außerdem besteht die Möglichkeit, den oXs über einen PPM-Kanal des Empfängers zu steuern. Man kann z.B. die Varioempfindlichkeit ändern, oder die Totalenegiekompensation des Vario über den airspeed-sensor regeln. Das sind aber eher Tests für die Segelfliegerfraktion.

Wie immer steht alles exakt in der oXs.config.description.h, wie immer leider in englisch.
 

Poettie

Erfahrener Benutzer
Das GPS wird von oXs konfiguriert, da es viele GPS-Ausführungen gibt, die sich die Konfiguration nicht merken können, weil falsche Speicherchips verbaut wurden. D.h. anschließen und es sollte funktionieren, wenn es noch die Werkskonfiguration hat, oder den Speicherfehler. Die Koordinaten liegen allerdings daneben, weil noch ein Fehler in der Umrechnung existiert.
Das klingt schonmal sehr gut. Genau das Problem hab ich nämlich mit meinen GPSen. Da freu ich mich doch um so mehr aufs Ausprobieren :) ... auch wenn die Position noch nicht genau angezeigt wird ... Hauptsache auf der Funke kommt schonmal was an.
 
Stromsensortest wäre noch zu machen, Einzelzellenspannungen müsste noch getestet werden, Airspeed ist in Arbeit. Außerdem besteht die Möglichkeit, den oXs über einen PPM-Kanal des Empfängers zu steuern. Man kann z.B. die Varioempfindlichkeit ändern, oder die Totalenegiekompensation des Vario über den airspeed-sensor regeln. Das sind aber eher Tests für die Segelfliegerfraktion.

Wie immer steht alles exakt in der oXs.config.description.h, wie immer leider in englisch.

Ich baue an einem Stromsensor, kann aber noch ein paar Tage dauern, bis ich das testen kann.

Was weiterhin nicht geht ist Telemetrie mit Gr-12, habe einen zweiten GR-12 Empfänger getestet, auch bei diesem funktioniert es nicht!
 
Was weiterhin nicht geht ist Telemetrie mit Gr-12, habe einen zweiten GR-12 Empfänger getestet, auch bei diesem funktioniert es nicht!
Wir hatten anfangs ein relativ großes delay in der Telemetrie. Mstrens hat zwei Änderungen gemacht, dann war es OK. Eine Änderung war diese:

"I reduce the delay between sending 2 bytes from 2msec to 1 msec. So oXs takes less time to send the 45 bytes of data.
I hope it works because Hott spec says 2 msec (but other projects uses less)."

Könnte das die Ursache sein, warum es mit den GR-12 nicht geht?
 
Wir hatten anfangs ein relativ großes delay in der Telemetrie. Mstrens hat zwei Änderungen gemacht, dann war es OK. Eine Änderung war diese:

"I reduce the delay between sending 2 bytes from 2msec to 1 msec. So oXs takes less time to send the 45 bytes of data.
I hope it works because Hott spec says 2 msec (but other projects uses less)."

Könnte das die Ursache sein, warum es mit den GR-12 nicht geht?
Kann ich mal versuchen, kannst du mir sagen, wo ich das finden/ändern kann? Sonst suche ich später selber mal danach...
 

Poettie

Erfahrener Benutzer
So, hab das ganze mal aufgebaut und er erkennt den Arduino als Vario ... dabei hab ich die Vario-Zeile in der oXs_config.h auskommentiert:

// ***** 4.1 - Connecting 1 or 2 MS5611 barometric sensor *****
//#define VARIO // set as comment if there is no vario
//#define SENSOR_IS_BMP180 // set as comment if baro sensor is MS5611
//#define VARIO2 // set as comment if there is no second vario
Wie definier ich denn die Spannungsmessung?

// --------- 6 - Voltages & Current sensor settings ---------

// ***** 6.1 - Voltage Reference to measure voltages and current *****
//#define USE_INTERNAL_REFERENCE // uncomment this line if you use 1.1 volt internal reference instead of Vcc
//#define USE_EXTERNAL_REFERENCE // uncomment this line if you use an external reference instead of Vcc
#define REFERENCE_VOLTAGE 4970 // set value in milliVolt; if commented, oXs will use or 1100 (if internal ref is used) or 5000 (if internal ref is not used)

// ***** 6.2 - Voltage parameters *****
#define PIN_VOLTAGE 0 , 8 , 8 , 8 , 8 , 8 // set this line as comment if no one voltage have to be measured, set a value to 8 for the voltage(s) not to be measured.
#define RESISTOR_TO_GROUND 12 , 20 , 30 , 19.8 , 50 , 60 // set value to 0 when no divider is used for a voltage, can contains decimals
#define RESISTOR_TO_VOLTAGE 50 , 100.1 , 200 , 39 , 500 , 600 // set value to 0 when no divider is used for a voltage, can contains decimals
#define OFFSET_VOLTAGE 0 , 0 , 0 , 0 , 0 , 0 // optionnal, can be negative, must be integer
#define SCALE_VOLTAGE 1.1 , 1 , 1 , 1.004, 1 , 1 // optionnal, can be negative, can have decimals

// ***** 6.3 - Max number of Lipo cells to measure (and transmit to Tx) *****
//#define NUMBEROFCELLS 1 // keep this line but set value to 0 (zero) if you do not want to transmit cell voltage.

// ***** 6.4 - Current parameters *****
//#define PIN_CURRENTSENSOR 3
#define MVOLT_AT_ZERO_AMP 2500 // in millivolt
#define MVOLT_PER_AMP 60 // in milliVolt per Amp
#define RESISTOR_TO_GROUND_FOR_CURRENT 19.8 // put as comment or set to 0 if no divider is used
#define RESISTOR_TO_CURRENT_SENSOR 39 // put as comment or set to 0 if no divider is used
Ist das so richtig? Und muss das nicht als General Air Modul erkannt werden wenn ich Spannungen messen will?
 
Interessant das er bei dir als Vario auftaucht! Welchen Sketch hast du ?Normalerweise wird nur das GPS GAM Modul simuliert! Dort auch die Felder für die Spannungsmessung?!
Kannst du Bilder hochladen wie es bei dir aussieht?
 

Poettie

Erfahrener Benutzer
Ja ... :eek: Ich sollte vielleicht einen Empfänger ohne eingebautes Vario nehmen ... Mal schauen ob ich noch irgendwo einen rumliegen hab... Peinlich :rolleyes:
 

Poettie

Erfahrener Benutzer
Also Pin 4 geht an den Telemetrieport und wo muss ich die Spannungsmessung anlegen? Find in der config keinen Pin. Hab erstmal die interne Spannungsreferenz eingeschaltet und A6 als Spannungseingang genommen ...

In der Sensorauswahl der Funke taucht jedenfalls nix auf. Hab einen GR-12s und GR-18 probiert
 
So, hab das ganze mal aufgebaut und er erkennt den Arduino als Vario ... dabei hab ich die Vario-Zeile in der oXs_config.h auskommentiert:



Wie definier ich denn die Spannungsmessung?

// ***** 6.1 - Voltage Reference to measure voltages and current *****
//#define USE_INTERNAL_REFERENCE // uncomment this line if you use 1.1 volt internal reference instead of Vcc
//#define USE_EXTERNAL_REFERENCE // uncomment this line if you use an external reference instead of Vcc
#define REFERENCE_VOLTAGE 4970 // set value in milliVolt; if commented, oXs will use or 1100 (if internal ref is used) or 5000 (if internal ref is not used)

// ***** 6.2 - Voltage parameters *****
#define PIN_VOLTAGE 0 , 8 , 8 , 8 , 8 , 8 // set this line as comment if no one voltage have to be measured, set a value to 8 for the voltage(s) not to be measured.
#define RESISTOR_TO_GROUND 12 , 20 , 30 , 19.8 , 50 , 60 // set value to 0 when no divider is used for a voltage, can contains decimals
#define RESISTOR_TO_VOLTAGE 50 , 100.1 , 200 , 39 , 500 , 600 // set value to 0 when no divider is used for a voltage, can contains decimals
#define OFFSET_VOLTAGE 0 , 0 , 0 , 0 , 0 , 0 // optionnal, can be negative, must be integer
#define SCALE_VOLTAGE 1.1 , 1 , 1 , 1.004, 1 , 1 // optionnal, can be negative, can have decimals

// ***** 6.3 - Max number of Lipo cells to measure (and transmit to Tx) *****
//#define NUMBEROFCELLS 1 // keep this line but set value to 0 (zero) if you do not want to transmit cell voltage.

// ***** 6.4 - Current parameters *****
//#define PIN_CURRENTSENSOR 3
#define MVOLT_AT_ZERO_AMP 2500 // in millivolt
#define MVOLT_PER_AMP 60 // in milliVolt per Amp
#define RESISTOR_TO_GROUND_FOR_CURRENT 19.8 // put as comment or set to 0 if no divider is used
#define RESISTOR_TO_CURRENT_SENSOR 39 // put as comment or set to 0 if no divider is used

Ist das so richtig? Und muss das nicht als General Air Modul erkannt werden wenn ich Spannungen messen will?
Hallo,

eigentlich sollte der oXs als GAM erkannt werden, aber bei HOTT bin ich Laie -- ok ist erledigt, wie ich sehe.

6.1 hier definierst du 4970mV als Referenzspannung
6.2 Arduino PIN A0 liefert die erste und einzige Spannungsmessung
- gegen GND hast du 12 R für A0, der Rest wird nicht ausgewertet, weil die 8 für die restlichen PINs eingetragen ist gegen die Spannung sind es 50 R für A0, Rest wieder egal, ob Ohm, Kilo, Mega, Banane ist egal, nur das Verhältnis zählt
- kein Offsett
- aber ein Multiplikator 1.1, also 10% Aufschlag

mit #define PIN_VOLTAGE 0 , 1 , 2 , 3 , 4 , 5

würdest du 6 Spannungen intern messen (an PIN A0, A1....A5), die du dann als Einzelspannungen (3x) oder Zellenspannung (6x) übermitteln kannst. Hierzu werden dann auch die Widerstandswerte benötigt, Offset und Multiplikator.
Für die ZellenspannungEN wird diese Zeile noch benötigt:

#define NUMBEROFCELLS 3

nimmt z.B. Volt 1-3 als Zellenspannung, dann hast du noch 3 übrig, die du anders nutzen kannst
6.3 nix definiert, weil auskommentiert, aber siehe oben
6.4 nix definiert, weil Zeile 1 auskommentiert ist

Es fehlt noch die Definition, wie die Spannung "Volt 1" gesendet werden soll, es geht z.B.:

#define USE_VOLT_X_AS_BATTERY1 1

hiermit wird Volt1, also die an A0 gemessene Spannung als "Battery1" gesendet

Gruß Bernd
 

Ziege-One

Erfahrener Benutzer
Hi

Ich habe es auch mal getestet:
gr12 geht nicht
gr16 ok

denke ist ein zeitliches Problem

GPS habe ich mit dem Simulator getestet und den Code angepast (aus meinem Naza2Hott)

Code:
void convertLonLat_Hott( int32_t GPS_LatLon, uint16_t * degMin , uint16_t * decimalMin ) {
  /*
  static uint32_t GPS_LatLonAbs ;
  static uint8_t degre0decimals ;
  static uint16_t minute4decimals ;
  static uint8_t minute0decimals ;
  GPS_LatLonAbs = ( GPS_LatLon < 0 ? - GPS_LatLon : GPS_LatLon) / 100  ; // remove 2 decimals from original value which contains degre with 7 decimals (so next calculation are smaller)
  degre0decimals = GPS_LatLonAbs / 100000 ;                              // extract the degre without  decimal
  minute4decimals = ( GPS_LatLonAbs - ( ((uint32_t) degre0decimals) * 100000 ) ) * 6 ; // keep the decimal of degree and convert them in minutes (*60) and remove 1 decimal (/10) in order to keep 4 decimals 
  minute0decimals = minute4decimals / 10000 ;                                        // extract the minutes (without decimals)
  *degMin = degre0decimals * 100 + minute0decimals ;                                  // put degree and minutes toegether in a special format
  *decimalMin = minute4decimals - ( minute0decimals - 10000 ) ;                       // Extract the decimal part of the minutes (4 decimals) 
  */
  static float GPS_LatLonAbs ;
  static float lon=0;
  static uint8_t lon_D=0;
  static uint16_t lon_M=0;
  static uint16_t lon_hott_M=0;
  static uint32_t lon_hott_S=0;
  
  GPS_LatLonAbs = ( GPS_LatLon < 0 ? - GPS_LatLon : GPS_LatLon) / 100  ; // remove 2 decimals from original value which contains degre with 7 decimals (so next calculation are smaller)
  lon =        GPS_LatLonAbs / 100000 ;                                           // XX.XXXXXXX DEG
  lon_D =      (int) lon;                                            // True DEG
  lon_M =      (int) ((lon-lon_D)*60);                               // True MIN
  lon_hott_M = (int) (lon_D*100) + lon_M;                            // Hott MIN
  lon_hott_S = ((lon * 100000) - (lon_D * 100000)) * 6;              // Hott SEC
  lon_hott_S = lon_hott_S % 10000;                                   // Hott SEC

  *degMin =   lon_hott_M;
  *decimalMin  =   lon_hott_S ; 
}
könnt noch gesäuber werden ;)

Ziege-One
 
Mstrens zum GR-12:

"About Gr-12 Rx, I am afraid that there are diffevent versions of the Hott protocol. I think that I implemented version 4. it could be that 12 Rx uses another version. This is just an assumption."

Hat mal jemand die 2ms anstelle 1 ms getestet?

Delay.png

@Ziege-ONE habs mal weitergeleitet
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten