Arduino Library für Jeti EX Eigenbau-Telemetrie

  • sierra_uniform
  • sierra_uniform's Avatar Offline
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 275
  • Dank erhalten: 138

sierra_uniform antwortete auf Re:RE: LiPo Sensor

Posted 16 Juni 2017 11:23 #265
Herzlichen Dank, es funktioniert :-))
von sierra_uniform

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 294
  • Dank erhalten: 153

Sepp62 antwortete auf Re:RE: LiPo Sensor

Posted 02 Aug. 2017 21:44 #266
Die Version 1.0.4 steht bereit:

sourceforge.net/projects/jetiexsensorcpplib/

Hier nochmals meinen Dank an ThomasL, der mich mit Vorschlägen und Tests unterstützt hat.

Änderungen:
- Für die Jetibox (-Emulation) werden nun auch Tastenkombinationen und nicht nur Einzeltasten gemeldet
- Der Empfänger ist beim Systemstart erstmal ausgeschaltet, damit er keine falschen Zeichen aufsammelt, bis der Empfänger die Telemetrie detektiert hat.
- Das Sensorverzeichnis wird vor dem eigentlichen Start einmal vollständig gesendet. Damit sollte die Sensorerkennung im Sender nach einem Telemetrie-Reset zuverlässiger funktionieren.
- Sensoren können dynamisch aktiviert oder deaktiviert werden

Viele Grüße
Bernd
von Sepp62
Folgende Benutzer bedankten sich: 0n3 70uch, Ecstacy, IG-Modellbau

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • sierra_uniform
  • sierra_uniform's Avatar Offline
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 275
  • Dank erhalten: 138

sierra_uniform antwortete auf Re:RE: LiPo Sensor

Posted 10 Aug. 2017 13:45 #267
Hallo zusammen,

mein weiter oben kurz beschriebener Sensor funktioniert zwischenzeitlich problemlos sowohl mit meinem DC-16 Sender als auch mit einem alten MC 16 Sender mit Jeti HF-Modul und Jetibox. Wenn ich den Sensor direkt an die Jetibox anschließe, klappt auch alles. Schließe ich ihn an eine Jetibox mini an, dann komme ich über die Meldung "Waiting for Dev." nicht hinaus. Ab und zu blitzt ganz kurz eine zweizeilige Meldung mit völlig unsinnigen Zeichen auf. Die ist aber so schnell wieder weg, dass man nicht wirklich entziffern kann, was da eigentlich ausgegeben wird. An was könnte das Fehlverhalten beim Betrieb mit der Minibox liegen? Coding siehe Anhang.

Viele Grüße SU
Last Edit:10 Aug. 2017 13:49 von sierra_uniform

Anhänge:

Letzte Änderung: 10 Aug. 2017 13:49 von sierra_uniform.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • Sepp62
  • Sepp62's Avatar Offline Autor
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 294
  • Dank erhalten: 153

Sepp62 antwortete auf Re:RE: LiPo Sensor

Posted 10 Aug. 2017 17:14 #268
Vielleicht versteht die Jetibox-Mini kein EX Protokoll ?

Kommentier doch bitte mal die unten gezeigte Zeile aus und probier das Ganze mit der Minibox.

uint8_t JetiExProtocol::DoJetiSend()
{
// send every 150 ms only
if( ( m_tiLastSend + 150 ) <= millis() )
{

...

// EX frame...
else if( m_pSensorsConst )
{
// SendExFrame( m_frameCnt++ );
}

// followed by "simple text" frame
SendJetiboxTextFrame();
}

return 0;
}
von Sepp62
Folgende Benutzer bedankten sich: sierra_uniform

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • sierra_uniform
  • sierra_uniform's Avatar Offline
  • Elite Mitglied
  • Elite Mitglied
  • Beiträge: 275
  • Dank erhalten: 138

sierra_uniform antwortete auf Re:RE: LiPo Sensor

Posted 11 Aug. 2017 11:03 #269
Hallo Bernd,

vielen Dank für den Vorschlag. Habe ich so getestet, führt zum gleichen Ergebnis. Für diesen und alle vorherigen Tests habe ich einen Empfängerakku an den Anschluss mit dem Kabel gesteckt und den Sensor in die EXT Buchse. Später habe ich die Minibox mal an meiner MC16 mit Jeti HF-Modul getestet. Anschluss des HF-Modul Ausgangs an EXT und Akku ans Kabel, Sensor an den Empfänger. Das hat so funktioniert. Irgendwie kam mir das aber blöd vor, weil ich für die Minibox ja einen zusätzlichen Akku benutzen müsste. Deshalb habe ich versuchsweise den Kabelanschluss direkt an den HF-Modul Ausgang gesteckt. Und siehe da, es hat auch ohne Akku funktioniert. Nächster Test war dann wieder der direkte Anschluss des Sensors an die Jetibox. Hierbei habe ich sowohl den Akku als auch den Sensor über ein V-Kabel an das Kabel der Minibox angeschlossen. Und damit funktioniert das Ganze dann. :)

Im Vergleich zur Jeti Box ist das aus meiner Sicht etwas seltsam. Dort gibt es ja einen Anschluss für den Akku und einen für den Sensor. Aber egal, wichtig ist es funktioniert. Wenn auch etwas umständlicher mit V-Kabel.

Gruß SU
von sierra_uniform

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

  • wiff
  • wiff's Avatar Offline
  • Premium Mitglied
  • Premium Mitglied
  • Wolfgang
  • Beiträge: 83
  • Dank erhalten: 25

wiff antwortete auf Arduino Library und KISS ESC 24A

Posted 11 Aug. 2017 16:50 #270
Liebe Jeti-Sensor Gurus,
im Zuge der Umrüstung eines alten E-Seglers bin ich bin per Zufall auf diesen Regler gestossen, der eigentlich für Drohnen gebaut wurde:
www.rcgroups.com/forums/showthread.php?2...n-Flyduino-32bit-ESC

Die Specs sind interessant und ausserdem spuckt der Regler seine Betriebsdaten über ein dokumentiertes Protokoll aus!
Im obigen Link findet Ihr den Arduino-Code für das Auslesen der Daten.

Ich möchte diesen Regler gerne an die Jeti-Telemetrie anschliessen, allerdings möchte ich einen Teenys dafür verwenden.
Der Arduino Code ist ziemlich hardwarenahe - habt Ihr einen Tipp für mich, wie ich das für den Teensy anpassen muss....

Gruss & Dank
Wolfgang

Code:
/* KISS ESC 24A Serial Example Code for Arduino. made for a nanowii / promicro / arduino leonardo / atmega32µ4 arduino compatible boards as it uses tim 1 compare 1 and serial 1 RX. connect the ESC's PWM signal to pin D9 and the telemetrie pin of the ESC to the RX(I)/D0 pin connect a signal source to pin D7 (servotester or RX or something else to give a throttle signal.. the oneshot 125 reading of the arduino will jitter a lot because of slow arduino ISR and SW reading) use a serial monitor (arduino serial monitor) with 9600 baud to view the ESC's telemetry */ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <Wire.h> //Global Variables ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// static int16_t ESC_telemetrie[5]; // Temperature, Voltage, Current, used mAh, eRpM static uint16_t requestTelemetrie = 0; static uint16_t regularThrottleSignal = 1000; static uint8_t receivedBytes = 0; //Setup ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { // init timer 1 pinMode(9,OUTPUT); TCNT1 = 0; TCCR1C = 0; TIMSK1 = 0; TCCR1A = B10101010; // PWM_WaveformMode=14 -> Fast_PWM, TOP=ICRn, PWM_OutputMode=non-inverting TCCR1B = B00011001; // Prescaler=clk/1 / Imp=125.. 250us @11Bit oder Imp=1000.. 2000us @14Bit ICR1 = 0xFFFF; // set TOP TIMER1 to max DDRE &= ~(1 << 6); // pin 7 to input PORTE |= (1 << 6); // enable pullups EIMSK |= (1 << INT6); // enable interuppt EICRB |= (1 << ISC60); Serial.begin(9600); // open seria0 for serial monitor Serial1.begin(115200); // open Serial1 for ESC communication } //Main Loop ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { static uint32_t loopTime = 0; static uint8_t tlemetrieCounter = 0; if(micros()-loopTime > 2000){ // 2000Hz looptime loopTime = micros(); receiveTelemtrie(); // look for incoming telemetrie if(++tlemetrieCounter == 20){ // get telemetrie with 25Hz tlemetrieCounter = 0; receivedBytes = 0; // reset bytes counter // request telemetrie with a 30µs signal OCR1A = 30<<4; }else{ OCR1A = regularThrottleSignal<<1; } //print the telemetry if(tlemetrieCounter == 10){ Serial.println("Requested Telemetrie"); Serial.print("Temperature (C): "); Serial.println(ESC_telemetrie[0]); Serial.print("Voltage: (V) /100: "); Serial.println(ESC_telemetrie[1]); Serial.print("Current (A) /100: "); Serial.println(ESC_telemetrie[2]); Serial.print("used mA/h: "); Serial.println(ESC_telemetrie[3]); Serial.print("eRpM *100: "); Serial.println(ESC_telemetrie[4]); Serial.println(" "); Serial.println(" "); }else{ //fire oneshot only when not sending the serial datas .. arduino serial library is too slow TCNT1 = 0xFFFF; OCR1A=0; } } } // get the Telemetrie from the ESC ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void receiveTelemtrie(){ static uint8_t SerialBuf[10]; if(receivedBytes < 9){ // collect bytes while(Serial1.available()){ SerialBuf[receivedBytes] = Serial1.read(); receivedBytes++; } if(receivedBytes == 10){ // transmission complete uint8_t crc8 = get_crc8(SerialBuf, 9); // get the 8 bit CRC if(crc8 != SerialBuf[9]) return; // transmission failure // compute the received values ESC_telemetrie[0] = SerialBuf[0]; // temperature ESC_telemetrie[1] = (SerialBuf[1]<<8)|SerialBuf[2]; // voltage ESC_telemetrie[2] = (SerialBuf[3]<<8)|SerialBuf[4]; // Current ESC_telemetrie[3] = (SerialBuf[5]<<8)|SerialBuf[6]; // used mA/h ESC_telemetrie[4] = (SerialBuf[7]<<8)|SerialBuf[8]; // eRpM *100 } } } // 8-Bit CRC ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// uint8_t update_crc8(uint8_t crc, uint8_t crc_seed){ uint8_t crc_u, i; crc_u = crc; crc_u ^= crc_seed; for ( i=0; i<8; i++) crc_u = ( crc_u & 0x80 ) ? 0x7 ^ ( crc_u << 1 ) : ( crc_u << 1 ); return (crc_u); } uint8_t get_crc8(uint8_t *Buf, uint8_t BufLen){ uint8_t crc = 0, i; for( i=0; i<BufLen; i++) crc = update_crc8(Buf[i], crc); return (crc); } // read input PWM on D7 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ISR(INT6_vect){ static uint16_t now,diff; static uint16_t last = 0; now = micros(); if(!(PINE & (1<<6))){ delayMicroseconds(5); if((PINE & (1<<6))) return; uint16_t newDiff = now - last; diff = (diff+diff+diff+newDiff)>>2; // filter if(diff < 275 && diff > 100){ // oneshot125 regularThrottleSignal = diff<<3; }else if(diff < 2250 && diff > 850){ // normal PWM regularThrottleSignal = diff; }else regularThrottleSignal = 1000; }else{ delayMicroseconds(5); if(!(PINE & (1<<6))) return; last = now; } }
Wolfgang
Last Edit:11 Aug. 2017 17:08 von wiff
Letzte Änderung: 11 Aug. 2017 17:08 von wiff.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Ladezeit der Seite: 1.047 Sekunden