BLHeli Telemterie Protokollkonverter für FrSky und FlySky

Hallo Steini,

ich muss mir dein Protokollkonverter doch mal anschauen, da ich auch schon lange mit gcbasic arbeite. :cool:

Ich hab mir aussgehend von dem D8 Telemetry protocol meine eigene Telemetrie Dashboards incl. Sensorik zusammengestrickt. Muss mir für den nächsten Winter doch mal so ein BLHeli ESC zulegen. Schön das es noch Leute wie dich gibt, die solche Projekte durchführen. Es ist ja teilweise schon sehr Zeitaufwendig. :D

http://www.rcgroups.com/forums/showpost.php?p=16608987&postcount=560
http://www.rc-network.de/forum/show...rSky-2-4-GHz?p=2417993&viewfull=1#post2417993

Gruß
Micha
 

Steini63

User
ich muss mir dein Protokollkonverter doch mal anschauen, da ich auch schon lange mit gcbasic arbeite. :cool:
Kommentierter Quellcode ist dabei. Wichtigster Bestandteil ist eine Soft-UART Library für GCBasic, die ich mal auf Basis einer Assembler-Routine von Ralph Doncaster erstellt habe. Die gehört inzwischen zum "Lieferumfang" von GCBasic und bei der wusste ich, dass die 115200 Baud kann (braucht FlySky/iBus).

Ich hab mir aussgehend von dem D8 Telemetry protocol meine eigene Telemetrie Dashboards incl. Sensorik zusammengestrickt.
Habe ich mir angesehen, auch ein schönes Projekt - warst ja quasi Vorreiter.

Schön das es noch Leute wie dich gibt, die solche Projekte durchführen. Es ist ja teilweise schon sehr Zeitaufwendig. :D
Ich verzichte einfach auf Sudoku ... und es macht ja auch Spaß.

Grüße
Steini
 
Wichtigster Bestandteil ist eine Soft-UART Library für GCBasic, die ich mal auf Basis einer Assembler-Routine von Ralph Doncaster erstellt habe. Die gehört inzwischen zum "Lieferumfang" von GCBasic und bei der wusste ich, dass die 115200 Baud kann (braucht FlySky/iBus).

Hallo Steini,

ich verwende meine eigene Software UART Library da die in gcbasic ab 9600 baud bei den PIC's nicht funktioniert hat.

Code:
' Software UART LIB with inverted software UART and some print routines
' M. Schulz, Update print2p1,11.08.2017

#define Carry STATUS.0 ' Carry Bit of STATUS register

#script
  if BAUD_RATE_4Mhz = 2400 then oneBitdelay = 101
  if BAUD_RATE = 2400 then oneBitdelay = 204
  if BAUD_RATE = 9600 then oneBitdelay = 48
#endscript

'------------------------------------------------------------------------------
'********************* AsyncTx invert ******************
'* Asynchronous serial transmit byte routine           *
'* 1 start bit + 8 data bits  + 1 stop bit             *
'* INVERTED                                            *
'* Baud Rate: 2400 or 9600                             *
'* Processor clock assumed: 8Mhz or 4Mhz               *
'*                                                     *
'* Uses: dout(byte to transmit) as input               *
'* Uses: SER_OUT as SerOut PIN, SerOut pin must be     *
'* defined at program start  #define SER_OUT PORT.X    *
'*                                                     *
'* Uses: BAUD_RATE for oneBitdelay setup,              *
'* #define BAUD_RATE 2400 or 9600 at program start     *
'*******************************************************

sub uart_inv(in dout as byte)
    set SER_OUT on ' startbit
    for bitCount = 1 to 9
        uart_delay
        Carry = 1 ' incl. stopbit
        rotate dout right
        if (Carry = 1) then set SER_OUT off
        if (Carry = 0) then set SER_OUT on
    next
    uart_delay
    'wait 1 ms 'AXE 33 display
end sub
'----------------------------serial Display routines --------------------------
sub uart_delay ; Loop needs oneBitdelay us
    dim tmp as byte

    movlw oneBitdelay
    movwf tmp
    decf tmp,f
    btfss STATUS,Z ;test if ZERO
    goto $-2
end sub
'------------------------------------------------------------------------------

Code für meine seriellen Displays auch mit Inline Assemmbler:

Code:
'  Serial LCD Display Gateway for HD44780 LCD Display Controller V1.0
'  , used for pollin 2x16 display with neg. contrast voltage in black folding box
'  11.03.2018, version with WaitHSerRx 9600 baud, in use
'  compiled with v95.02
'
'                        ------------
'  V+                  -| 1       20 |- GND
'  PORTA.5             -| 2       19 |- PORTA.0
'  PORTA.4 ____        -| 3       18 |- PORTA.1
'  PORTA.3(MCLR)       -| 4       17 |- PORTA.2
'  PORTC.5             -| 5       16 |- PORTC.0 LCD_DB4
'  PORTC.4             -| 6       15 |- PORTC.1 LCD_DB5
'  PORTC.3 LCD_Enable  -| 7       14 |- PORTC.2 LCD_DB6
'  PORTC.6 LCD_RS      -| 8       13 |- PORTB.4 LCD_DB7
'  PORTC.7 LCD_RW      -| 9       12 |- PORTB.5 SerInPort
'  PORTB.7             -| 10      11 |- PORTB.6
'                        ------------

#chip 16F690,8
#config OSC=INTRC_OSC_NOCLKOUT, PWRTE = ON

'LCD setting 4 bit mode HD44780
#define LCD_IO 4
#define LCD_RS     PORTC.6
#define LCD_RW     PORTC.7
#define LCD_Enable PORTC.3
#define LCD_DB4    PORTC.0
#define LCD_DB5    PORTC.1
#define LCD_DB6    PORTC.2
#define LCD_DB7    PORTB.4

' Serial settings and defines
'Baud Rate 9600 @ 8Mhz eq. 207
#define BAUD_RATE_LREG 207
#define BAUD_RATE_HREG 0

#define SerInPort PORTB.5
dir SerInPort In

dim Temp as byte
Temp = 0

'Init
display_ctrl = 0
InitUart

CLS
'------------------- Main loop ------------------------------------------------
Do

    'Get a byte from RS232 Rx
    Temp = WaitHSerRx

    'Received Display CTRL command, ASCII DEZ 254
    if (Temp = 254) then
        display_ctrl = 1
    end if

    ' Clear Display, received ASCII DEZ 254, 1
    if (Temp = 1) and (display_ctrl = 1) then
       CLS
       display_ctrl = 0
    end if

    ' Diplay Line 1, pos 1, received ASCII DEZ 254, 128
    If (Temp = 128) and (display_ctrl = 1) then
       Locate 0, 0
       display_ctrl = 0
    end if

    ' Diplay Line 2, pos 1, received ASCII DEZ 254, 192
    If (Temp = 192) and (display_ctrl = 1) then
       Locate 1, 0
       display_ctrl = 0
    end if

    'Received ASCII DEZ between 32 and 127
    if (Temp >= 32) and (Temp <= 127) then
       LCDWriteChar(Temp)
    end if

Loop
'------------------------------- end Main loop --------------------------------

'--------------------------------- subs ---------------------------------------
sub InitUart
;Baud-Rate setup see 12F1572 data sheet, page 176
  movlw BAUD_RATE_LREG
  movwf SPBRG
  movlw BAUD_RATE_HREG
  movwf SPBRGH
;16-bit Baud Rate Generator bit
  bsf BAUDCTL,BRG16
;High speed asynchronous operation
  bsf TXSTA,BRGH
;EUSART asynchronous operation
  bcf TXSTA,SYNC
;Set SPEN On
  bsf RCSTA,SPEN
;Enables receiver
  bsf RCSTA,CREN
end sub 'InitUart
'------------------------------------------------------------------------------
function WaitHSerRx as byte 'Waits until UART has data
  clrf WaitHSerRx
  ;Wait until UART has data
  btfss PIR1,RCIF
  goto $-1
  ;If USART has data then
     btfss PIR1,RCIF
     goto  ENDIF_1
    ;WaitHSerRx = RCREG, return value
     movf  RCREG,W
     movwf WaitHSerRx
  ;End if
  ENDIF_1:
  ;If overrun error OERR Then
     btfss RCSTA,OERR
     goto  ENDIF_2
     ;Set CREN Off Disables receiver
     ;clear if overrun error
     bcf RCSTA,CREN
     ;Set CREN On Enables receiver
     bsf RCSTA,CREN
  ;End if
  ENDIF_2:
end function 'WaitHSerRx

Gruß
Micha
 
Hallo !

Danke dir für die Tolle Software.

