Turnigy 9X und Frsky Vario

Status
Nicht offen für weitere Antworten.

Rangarid

Erfahrener Benutzer
#1
Es gibt bereits ein Thema zur Taranis und dem Frsky Vario, aber noch nichts zur 9X. Da diese etwas anders ist in manchen Sachen in der Firmware möchte ich deshalb gerne ein eigenes Thema dazu aufmachen.

Vgl. Tarans <--> 9x:

Seit Juli 2013 wurde bei der 9X rausgenommen, dass die Fernsteuerung ein Geräusch erzeugt wenn das Flugzeug sinkt, bei der Taranis kann man aber für Steigen und Sinken die Werte einstellen:

Taranis:

Limit [maximales sinken] [ab welchem Sinkwert piepen] [ab welchem Steigwert piepen] [maximaler Steigwert]

Die 9X hat quasi das selbe, nur dass die Einstellungen für das Sinken herausgenommen wurden. Das werde ich mal wieder einfügen, denn auch das ist für die Leute, die mit Vario fliegen eine wichtige Info. Warum das überhaupt rausgenommen wurde steht nicht im Log, mal schauen ob ich dazu noch Infos finde.

Desweiteren werden die Geräusche die die Funke ausgibt angepasst. Momentan sind die Geräusche ziehmlich lästig. In Zusammenarbeit mit dem Taranis Thread wird ein Variogeräusch erzeugt was von der Art ungefähr wie dieses ist:

http://www.youtube.com/watch?v=NB_vknk4_vw

Weiteres in kürze...


1. Update
Test verlief erfolgreich. Sinktöne sind jetzt wieder drin.

Dann geht es jetzt auf zum zweiten Schritt, zur Verbesserung der Töne.
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
#2
Also rausgenommen wurde es, weil der eingebaute Buzzer nicht so gut tiefere Töne abspielen kann...Komische Erklärung wo doch eh empfohlen wird den zu wechseln um Audio zu nutzen...
 

Rangarid

Erfahrener Benutzer
#3
So...Ich spiele weiter. Neues Problem aufgetaucht...Es gibt nicht wie bei dem Code für die Taranis eine richtige Frequenz, sondern die Werte sind [0...255]. Wie man daraus die Frequenz ableiten soll ist mir schleierhaft, aber dann gibt es eben nur 255 verschiedene Töne anstatt 5000. Aber selbst mit 255 Tönen sollte man ein gutes Vario hinkriegen.

Der bereinigte Quellcode sieht momentan so aus:
PHP:
cli();
int16_t verticalSpeed = frskyData.hub.varioSpeed;
sei();

int16_t varioCenterMax = (int16_t)g_model.frsky.varioCenterMax * 10 + 50;
//vario indicates rising
if (verticalSpeed >= varioCenterMax) {
    verticalSpeed = verticalSpeed - varioCenterMax;
    int16_t varioMax = (10+(int16_t)g_model.frsky.varioMax) * 100;

    //if vertical speed > max rising rate set vertical speed to max rising
    if (verticalSpeed > varioMax)
        verticalSpeed = varioMax;

    verticalSpeed = (verticalSpeed * 10) / ((varioMax-varioCenterMax) / 100);
} else {
    //vario indicates sinking
    int16_t varioCenterMin = (int16_t)g_model.frsky.varioCenterMin * 10 - 50;
    if (verticalSpeed <= varioCenterMin) {
        verticalSpeed = verticalSpeed - varioCenterMin;
        int16_t varioMin = (-10+(int16_t)g_model.frsky.varioMin) * 100;

        //if vertical speed < max sinkrate set to max sink rate
        if (verticalSpeed < varioMin)
            verticalSpeed = varioMin;

        verticalSpeed = (verticalSpeed * 10) / ((varioCenterMin-varioMin) / 100);
    } else {
        return;
    }
}
 
uint8_t SoundVarioBeepTime;
uint8_t SoundVarioBeepFreq;
        
if (verticalSpeed > 0){
    SoundVarioBeepTime = (8000 - verticalSpeed * 5) / 100;
    SoundVarioBeepFreq = (verticalSpeed * 4 + 8000) >> 7;
} else {
    SoundVarioBeepTime = 20;
    SoundVarioBeepFrequency = (verticalSpeed * 3 + 8000) >> 7;
}
s_varioTmr = tmr10ms + (SoundVarioBeepTime/2);
    
AUDIO_VARIO(SoundVarioBeepFreq, SoundVarioBeepTime);
Wenn ich den Code richtig interpretiere und mit meinen ersten Tests vergleiche passt die Sinkrate schonmal zu dem was im Video oben beim sinken passiert. Es wird ein Dauerton gespielt der tiefer ist als die Töne beim steigen:
PHP:
SoundVarioBeepTime = 20;
SoundVarioBeepFrequency = (verticalSpeed * 3 + 8000) >> 7;

