Graupner HoTT Telemetrie-Sensoren Eigenbau DIY | Telemetrie-Protokoll entschlüsselt

k_wimmer

User
Das ist nich unlogisch, sondern höchstens kompliziert oder umständlich !
Übrigens hat dieser Mode nichts mit Debugging zu tun, sondern dient (wie o.a.) zum Programmieren und Parametrieren von Sensoren, Reglern und Empfängern etc.
Du kannst natürlich hier auch eine eigene Anzeige bereitstellen, aber die ist dann halt nur im Telemetriedisplay anzeigbar.
Ein gutes Beispiel hierzu sind die Sensoren von SM-Elektronik.
Wenn du diese über das Telemetriedisplay ansteuerst, kannst du in einen Live-View Modus gelangen, der genau das von dir Gewünschte macht,
aber lediglich im Telemetriedisplay.
Die grafische Anzeige wie z.B. auf dem 2ten Display der MC-20 ist halt nur im Binärmode möglich.
 
Ah, dann habe ich Dich total verstanden! Danke!

Dann werde ich das mal ausprobieren.

Bislang habe ich nur veraltete Beschreibungen zum Protokoll gefunden, in denen dieser Aspekt nicht beschrieben war.

Habe ich das denn jetzt richtig aufgefasst, dass ich auf den 0x7f 0x0f bcast mit meinen Sensordaten einfach normal antworten kann?

Ist die Spec des Protokolls eigentlich irgendwo einsehbar, oder nur gegen NDA bei Graupner zu beziehen?

--
Wilhelm
 
Im Post oben sollte es heißen: "...ann habe ich Dich total falsch verstanden"

Aber noch eine Frage: in verschiedenen Implementierungen (s.a. OpenXSensor) sieht man, das auf das bcast 0x7f, 0x0f gar nicht geantwortet wird, sondern immer nur auf einen adressierten request, also etwa 0x7f, 0xdf. So etwas kommt bei mir nie aus dem Empfänger ...?
 

k_wimmer

User
Doch, das kommt auch aus dem Empfänger sobald du eine Taste betätigst !
Hier ist die Tastencodierung für das rechte Tastenfeld mit reincodiert.
Daraus bezieht dann der Sensor im Textmode die Informationen für die Einstellung und die Parametrisierung !
 
gr18 mit Vario

gr18 mit Vario

Ich habe ein Problem mit meinem Stromsensor. Der Sensor funktioniert an allen Empfängern ohne Probleme bis auf den GR18 mit Vario und Kreisel (GR-24 mit Vario hab ich noch nicht getestet).
Das Problem ist folgendes. Wenn ich den Empfänger über den Telemetrianschluss mit Spannung versorge fragt er ganz normal 0x80 und dann GAM oder EAM an. Sobald ich aber den Empfänger über den Regler komplett mit Spannung versorge, bekomme ich keine Telemetriedaten mehr. Eine Analyse gestern ergab, dass der Empfänger nach dem anschließen vom Akku nur noch die Adressen 0x18 und 0x1A abfragt. Im zweiten Byte steht dann eine 0.
Hat jemand ein ähnliches Problem bei den Empfängern mit Vario festgestellt? Weiß langsam nicht mehr weiter.
 
Danke für den Hinweis!
Das habe ich gerade gemacht und bekam auch prompt Antwort.

Es sind aber die gleichen Dokumente, die auch in der community kursieren. Fast scheint mir, als hätte Graupner diese aus der community entnommen ...
Ich hatte mir dort eigentlich mehr Erhellung gewünscht.

Nun gut: bei mir funktioniert nun der Binärmodus und der Textmodus soweit ganz gut.

Aber, in der Spec steht für den Textmodus:

0x7F = sensor byte, 4ms delay before sending next byte
0xXF= buttons and X=Sensor text ID

und das trifft nicht zu.
 
gps on graunbner hott (x8n)

gps on graunbner hott (x8n)

Do you no a solution for a gps on a braubner x8n transmitter i only need the speed messurement?

Tanks Gert-Jan
 

Ay3.14

User
HoTT-Sensoren parallel verwenden

HoTT-Sensoren parallel verwenden

In meinem Motorsegler habe ich ein Graupner HoTT Voltage Module und ein Graupner HoTT Vario Modul über ein Y-Kabel mit dem Graupner HoTT Empfänger GR-16 verbunden und das ganze funktioniert prima.

Kann man nun einfach mit einem weiterem Y-Kabel ein HoTT GPS Modul hinzuschalten, gibt es Erfahrungswerte hierzu?
 
Noch was vergessen, die Sensoren müssen unterschiedliche Adressen haben!

Also z.B. zweimal GAM geht nicht!
 
Falls wer Interesse hat, mit den Attinys mal rumzuprobieren (die Sketche dazu werden ja meist gerne zurückgehalten), anbei ein Beispielsketch für Arduino, habe ich mal ein bissl alles abgespeckt, und primär vereinfacht und verkürzt, Ziel, so simpel wie möglich ohne Bläh-Code, so sind es 2,3KB. Es meldet sich so als ESC beim Sender, damit es sich nicht mit einem EAM GAM usw. beisst.
etwas Speicher geht noch für das Auslesen drauf, meist reicht ein Attiny 44/45, besser natürlich der 84/85.

Eine schöne Anleitung zum Attiny gibt es hier: http://highlowtech.org/?p=1695

Entweder man betreibt den Attiny mit 3,3V oder mit 5V und dann den üblichen Spannungsteiler, bzw 3,3V-Zdiode und widerstand am Hott-Pin
Der Code rennt natürlich auch auf jeden normalen Arduino (Nano Mini Uno....).

Z.B. sind auf einigen dieser billigen Lipo-Checker mit der einfachen roten LED Anzeige Attiny24 und ein SPannungsstabi 3,3V drauf.
Hier kann man das Display ablöten, den Attiny gegen einen Attiny 44/84 tauschen, und hat eine 6Zellen Einzelzellenüberwachung für ca. 3-4€

Ist natürlich kein Kochrezept, aber bei Interesse kann man es hier ja vertiefen,


Code:
#define T_Pin 8                     //TelemetriePin
#include "SoftwareSerial.h"
SoftwareSerial hottSerial(T_Pin , T_Pin);

uint8_t message_array[45] = { 0x7c,0x8c,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
                              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7d,0x00};
void setup() {
 hottSerial.begin (19200); 
 pinMode(T_Pin, INPUT_PULLUP);  
}

void loop() { if (hottSerial.available() >= 2)   {uint8_t octet1 = hottSerial.read();
              if (octet1 == 0x80)                {uint8_t octet2 = hottSerial.read();
              if (octet2 == 0x8c)                {uint8_t sum = 0;          delay(5);
              pinMode(T_Pin, OUTPUT);    
              for(int i = 0; i < 44; i++)
              {  sum = sum + message_array[i];   hottSerial.write(message_array[i]); 
              delayMicroseconds(1000);       }   hottSerial.write(sum);               
              pinMode(T_Pin, INPUT_PULLUP);
            
              int Volt = 65002;                   message_array[6]  = (uint8_t)(Volt &255);
                                                  message_array[7]  = (uint8_t)(Volt >> 8);  
              int Ampere =252;                    message_array[14] = (uint8_t)(Ampere&255); 
                                                  message_array[15] = (uint8_t)(Ampere >> 8);        
}}}}
 
Ich habe es mal etwas erweitert für ESC, allerdings sehr viel mehr als eine "Tankuhr" kann man aus ESC nicht aufbauen.
Für RPM habe ich mal einen hoch-scrollenden Balken eingesetzt
Man sieht so schön ersten 5-10Sekunden läuft die Übertragung sehr schleppend, da alle Module/Senoren abgefragt werden, danach wird es dann flüssig.
Ist nun zwar etwas "aufgeblähter" aber ich denke noch überschaubar ?
Es sind noch compiliert unter 3KB beim Nano, und 2,5KB für den Attiny.
Code:
#define T_Pin 8              //wähle den Arduino-Pin für das Hott-Signal

#include "SoftwareSerial.h"
SoftwareSerial hottSerial(T_Pin , T_Pin);
int volt, volt_min, ampere, ampere_max, mAh, rpm, rpm_max, temp1, temp2, temp3, alarm;
uint8_t message_array[45] = { 0x7c,0x8c,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
                              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7d,0x00};

void setup() {hottSerial.begin (19200); 
              pinMode(T_Pin, INPUT_PULLUP);  
}
void loop() { if (hottSerial.available() >= 2)   {uint8_t octet1 = hottSerial.read();
              if (octet1 == 0x80)                {uint8_t octet2 = hottSerial.read();
              if (octet2 == 0x8c)                {uint8_t sum = 0;          delay(4);
              message_array[2]  = (uint8_t)(alarm);
              message_array[6]  = (uint8_t)(volt&255);
              message_array[7]  = (uint8_t)(volt >> 8);
              message_array[8]  = (uint8_t)(volt_min&255);
              message_array[9]  = (uint8_t)(volt_min >> 8);
              message_array[10] = (uint8_t)(mAh&255);
              message_array[11] = (uint8_t)(mAh >> 8); 
              message_array[12] = (uint8_t)(temp1 +20);
              message_array[13] = (uint8_t)(temp2 +20);
              message_array[14] = (uint8_t)(ampere&255); 
              message_array[15] = (uint8_t)(ampere >> 8);  
              message_array[16] = (uint8_t)(ampere_max&255); 
              message_array[17] = (uint8_t)(ampere_max >> 8); 
              message_array[18] = (uint8_t)(rpm&255);
              message_array[19] = (uint8_t)(rpm >> 8);
              message_array[20] = (uint8_t)(rpm_max&255);
              message_array[21] = (uint8_t)(rpm_max >> 8);
              message_array[22] = (uint8_t)(temp3 +20);
              pinMode(T_Pin, OUTPUT);    
              for(int i = 0; i < 44; i++){sum=sum+message_array[i]; hottSerial.write(message_array[i]); delay(1);}
              hottSerial.write(sum);               
              pinMode(T_Pin, INPUT_PULLUP);

//***************Ab hier können Senoren auswertet werden           
volt =234;            //123=12,3V
volt_min = 123;       //123=12,3V
ampere =0;            //123=12,3A
ampere_max = 456;     //123=12,3A
mAh = 2345;           //123=1230mAh
rpm = rpm+100;if (rpm>2500){rpm=0;}//123=1230rpm
rpm_max =2345;        //123=1230rpm
temp1 = 11;           //12 =12°C 
temp2 = 22;           //12 =12°C
temp3 =33;            //12 =12°C
alarm=0;              //0=kein Alarm, 16=Unterspannung, 23=Kapazitätswarnung

}}}}
 

Ay3.14

User
Einfacher Prototyp für Grobmotriker

Einfacher Prototyp für Grobmotriker

Die LiPo-Zellen-Spannungsmessung kann auch ganz einfach und grob realisiert werden. Ideal für das anfängliche Probieren und weiterentwickeln (z.B. miniaturisieren). Statt dem "ESC"- habe ich das "GAM"-Datenpaket verwendet.

2017-06-16 HoTT-Voltage-Vario einfacher Prototyp.JPG

Z.B. mit dem Luftdrucksensor BMP180 eine einfache VARIO Funktionalität hinzufügen. :) Die Telemetrie funktioniert damit prima!

Ein GPS-Empfänger wäre wohl der nächste Schritt, falls der ATMega328 (16 MHz) des Arduino Nano noch ausreichend freie Kapazität hat?

Many happy landings
Albert
 
Hallo Albert
Vario und GPS habe ich da mit dem Code.

Sensoren auslesen passiert geschickterweise in den 4ms in dem eh gewartet werden muss, bis die Daten gesendet werden können (Zeile nach delay(4)), aber dann müssen die Schleifen zeitlich genau passen.
 

Ay3.14

User
...alternativ...

...alternativ...

...
Sensoren auslesen passiert geschickterweise in den 4ms in dem eh gewartet werden muss, bis die Daten gesendet werden können (Zeile nach delay(4)), aber dann müssen die Schleifen zeitlich genau passen.

Hallo Holger,

vielleicht wäre es einfacher das Auslesen der Sensoren außerhalb der HoTT-Telemetrie-Verarbeitung zu tätigen und somit davon zu entkoppeln.

Code:
if (hottSerial.available() >= 2) ...
trifft im Normalfall alle 200 ms ein und dauert dann ca. 90 ms. In der restlichen freien Zeit von (200 ms - 90 ms) = 110 ms hat man ausreichend Zeit um das Auslesen der Sensordaten (GAM, Vario, GPS) zu tätigen. :)

Many happy landings
Albert
 
Ansicht hell / dunkel umschalten
Oben Unten