Noch mal ein kleiner Tipp für Linuxer, die einen Digispark mit der HEX-File flashen wollen
Ich hab den Micronucleus als Addon in der Arduino IDE, die kann aber meineswissens nicht direkt Hexfiles Flashen
Was noch sinn ergibt, es gibt bei der Aktuellen IDE Version (1.8.8) ein Setup-Skript, das dem Nutzer die nötigen Gruppen zuordnet.
Das einfach ausführen, hilft auch bei BLhelisuite in Wine e.t.c.
Code:
/home/<BENUTZER>/.arduino15/packages/digistump/tools/micronucleus/2.0a4/launcher -cdigispark --verbose --timeout 60 -Uflash:w:/home/<BENUTZER>/Schreibtisch/BTF-SPort_Tiny85_or_Digispark_20190205.hex:i

<BENUTZER> muss man dann durch den jeweiligen Ordnernamen ersetzten, am besten Prüfen, ob die Pfade passen. Aktuell ist die .hex file einfach auf dem Schreibtisch. Dateiname muss dann auch zum Board und gewünschtem Interface passen, ggf. ändern.

Da kommt dann so etwas :
Code:
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device ... 
> Press CTRL+C to terminate the program.
> Device is found!
connecting: 16% complete
connecting: 22% complete
connecting: 28% complete
connecting: 33% complete
> Device has firmware version 1.6
> Available space for user applications: 6012 bytes
> Suggested sleep time between sending pages: 8ms
> Whole page count: 94  page size: 64
> Erase function sleep duration: 752ms
parsing: 50% complete
> Erasing the memory ...
erasing: 55% complete
erasing: 60% complete
erasing: 65% complete
> Starting to upload ...
writing: 70% complete
writing: 75% complete
writing: 80% complete
> Starting the user app ...
running: 100% complete
>> Micronucleus done. Thank you!


Hoffe, ich konnte damit helfen !

Ach so, aus irgendeinem Grund muss man wirklich schnell den digispark einstöpseln, sonst kommt ein leider nicht weiter Dokumentierter Erase Error -32

Viele Grüße,
Sebastian
 
Mein Tip dazu wäre der AVRootloader, damit kann man über das Servokabel direkt flashen. Nimmt man als Signatur BLHeli und 19200bps, dann lässt sich ein Attiny auch direkt über die (alte) BLHeli Suite flashen, da BLHeli intern AVRootloader verwendet. (weil es hier ja eh um BLHeli geht, beide Komponeten -Regler und Adapter >> gleicher Bootloader, gleiche PC-Oberfläche...).
Ich habe das ganze Geraffel hier eh am Start und vorkonfiguriert, wenn ich euch mal fix nen Attiny durch den Assembler jagen soll, einfach Bscheid sagen.
 
Vielen Dank an Steini. Genau das habe ich gesucht.

Bin durch mein U250gr Flieger auf die kleinen Copterregler gestoßen. Ich habe mir den Racerstar PG30 und den Razor32 V2 gekauft und damit rumprobiert. Die volle Leistung halten sie nicht unbedingt aus, bei 25A kommt recht schnell die Temperatursicherung (ohne Kühlung). Ich finde es trotzdem recht stark für die Größe. Um die Telemetrie (beim Razor auch Strom und Kapazität) zu nutzen, musste ich erstmal die Verbindung mit der BlHeli Software herstellen. Das hat ne Weile gedauert, habe es dann mit Hilfe eines Videos hinbekommen (ich nutze ein Arduino Pro mini als Adapter). Somit konnte ich erstmal die Telemetrie aktivieren. Als erstes habe ich es mit einem Attiny13A (hatte noch paar rumliegen) probiert, dass hat aber nicht richtig funktioniert. Die Telemetriedaten wurden nur sporadisch vom Empfänger (D8R-XP) erkannt und an die Taranis weiter geleitet. Ich habe mir dann paar Attiny45 bestellt und siehe da, es hat auf Anhieb funktioniert.

Ich bin froh, dass ich jetzt keine zusätzlichen Sensoren mehr einbauen muss und hoffe, dass ich bald zum praktischen Testen komme.
Ich werde bestimmt auch mal die Esc´s mit mehr Strom versuchen (DYS Aria BLHeli_32bit 70A oder Original Airbot Wraith32 Metal V2).

Besten Dank
Stefan
 

bendh

User
mein Wraith32 Metal V2 kann aber auch nur 40A kurzzeitig. Es fehlt einfach ein Kühlkörper. Aber er misst wenigstens den Strom richtig.
 
40A würden mir auch erstmal reichen.
Wie sieht das bei höherer Spannung aus? Wenn man auf 4s geht. Wird dann die Wärmeentwicklung auch höher? Oder schaffen die Regler dann trotzdem noch die Ströme (25 A bzw. 40A)?

Das muss ich demnächst mal probieren.

Gruß Stefan
 
Meiner hat ein Lötpad für Telemetrie..
Da gibts auch unterschiedliche Versionen, welche mit blheli_s und blheli32.
Frage ist eigentlich auch gerade, wie viel Kapazität man dem Akkuseitig verpasst..(kondensator)
Da haben du Copterteile ja meistens nichts.
Grüße!
 
Ja, Holger :D Wie viel Farad da ran müssen steht da aber auch nicht, da schweigt mal wieder das Fachpublikum. Egal, ich nehm da einfach die Werte von einem anderen Flug-Regler.
Hier noch mal ein Bild, der Telemetrieanschluss ist der mit dem "T"

P1020282.JPG

(Gerade Festgestellt, das ist ja ein DDR-Regler - "GST" :) )
Viele Grüße,
Sebastian
 
Da gibt Gründe.
Einiges an C ist keramisch schon auf dem Regler drauf. Wie lang ist die Leitung u.s.w.
Pi x Daumen um die 470uF LOW-ESR Spannung mindestens das 1,5fache oder mehr Deiner Maximalspannung

Btw - genau von diesem Regler liegen hier zwei mit geöffneten FETs, die es bei der EMK Bremse zerrissen hat. Wer bremst, verliert ;)


Will demnächst da auch mal Hott anflicken, entweder attiny85 und die 115200bps mit dem USI einlesen, oder den Attiny102 der ist noch etwas schlanker, und hat einen Hardware Uart. Theoretisch wäre der neue 8Pin Attiny214 perfekt, 2x UART, oder ein Attiny841 mit 2xUart oder oder :rolleyes:
3,3V wollt ich mir direkt vom Regler klauen (bei dir in der Mitte, der sot23 Chip, hat auf einem Pin einen 3,3V Ausgang für den MCU) so bräuchte es dann keine weiteren Bauteile mehr ausser dem Attiny.
 

bendh

User
ich finde es schön dass hier etwas Bewegung in das Thema kommt, denn von FrSky kommen jetzt ja auch neue ESC. Was mich persönlich an BlHeli32 stört ist, dass der Wiederanlauf des Motors im Flug so leicht verzögert mit einer kleinen Drehzahlstufe erfolgt, also nicht so schön sanft wie bei meinen jetzigen Jetireglern. Ist das bei euch auch so oder stimmen meine Einstellungen nicht?
 
Na wenn du den SOT anzapfen kannst, kannst du ja den Attiny als SMD einfach mit Doubletape mit draufpappen.. :)

Das wäre lustig :)

Grüße !

P.S.: Danke, hätte einen vagabundierenden 35V 470uF genommen, gehe dann doch lieber auf 50V

P.P.S: Wenn man mehr Spannung bräuchte, könnte man doch die rgb led rausschmeißen und die 3 kanäle in reihe schalten, oder hab ich da einen Knoten?
 

Steini63

User
Was mich persönlich an BlHeli32 stört ist, dass der Wiederanlauf des Motors im Flug so leicht verzögert mit einer kleinen Drehzahlstufe erfolgt, also nicht so schön sanft wie bei meinen jetzigen Jetireglern. Ist das bei euch auch so oder stimmen meine Einstellungen nicht?

Das hatte ich auch bemerkt. Abhilfe brachte dann, die "Rampup Power" zu erhöhen; Maximum ist 150%. Der (gewollte) Anlauf mit kleiner Leistung bleibt dabei möglich.

Steini
 
Falls es ein Regler mit-ohne T-Pad ist, und man ein wenig löten kann, links unter den C ist der Pin...

Hier am Sunrise 11A:
Bildschirmfoto zu 2019-03-30 08-38-02.png

Siehe da, es funzt:
Bildschirmfoto zu 2019-03-30 08-41-22.png
 

bendh

User
der Flugtest mit meinem 65A Wraith32 Metal V2 ESC - 2-6S BlHeli32 war sehr ernüchternd. Bei 60A in wenigen Sekunden über 100 Grad heiß, sogar der Schrumpfschlauch ist geschmolzen.

DSC06054.JPG

interessanterweise schmolz der Schrumpfschlauch an der Kante bei den Kondensatoren

Bildschirmfoto zu 2019-03-30 10-16-36.png
 
Ansicht hell / dunkel umschalten
Oben Unten