//add 20/2 = 10ms to timer
s_varioTmr = tmr10ms + (SoundVarioBeepTime/2);
Ob die Töne aber von der Frequenz her passen wird sich zeigen. leider ist das Vario momentan noch zu ungenau mit einer Auflösung von nur 0,5m/s (angegeben wurde 0,1m/s). Hier muss ich also erstmal auf ein Update der Vario Firmware warten. Hoffentlich kommt das bald...

Alternativ könnte man auch einfach die Höhe nehmen und den Vertical Speed selber berechnen falls das mit dem Update nichts wird. Da es aber anscheinend wirklich bald kommen soll warte ich erstmal ab.

UPDATE 1:
Nach langem suchen konnte ich nun endlich die Stelle finden, wo man die Höhe nicht nur in 1m Schritten angezeigt bekommt, sondern auch mit Kommazahlen arbeiten kann. So kann ich mir mal anhand der Höhe anschauen, wie es um die Genauigkeit des Varios bestellt ist.

UPDATE 2:

Modifikationen bisher:

1. Veränderung des Limit Menüs zum Einstellen der Sinktöne:

2. Hinzufügen der Sinktöne im Tongenerator (siehe quelltext oben)
3. Baro Höhe in der Telemetrieanzeige von natürlicher Zahl in Kommazahl geändert um vertical speed mit tatsächlicher Höhenänderung vergleichen zu können
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
#5
Ja OpenTx. Updaterate kann ich dir garnicht genau sagen. Das Vario läuft ja eigentlich über den Smart Port, deshalb nehm ich an in Verbindung mit den normalen Telemetrieempfängern der D-Serie wird das ganze über die User Daten übertragen. Ich nehme an für Höhenänderung in der Funke zu berechnen ist das ganze zu langsam - das geht einfach besser im Flieger direkt am Baro. Deshalb warte ich erstmal das Update ab das kommen soll.

Aber ich hab ne Möglichkeit gefunden, das Vario über den Throttlestick zu emulieren:

in maths.cpp:
PHP:
int16_t verticalSpeed = getValue(MIXSRC_Thr);//frskyData.hub.varioSpeed;
Der Wert geht dann von -1024 - +1023 was dann -10,24m/s - +10,23m/s an vertical Speed entspricht. So kann man zumindest schonmal die Töne anpassen und sehen ob alles funktioniert, ohne dass man dauernd das Vario anklemmen muss.
 

helle

Erfahrener Benutzer
#6
Hy,

ja damit haben wir schon früher alle mögliche Werte simuliert
als die Sensoren selbst noch nicht verfügbar waren.

int16_t verticalSpeed = getValue(MIXSRC_Thr);

Helle
 

Rangarid

Erfahrener Benutzer
#7
Funktioniert gut. Problem dabei ist nur, dass ein Empfänger gebunden und Telemetrie verbunden werden muss. Man muss also doch wieder jedesmal alles zusammenstecken wenn man kein USB rausgeführt hat...
 

rossi

Erfahrener Benutzer
#8
Na das kommt ja perfekt zur Fertigstellung meines OpenxVario. Ich hab mich nämlich auch schon geärgert, dass die Töne beim Sinken rausgeworfen wurden. Wenn es wenigstens konfigurierbar wäre oder eine Compileroption. Aber sang und klanglos gestrichen ist irgendwie Futaba und Graupner gebaren - gibts nur für 100€ mehr im nächstteureren Sender...

Eine Frage hab ich noch zum allgemeinen Variobetrieb - ich musste bei mir das Piepsen des Varios in den Custom Functions auf einen Schalter legen um es zu aktivieren. Ist das so gewollt oder kann man auch irgendwo einstellen, dass es immer an ist? (Und damit meine ich jetzt nicht in den Custom Functions MAX auf Vario geben sondern so eine "Grundsätztich immer und sowies auf jeden Fall piepsen an" Funktion.

Wann wird denn die Steigen/Sinken Option in der Firmware wieder drin sein?
 

Rangarid

Erfahrener Benutzer
#9
Also das was ich hier mache ist halt Anpassung an meine Bedürfnisse. Ob das jemals wieder reinkommt ist halt die Frage. Jetzt wo es die Taranis, Ersky9x, Gruvin9X, 9XR gibt und die 9XR-Pro demnächst rauskommt, kommt es mir so vor als wird der 9X-Teil nichtmehr so richtig gepflegt, mir sind schon ein paar Sachen aufgefallen. z.B. das man bei Baro Alt keine Kommazahl in der 9X bekommt, bei allen andern aber schon...

Außerdem wurden irgendwie verrückt die Sachen für Smartport und Sensor Hub bei der 9X zusammengemischt da die durch das Vario z.B. ja Smart Port Sachen empfängt aber eigentlich keinen Smart Port hat.

Hier übrigens mal ein Video mit Tonbeispiel für Steigen und Sinken. Ist noch der Originalcode. Habe halt nur das Sinken wieder aktiviert. Als Lautsprecher habe ich einen alten In-Ear Kopfhörer aufgeschnitten und angelötet (Buzzer abgelötet). Ist jetzt etwas leiser, aber noch gut hörbar und von der Tonqualität um einiges besser.

Ganz so schlimm hört sich das Vario in meinen Augen eigentlich nicht an. Zumindest die Sinktöne sind den gegebenen Möglichkeiten entsprechend OK. Bei den Steigungstönen könnte man die Anzahl der Piepser noch etwas verlangsamen...

http://www.youtube.com/watch?v=Ddi3GPr9NBk

Vario dauerhaft an würde ich nicht machen. Wie du hörst sind die Töne auf dauer doch recht nervig. Da ist es schon gut, dass man sie über einen Schalter abstellen kann...Aber sollte prinzipiell möglich sein.
 
Zuletzt bearbeitet:

rossi

Erfahrener Benutzer
#10
Hi Rangarid,
ich muss jetzt nochmal nachfragen - hast du an diesem Thema noch was gemacht oder ist der Code wie du ihn hier bereitstellst dein letzter Stand?
Und: Wenn ich diese Änderung mache kann ich wie im Screenshot gezeigt Steigen und Sinken in 0,1m Auflösung einstellen?
 

Rangarid

Erfahrener Benutzer
#11
Eigentlich hab ich garnichts weiter dran gemacht. Hab ja jetzt eine Taranis. Bin aber mal mit den originalen 9X Variotönen geflogen und das geht eigentlich auch ganz gut, wenn man nicht das echte eines Seglers gewohnt ist.

Um die Sinktöne zu aktivieren musst du in der Menüstruktur was ändern, dann zeigt er dir die Sinktöne an. Kann später mal schauen wo das war. Ich hab aber aufgegeben die Töne zu verbessern, weil die Tonerzeugung in der 9X nicht wirklich viele Frequenzunterschiede zulässt (255 Werte decken den kompletten nutzbaren Frequenzbereich ab).

Ah hier isses.


Also in der Datei menu_model.cpp:
https://github.com/opentx/opentx/blob/master/src/gui/menu_model.cpp

folgende Änderungen:
Zeile 4657:
Code:
#if defined(PCBSTD)

  #define VARIO_RANGE_ROWS 1
#else
  #define VARIO_RANGE_ROWS 3
#endif
Bei PCBSTD VARIO_RANGE auf3 machen


Und weiter unten ab Zeile 4849:
Code:
#if defined(PCBSTD)
        lcd_outdezAtt(TELEM_COL2, y, 5+g_model.frsky.varioCenterMax, (m_posHorz==0 ? attr : 0)|PREC1|LEFT);
        lcd_outdezAtt(TELEM_COL2+8*FW, y, 10+g_model.frsky.varioMax, (m_posHorz==1 ? attr : 0));
        if (attr && (s_editMode>0 || p1valdiff)) {
          switch (m_posHorz) {
            case 0:
              CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMax, -15, +15);
              break;
            case 1:
              CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMax, -7, 7);
              break;
          }
        }
#else
        lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, (m_posHorz<=0 ? attr : 0)|LEFT);
        if (g_model.frsky.varioCenterMin == -16)
          lcd_putsAtt(TELEM_COL2+4*FW-2, y, STR_OFF, m_posHorz==1 ? attr : 0);
        else
          lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, ((m_posHorz<0 || m_posHorz==1) ? attr : 0)|PREC1);
        lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, ((m_posHorz<0 || m_posHorz==2) ? attr : 0)|PREC1);
        lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, ((m_posHorz<0 || m_posHorz==3) ? attr : 0));
        if (attr && (s_editMode>0 || p1valdiff)) {
          switch (m_posHorz) {
            case 0:
              CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMin, -7, 7);
              break;
            case 1:
              CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -16, 5+min<int8_t>(10, g_model.frsky.varioCenterMax+5));
              break;
            case 2:
              CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMax, -5+max<int8_t>(-10, g_model.frsky.varioCenterMin-5), +15);
              break;
            case 3:
              CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMax, -7, 7);
              break;
          }
        }
#endif
Da musst du für PCBSTD quasi auch einstellen, dass alle 4 angezeigt werden statt nur 2.

ich glaub das wars...
 
Zuletzt bearbeitet:

Rangarid

Erfahrener Benutzer
#13
Bin mir nichtmehr sicher was ich da gemacht hatte...Probiers einfach mal aus. Ich glaub du musst die X- und Y-Positionen noch irgendwie anpassen...
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten