Anzeige Anzeige
flying-circus.de   RC-Network Hangflugführer
Seite 4 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 46 bis 60 von 68

Thema: SBus2 Telemetriesensoren - wer hat schon was selbst gemacht

  1. #46
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    1 Nicht erlaubt!

    Standard Neue SBUS2 Telemetrie Version

    Ich habe auf Github eine neue Version meiner Library hochgeladen.

    - Jetzt können auch Arduino Pro Mini 16MHz verwendet werden
    - Und wie bereits angekündigt die vereinfachten SBUS Funktionen mit entsprechenden Beispiel
    - Jetzt muss niemand mehr in den Source Codes rumpfuschen -> SBUS_Loop(); entfernt


    Inzwischen wurde die Library auch von anderen erfolgreich getestet


    Die nächsten geplanten Weiterentwicklungen sind:
    - Arduino Pro Mini 12MHz (braucht wohl niemand außer mir)
    - Arduino Pro Mini PB (Wattduino) -> Dieser hat zwei Hardware Serials, die Vorteile sind wohl offensichtlich?!
    Like it!

  2. #47
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    1 Nicht erlaubt!

    Standard

    Hier mein Eigenbau Regler mit Futaba Telemetrie

    Ein Video wäre vielleicht besser, aber ich denke ihr glaubt mir wenn ich sage die Daten stammen direkt aus dem Regler
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IMG_20190403_1022288_klein.jpg 
Hits:	10 
Größe:	559,9 KB 
ID:	2113394   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IMG_20190404_0754596_klein.jpg 
Hits:	9 
Größe:	434,3 KB 
ID:	2113395   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IMG_20190404_0755447_klein.jpg 
Hits:	9 
Größe:	382,5 KB 
ID:	2113396  
    Like it!

  3. #48
    User
    Registriert seit
    03.05.2019
    Ort
    Niederlande
    Beiträge
    7
    Daumen erhalten
    0
    Daumen vergeben
    4
    0 Nicht erlaubt!

    Standard

    Hallo Brushlesspower,

    Ich habe Ihre Library mit meinem T10J / R3006SB verwendet. Telemetrie funktioniert wirklich gut. Vielen Dank für diese schöne Library.

    Nur wenn ich zum Beispiel Kanal 5 mit CH5 = SBUS2_get_servo_data(5) gelesen habe; dann bekomme ich regelmäßig -1 als wert. Was mache ich falsch oder ist diese Funktion nicht vorgesehen?

    Vielen Dank im Voraus. Dirk
    Like it!

  4. #49
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Zitat Zitat von DKHDKH Beitrag anzeigen
    Nur wenn ich zum Beispiel Kanal 5 mit CH5 = SBUS2_get_servo_data(5) gelesen habe; dann bekomme ich regelmäßig -1 als wert. Was mache ich falsch oder ist diese Funktion nicht vorgesehen?
    Hallo Dirk,

    es freut mich sehr das die SBUS2 Library auch bei dir funktioniert.

    der Rückgabewert -1 bedeutet das kein neuer SBUS(2) Frame empfangen wurde.

    Ich vermute das deine CH5 = SBUS2_get_servo_data(5) zu schnell erfolgt.
    Prüfst du vorher SBUS2_Ready()?


    if(SBUS2_Ready()){
    channel = SBUS2_get_servo_data( 5 ); // Channel = Sbus Value of Channel 5
    }
    Like it!

  5. #50
    User
    Registriert seit
    03.05.2019
    Ort
    Niederlande
    Beiträge
    7
    Daumen erhalten
    0
    Daumen vergeben
    4
    0 Nicht erlaubt!

    Standard

    Hallo Brushlesspower,
    Danke für die Antwort. Ich habe zuerst SBUS2_Ready () geprüft. Ich bekomme noch regelmäßig -1 als wert.
    Unter meinem Testprogramm. Vielleicht kannst du das benutzen.

    Code:
    #include <U8glib.h>          //I2C OLED-Display
    #include "SBUS2.h"
    #include "SBUS_usart.h"
    
    #define CURRENT_SLOT      3
    #define RPM_SLOT          2
    #define ERROR_SLOT        6
    #define TEMPERATURE_SLOT   1
    
    U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);
    
    int      i = 0;
    int16_t  channel = 0;
    uint16_t uart_dropped_frame = false;
    bool     transmision_dropt_frame = false;
    bool     failsave = false;
    
    void setup() {
      pinMode(2, OUTPUT);           // set pin D2 as Output  
      digitalWrite(2, HIGH);       // set pin D2 High = Inverted UART signal
      SBUS2_Setup();
    }//setup()
    
    
    void loop() {
      if(SBUS2_Ready()){
        channel = SBUS2_get_servo_data( 5 );        // Channel = Sbus Value of Channel 5
       
        if (channel != -1 ){
          SBUS2_get_status(&uart_dropped_frame, &transmision_dropt_frame, &failsave);
          send_alarm_as_temp125(ERROR_SLOT, ((failsave*1000) + (transmision_dropt_frame*100) + uart_dropped_frame));      // Warning with over Temp at Error Slot
          send_temp125(TEMPERATURE_SLOT, (int16_t)i);                                                                     // Temperature [°C]
          send_RPM(RPM_SLOT,(uint16_t)300);                                                                               // RPM -> rounding Error +/- 3 RPM
          send_s1678_current(CURRENT_SLOT,(uint16_t)20,(uint16_t)15000,(uint16_t)1230);                                   // Current 20A, Capacity 15000mAh, Voltage 12.30V
          
          u8g.firstPage();                          //Display Channel 5
          do {
                u8g.setFont(u8g_font_unifont);
                u8g.setPrintPos(0, 10); 
                u8g.print("channel 5:");
                u8g.setPrintPos(0, 30);
                u8g.print(channel);
          } while( u8g.nextPage() );
    
          i++;                                      //Counter simulates temperature
          if (i==50) 
          {
             i=0;
          }//if
          
        }//if
            delay(100);       // Simulation of User Code, for example measuring Voltage, Temperature, Current, .... -> Maybe causing dropped frames
      }//if  
       
    } // End of Loop()
    Like it!

  6. #51
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Das ist ja echt interessant.

    Vorallem weil die Ausgabe über das Display in der if(channel != -1) Bedingung steht.



    Ich hab nochmal über den Code geguckt

    SBUS2_Ready() prüft nicht frame_ready

    die Servo Daten (bzw dessen Rückgabewert) ist aber an frame_ready gebunden.

    ich werde das mal als issue in Github einfügen.


    wenn der Arduino auf der SBUS(2) Leitung daten empfängt die gleich der Länge eines SBUS Frames entsprechen.....dann wird frame_ready gesetzt
    Sobald alle Telemetrie Daten gesendet wurden, bzw die Zeit für Telemetriedaten vergangen ist wird frame_ready zurückgesetzt

    nur in dieser Zeit gibt SBUS2_get_servo_data(x) den servowert zurück.

    Daher ist die Prüfung auf die -1 dringend erforderlich.


    Aber all das machen wir ja. Dein Code ist ja identisch mit meinem Beispiel.
    Du hast ja eigentlich nur die Ausgabe über das Display hinzugefügt.

    Versuche mal folgendes:

    Code:
    #include <U8glib.h>          //I2C OLED-Display
    #include "SBUS2.h"
    #include "SBUS_usart.h"
    
    #define CURRENT_SLOT      3
    #define RPM_SLOT          2
    #define ERROR_SLOT        6
    #define TEMPERATURE_SLOT   1
    
    U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);
    
    int      i = 0;
    int16_t  channel = 0;
    int16_t  channel5 = 0;
    uint16_t uart_dropped_frame = false;
    bool     transmision_dropt_frame = false;
    bool     failsave = false;
    
    void setup() {
      pinMode(2, OUTPUT);           // set pin D2 as Output  
      digitalWrite(2, HIGH);       // set pin D2 High = Inverted UART signal
      SBUS2_Setup();
    }//setup()
    
    
    void loop() {
      if(SBUS2_Ready()){
        channel = SBUS2_get_servo_data( 5 );        // Channel = Sbus Value of Channel 5
       
        if (channel != -1 ){
          channel5 = channel;
          SBUS2_get_status(&uart_dropped_frame, &transmision_dropt_frame, &failsave);
          send_alarm_as_temp125(ERROR_SLOT, ((failsave*1000) + (transmision_dropt_frame*100) + uart_dropped_frame));      // Warning with over Temp at Error Slot
          send_temp125(TEMPERATURE_SLOT, (int16_t)i);                                                                     // Temperature [°C]
          send_RPM(RPM_SLOT,(uint16_t)300);                                                                               // RPM -> rounding Error +/- 3 RPM
          send_s1678_current(CURRENT_SLOT,(uint16_t)20,(uint16_t)15000,(uint16_t)1230);                                   // Current 20A, Capacity 15000mAh, Voltage 12.30V
          
        }//if
    
      }//if  
      u8g.firstPage();                          //Display Channel 5
      do {
          u8g.setFont(u8g_font_unifont);
          u8g.setPrintPos(0, 10); 
          u8g.print("channel 5:");
          u8g.setPrintPos(0, 30);
          u8g.print(channel5);
      } while( u8g.nextPage() );
      i++;                                      //Counter simulates temperature
      if (i==50) 
      {
         i=0;
      }//if 
    } // End of Loop()

    Ich hab den Display Code in die Loop gepackt.
    Eventuell gibt es irgendwo ein Timing Problem.
    Like it!

  7. #52
    User
    Registriert seit
    03.05.2019
    Ort
    Niederlande
    Beiträge
    7
    Daumen erhalten
    0
    Daumen vergeben
    4
    0 Nicht erlaubt!

    Standard

    Ich glaube auch, dass es sich um ein Timing-Problem handelt.
    Jetzt sehe ich auch, dass mein Zähler, der die Temperatur simuliert, Schritte überspringt. Das bedeutet also, dass -1 noch regelmäßig zurückgegeben wird. Trotzdem wieder eine gute Anzeige.
    Like it!

  8. #53
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    ich habe die Library mal überarbeitet.
    jetzt gibt es auch bald einen GPS Sensor

    Leider kriege ich aber grad die Telemetrie nicht zum laufen
    Selbst das aktuelle Github Repo läuft nicht.

    Kann sein das es an meinem R7003 liegt. Habe sonst nur mit dem R7008 getestet.
    Like it!

  9. #54
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Ich habe jetzt mal den R7008SB verwendet -> Alles Gut

    Erkenntnis No. 1 : Der R7003 ist wohl (warm auch immer nicht kompatibel)
    Kann an meinem R7003 liegen, kann an den Einstellungen liegen, oder sonst was. Das muss ich mal später ausprobieren.

    Das -1 Problem konnte ich bei mir ebenfalls sehen.
    Wenn ich das Delay(100) auskommentiere ist das Problem nicht mehr vorhanden.

    Das Delay(100) sollte nur zur Simulation dienen. An dieser Stelle soll der eigentliche User Code stehen.
    - Analog read's
    - I2C Zeug
    - oder wie bei Dirk die Display Ansteuerung (wäre mal interessant zu wissen wie lange das dauert)
    - User Code + Delay ist ganz schlecht

    Erkenntnis No. 2 : es sollte irgendwo mal ein Buffer eingebaut werden, wo die SBUS Werte hinterlegt und dauerhaft verfügbar sind


    Bei dem Test des GPS Sensors bin ich noch auf weitere Fehler gestoßen.

    Erkenntnis No. 3 : Sensor Port 8 bis 31 funktionieren nicht
    Es geht nur Sensor Port 1 bis 7 (Port 0 wird von der Empfängerspannung belegt)

    Erkenntnis No. 4 : Es gibt ein Timing Problem wenn zb. nur Port 2 und Port 6 verwendet werden
    Es sollten also keine Port's ausgelassen werden.


    All diese Erkenntniss führen dazu, dass das Update der Library noch etwas dauern wird.
    Außerdem muss ich die ganzen Fehler mal bei Github eintragen.
    Like it!

  10. #55
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard Neue SBUS2 Telemetrie Version [beta]

    Hallo Dirk,

    ich habe auf Github mal eine neue Version hochgeladen.

    Bitte mal übers Wochenende ausprobieren.

    - das -1 Problem tritt nicht mehr auf (prüfung auf SBUS2_ready() und -1 sind unnötig)
    - das Delay in der Loop() kann beliebig groß sein ohne Fehler zu verursachen
    - die gesamten Timings wurden überarbeitet
    - die Sensor ID stimmen jetzt
    - und ein GPS Demo Sensor wurde hinzugefügt (feste Position auf Berlin Fernsehturm)


    Achtung: Es sind sehr viele auskommentierte Zeilen. D10 und D13 werden noch getoggelt und die SoftwareSerial ist noch drin.
    Sollte aber alles kein Problem sein.

    Gruß John
    Like it!

  11. #56
    User
    Registriert seit
    03.05.2019
    Ort
    Niederlande
    Beiträge
    7
    Daumen erhalten
    0
    Daumen vergeben
    4
    0 Nicht erlaubt!

    Standard

    Hallo John,

    Ich werde dich nicht bis zum Wochenende warten lassen. Ich habe es getestet. Ich hoffe, ich schreibe alles gut auf Deutsch. Ansonsten solltest du mir keine Vorwürfe machen.

    - Ich habe einen Zähler hinzugefügt, um die Geschwindigkeit der Telemetrie zu testen. Die delay() kann auf 500 ms zurückgesetzt werden. Im Allgemeinen simuliert dies ein normales Programm.
    - Vielleicht habe ich den Sender noch nicht richtig eingestellt, aber ich sehe alle gesendeten Werte gut außer Altitude (0m), latitude und longitude.
    - Ich bekomme keine -1 Werte mehr. Alles ok.
    - Ich habe channel 5 gelesen. Dies ist mit meinem Zifferblatt (VR) am Sender verbunden. Die Werte reichen von 208 bis 2032. Beim Aufdrehen werden die Werte jedoch nicht allmählich erhöht. Zum Beispiel: 208 311 423 360 525 678 601 und so weiter. Gelegentlich also auch einen niedrigeren Wert beim Aufdrehen. Ich nehme es leicht. Gilt auch für das Ablehnen.

    Hoffentlich profitieren Sie von meinem Test. Und Vielen dank für die Arbeit.


    send_f1675_gps(GPS_SLOT, (uint16_t)50, (int16_t)100, (int16_t) 200, latitude, longitude); // Speed = 50km/h, Altitude = 1000m, Vario = 200m/s

    Ich habe Altitude 100 statt 1000 gemacht. Jetzt sehe ich -900m auf dem Sender.
    Mit 1100 sehe ich 100 meter auf dem Sender.
    Like it!

  12. #57
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Die SBUS(2) Frames kommen werden alle 15 ms empfangen (bzw telemetrie gesendet)

    d.h.
    alle 15ms sollte ein aktueller Servo Wert zur verfügung stehen.

    Bisher habe ich wenig bis gar keine Zeit in die Servo Kanalauswertung investiert. Dies werde ich mal nachholen und testen. Erst wenn ich das getestet habe gibt eine neue Version auf Github.

    Mal sehen wann ich dazu komme


    Zum GPS Sensor:

    Höhe und Entfernung werden erst im Sender berechnet. Das heißt, der erste Höhenwert ist der Startwert und damit immer 0m. Erst wenn sich die Höhenwerte ändern wird die Änderung im Sender angezeigt.
    Deswegen wird 100m angezeigt wenn die Höhe von 1000m auf 1100m geändert wird.

    Genauso ist es mit den Koordinaten (Longitude/Latitude). Die ersten Koordinaten sind der Startpunkt. Erst wenn sich dieser Ändert wirde eine Distanz angezeigt.
    Bei der T14SG lässt sich die absolute Koordinate bei der Distanz anzeigen, wenn man direkt den "DistanzWert/Distanzfeld" öffnet.

    Das ist von Futaba so vorgegeben.
    Eine mögliche Hilfe wäre es die ersten 5-6 Telemetrieframes mit 0m zu senden und erst dan den eigentlichen Höhenwert.
    Ist aber an sich quatsch. Man möchte ja die relative Höhe/Distanz wissen. Nicht die absolute.


    An alle T18MZ oder FX32 Nutzer (Bzw. alle bei denen Der Sender die Telemetriedaten auf SD Karte loggt):

    Bei GPS Sensor werden 8 Werte auf SD Karte geloggt, aber nur 4 Werte (T14SG) im Sender Live angeziegt.
    Daher würde mich mal ein Logfile vom meinem GPS Sensor interessieren, ob dabei alles passt.
    Besonders die UTC Zeit wird nur im Logfile gespeichert.
    Und ich habe aktuell keinen Schimmer ob die Zeit richtig sende.
    Like it!

  13. #58
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    0 Nicht erlaubt!

    Standard

    Zitat Zitat von DKHDKH Beitrag anzeigen
    Ich habe channel 5 gelesen. Dies ist mit meinem Zifferblatt (VR) am Sender verbunden. Die Werte reichen von 208 bis 2032. Beim Aufdrehen werden die Werte jedoch nicht allmählich erhöht. Zum Beispiel: 208 311 423 360 525 678 601 und so weiter. Gelegentlich also auch einen niedrigeren Wert beim Aufdrehen. Ich nehme es leicht. Gilt auch für das Ablehnen.
    Zitat Zitat von brushlesspower Beitrag anzeigen
    Bisher habe ich wenig bis gar keine Zeit in die Servo Kanalauswertung investiert. Dies werde ich mal nachholen und testen. Erst wenn ich das getestet habe gibt eine neue Version auf Github.
    Also ich habe jetzt ein paar tests durchgeführt.

    Soweit sieht das aber alles gut aus. Die Werte die per SBUS(2) übertragen werden passen mit den Servo Werten überein.

    Es sollten keine Delay() funktionen in der Loop() benutzt werden.
    Auch die Softserial sollte nur benutzt werden wenn unbedingt nötig.


    Der GPS Sensor funktioniert auch noch nicht richtig. Die angezeigte Koordinate in der T14SG passt nicht mit der aus dem Sketch überein.

    N 52° 31' 14.9988" = 52520833(Dezimal) wird angezeigt als N 53° 44.5121

    E 13° 24' 33.9480" = 13409430(Dezimal) wird angezeigt als E 13° 19.6608


    Daher wird es erstmal bei der Beta Version in Github bleiben.
    Like it!

  14. #59
    User
    Registriert seit
    03.05.2019
    Ort
    Niederlande
    Beiträge
    7
    Daumen erhalten
    0
    Daumen vergeben
    4
    0 Nicht erlaubt!

    Standard

    Ich habe noch eine Frage. Wie kann ich den Strom mit 1 Ziffer hinter dem Komma am Sender anzeigen? Zum Beispiel 2.6 A.
    Mit Spannung kann ich 1230 senden für 12,30V, aber nicht mit dem Strom.
    Like it!

  15. #60
    User
    Registriert seit
    15.10.2018
    Ort
    Berlin
    Beiträge
    30
    Daumen erhalten
    4
    Daumen vergeben
    0
    1 Nicht erlaubt!

    Standard

    Zitat Zitat von DKHDKH Beitrag anzeigen
    Ich habe noch eine Frage. Wie kann ich den Strom mit 1 Ziffer hinter dem Komma am Sender anzeigen? Zum Beispiel 2.6 A.
    Mit Spannung kann ich 1230 senden für 12,30V, aber nicht mit dem Strom.
    Ja, das geht. Müsste sogar mit 2 Stellen nach dem komma gehen.

    in der SBUS2.cpp folgende Zeilen suchen:

    Code:
    void send_s1678_current(uint8_t port, uint16_t current, uint16_t capacity, uint16_t voltage)
    {
       uint16_t value = 0;
       uint32_t local = 0;
       uint8_t bytes[SBUS2_TEL_DATA_SIZE] = {0x03, 0x40, 0x00 };
     
       
       // CURRENT
       local = ((uint32_t)current) * 100 ;
       value = (uint16_t)local;   
       if ( value > 0x3FFF )
       {
          // max current is 163.83
          value = 0x3FFF;
       }
    Die * 100 entfernen (für 2 Nachkommastellen) und der funktion 2000 für 20,00A übergeben.
    oder die * 100 durch *10 ersetzen und der funktion 200 für 20,0A übergeben.


    ich werds mal bei Github als Issue für die neue Version eintragen.
    Wird dann gleich mit eingepflegt.


    Den GPS Sensor habe ich inzwischen auch hinbekommen.
    Außerdem hab ich was gefunden um die Servo Kanäle aus dem SBUS Frame effizienter zu berechnen.

    Brauche noch ein paar Tage zum testen und aufräumen.
    Like it!

Seite 4 von 5 ErsteErste 12345 LetzteLetzte

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 13.10.2016, 14:29
  2. Antworten: 2
    Letzter Beitrag: 08.10.2013, 19:37
  3. Antworten: 3
    Letzter Beitrag: 19.04.2010, 16:47
  4. Seidel 770 Methanol, aus China. Wer hat Erfahrungen? Wer hat schon einen?
    Von heliprofessor im Forum Verbrennungsmotoren
    Antworten: 19
    Letzter Beitrag: 26.10.2009, 17:21
  5. Was Simprop schon so alles gemacht hat.....
    Von Roland Schmitt im Forum Café Klatsch
    Antworten: 2
    Letzter Beitrag: 23.02.2007, 20:39

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •