owSilProg: AVR zum Flashen von Silabs Mikrokontroller & ESC

over and over again

Ich stelle hier einen C2-Programmer zum Flashen von Silicon Labs Mikrokontroller vor, welcher auf einen Atmel AVR Mikrokontroller basiert. Die Atmel AVR Mikrokontroller sind bei Hobbyiesten sehr beliebt, und die nötige Hard- und Software zum Programmieren daher häufig vorhanden. Sie ist zudem extrem billig verfügbar. Der hier vorgestellte C2-Programmer lässt sich sehr leicht realisieren.

Ausserdem ergeben sich daraus „tolle“ Möglichkeiten in Bezug auf einen brushless mCPX mit BLHeli-BESCs, nämlich die Windows GUI BLHeliTool sowie die Programmierbox BLHeliBox! Siehe unten unter Anwendungen oder in den Tutorials!

BLHeliBox, die Box die Alles kann… 🙂

Neueste Nachrichten
27. Okt. 2013: Service Update: Support für ESCs mit F390 Chips und Eazy 3A V2 (Firmware).
1. Aug. 2013: Service Update: Support für Turnigy KForce 120A V2.
23. Juli 2013: owSilProg Firmware zur Verwendung des Cheapduino als owSilProg Programmer. Danke Eric für diese geniale Idee!
18. Juni 2013: Service Update: Support für BLHeli 10.4.
11. Mai. 2013: Service Update: Support für BLHeli 10.3.
22. Apr. 2013: Service Update: Support für BLHeli 10.2-b.
14. Apr. 2013: Service Update: Support für BLHeli 10.2.
20. Mar. 2013: Service Update: Support für BLHeli 10.1.
8. Mar. 2013: Service Update: Bug in AvrBurnTool beseitigt. Danke Malphodo!
22. Feb. 2013: Service Update: (i) Unterstützung für BLHeli 10.0, (ii) Implementierung der neuen AN127 und Unterstützung von 14 C8051FXXX Familien. Firmware-Update mit Beschreibung der Neuerungen wie immer unter Firmware. Großer DANK geht an Maksims, der mich auf das AN127-Update gestoßen und stark unterstützt hat!
4. Feb. 2013: Der Bluetooth-Release: Die Unterstützung von Bluetooth ist nun voll integriert, und BTConfigTool ermöglich eine vollautomatische Konfiguration des Bluetooth-Moduls. Auch die ArduBox, nun v0.12, ist für Bluetooth ausgelegt. Firmware-Update mit Beschreibung der Neuerungen wie immer unter Firmware. Die Tutorials werden ASAP angepasst.
29. Jan. 2013: Der Bluetooth-owSilProg Programmer funktioniert nun! Siehe hier und/oder hier. Ich werde den Aufbau natürlich noch vereinfachen und die Tutorials ASAP anpassen.
21. Jan. 2013: Platinen zum Aufbau der BLHeliBox No. 5 sind nun auch käuflich erhältlich.
20. Jan. 2013: Service Update: (i) Unterstützung für BLHeli 9.4, (ii) BLHeliTool v1.01, COM Port endlich konform mit Windows, Flash weiter optimiert und dadurch erneute ehrhebliche Beschleunigung, (iii) BLHeliBox v1.01, Bug entfernt. Firmware-Update mit Beschreibung der Neuerungen wie immer unter Firmware. Die Tutorials sind nun auch vollständig an die Version v1.XX angepasst!
3. Jan. 2013: Das Große Neujahr Update ist da, mit vielen neuen Features und vielen großen und kleinen Verbesserungen! Updates auf owSilProg v1.00, BLHeliTool v1.00, BLHeliBox v1.00, und AvrBurnTool v1.00. Auch die neueste Box, die BLHeliBox No.5, ist aufgeschlagen. Die Firmware-Updates, mit einer Beschreibung der Neuerungen, sind wie immer unter Firmware verfügbar. Die Tutorials werden so schnell wie möglich angepasst!
15. Dez. 2012: Die neue supercoole Funktion ist da: Die Multiple-ESC-Funktion! Eine genauere Beschreibung wird noch kommen, für den Moment möchte ich auf die Threads bei rcgroups und helifreak verweisen.
ältere Nachrichten

Bauanleitungen & Tutorials

Diskussionsthreads


Einführung

Die Mikrokontroller von Silicon Labs sind sicher nicht jedermanns/fraus Sache… es hat, denke ich, schon seinen Grund warum im Hobbybereich die AVR’s, PIC’s, STM’s etc. beliebt sind. Im Modellbaubereich kommt man aber nicht immer an den Silabs Chips vorbei. Diese tauchen z.B. in jüngster Zeit immer häufiger in Brushless-ESCs auf, und auch das Umflashen der BESCs mit einer besseren Firmware wird Dank der fleissigen Arbeit einiger Entwickler immer leichter, und damit auch immer beliebter (bei BESCs mit Silabs MCU’s ist BLHeli von sskaug zu nennen).

Im Prinzip gibt es mit dem USB Toolstick von Silabs einen geeigneten und nicht wirklich teuren Programmer, und die benötigte Software/Toolchain gibt’s gratis. Was man als teuer oder billig erachtet ist nun natürlich Ansichtssache… und hängt bei mir auch stark davon ab wie ernsthaft ich in ein Thema einsteigen will. In die Programmierung von Silabs MCUs will ich z.B. nicht einsteigen, und nur um einmal, zweimal eine BESC umzuflashen ist mir der Toolstick deutlich zu teuer und das installieren der Toolchain zu mühselig. Wie auch immer, das Thema Silabs und Umflashen von BESCs war für mich eigentlich kein Thema (zumal ich mit dem Brushless-Umbau meines mCPX sehr zufrieden bin). Aber irgendwie habe ich mir doch mal die Datenblätter zu der Silabs-Programmierschnittstelle angesehen und mir gedacht: Das ist ja gar nicht kompliziert, eigentlich sollte man das doch mit einem AVR realisieren können… und so war die Idee für das owSilProg Projekt geboren…

Zuerst habe ich natürlich das Netz nach DIY Projekten für Silabs-Programmer durchsucht. Gefunden habe ich für den seriellen Port:
– Kawamoto „nanashino“ Yasuhisa’s Einfache C8051F300x Writer (google übersetzt), Original (Japanisch)
und für den LPT Port:
– Wojtek Zabolotny’s Simple evaluation board and Linux programmer for C8051F320
– Okb Rosa’s SLABPROG Simply LPT-programmer for Silabs MCU with C2-interface

So richtig „vertrauenserweckend“ und für eigene Zwecke nützlich fand ich die Lösungen aber nicht, und so war dann nicht nur die Idee geboren sondern auch der Entschluß gefasst, das owSilProg Projekt anzugehen…


Übersicht und Konzept

Das Konzept des Projekts ist eigentlich ziemlich einfach. Ein Atmel AVR Mikrokontroller wird so programmiert, dass er auf der einen Seite Komandos von einer seriellen Schnittstelle (mit TTL Pegel) entgegennimmt und entsprechende Daten auf dieser zurücksendet, und auf der anderen Seite das C2-Interface zum Flashen der Silabs MCUs nachbildet. Diese Firmware habe ich owSilProg getauft. Die serielle Schnittstelle wird dann im Regelfall von einem PC bedient, und dem Anwender über eine GUI zugänglich gemacht. Die von mir angebotene Windows GUI nenne ich SilProgTool. PCs bieten keine serielle TTL-Schnittstellen, d.h. es wird noch zusätzlich ein Adapter benötigt, um die serielle TTL-Schnittstelle an eine Schnittstelle des PCs anzubinden. Dies wird of der USB sein und es wird dann ein USB-TTL-Adapter benötigt, es kann aber auch z.B. Bluetooth sein, oder jede andere Schnittstelle.

Das Konzept besteht also aus drei Komponenten, dem mit owSilProg geflaschten AVR, einem Adapter, und einem „Bedienprogram“. SilProgTool benutzt den COM Port, und das Blockschaltbild sieht dann so aus:

silprog blockscheme olliw

Das, meiner Meinung nach, schöne an dem Konzept ist, das es sehr flexibel ist. So können die Grenzen zwischen den drei Komponenten verschwimmen. Man kann z.B. daran denken owSilProg und den Adapter in einem AVR zu verschmelzen, um z.B. einen USB-C2-Programmer zu realisieren. Oder man kann alle drei Komponenten in einem Gerät vereinen, und so eine Programmier-Box für einen BESC realisieren (siehe BLHeliBox). Da die Kommunikation über einfache Befehle über eine serielle Schnittstelle abläuft ohne besondere Synchronisationsanforderungen, ist es auch sehr leicht eine neue Bediensoftware je nach Wunsch und Laune zu schreiben. Benutzt man z.B. als Adapter einen der günstigen Bluetooth-TTL-Adapter könnte die Bediensoftware eine Smartphone-App sein. Und soweiter und so fort. Den Möglichkeiten sind also nur durch die Kreativität Grenzen gesetzt. Tatsächlich hoffe ich ein bischen auf eure Kreativität; ich bin gespannt darauf wozu das führen wird.


owSilProg Firmware

Über die Firmware für den AVR gibt es eigentlich wenig zu sagen. Sie kann im Prinzip auf jeden ATmega und ATiny mit mehr als 4kB Flash angepasst werden (nennt mir Eure Wünsche und ich werde versuchen sie zu erfüllen :)). Auch bezüglich der Taktfrequenz ist man sehr flexibel, alles von 1-20 MHz sollte gehen. Es muss allerdings ein Keramikresonator verwendet werden (Quarz ist natürlich besser), der interne RC Oszillator ist nicht genau genug.

Unten biete ich die HEX Files für einige verschiedene Konfigurationen an. Die Baudrate ist auf 38400 bps festgesetzt. Welche Pins (des Mikrokontrollers) für die C2CK und C2D Leitungen benutzt werden, ist aus dem Hex-Filenamen ersichtlich. Bei den Arduinos lässt sich der ISP-Stecker sehr für gut die C2-Interfaceanschlüsse nutzen, die Pinbelegung ist dann (ausser für Mega Boards) wie folgt:

PD1 = Tx
PD0 = Rx
PB3 = C2CK
PB4 = C2D

owSilProg Kommandos
Die Kommunikation läuft grundsätzlich so ab, dass ein Befehl über die serielle TTL-Schnittstelle an den owSilProg-AVR geschickt wird. Dieser schickt zunächst die empfangenen Zeichen zurück. Als Nächstes wird die Statusinformation „ok“ oder „er“ zurückgesendet je nachdem ob der Befehl erkannt und erfolgreich abgearbeitet wurde oder ein Fehler aufgetreten ist. Wurde kein Fehler erkannt werden falls Daten zurückzusenden sind diese nun angehängt. Die Rücksendung wird mit den zwei Zeichen x0D x3E oder „\n>“ in C-Schreibweise abgeschlossen. Da im Datenstrom ansonsten nur lesbare Zeichen vorkommen, lässt sich an den Schlusszeichen das Ende einer Rückmeldung erkennen. Die „komische“ Wahl der zwei Schlusszeichen ist ganz nützlich, denn so ergibt sich ein kommandozeilenartiges Bild bei Verwendung eines einfachen Terminals (was sehr praktisch für Testzwecke ist). Noch eine Bemerkung: Daten sind als Hex-String anzugeben/zulesen, also der Wert 75 = 0x4B entspricht den zwei Zeichen „4B“.

Beispiele:
„i“  →  „iok\n>“ oder „ier\n>“
„bw01000012“  →  „bw01000012ok\n>“ oder „br01000012er\n>“
„br020000“  →  „br020000okXXZZ\n>“ oder „br020000er\n>“

Folgende Befehle werden „verstanden“ (ab owSilProg v0.07):
v“ = version
Liefert die Versionszeile „OlliW SilProg vX.XX PXXPXX\n>“ (das ist die einzige Rückmeldung welche kein „ok“ oder „er“ enthält). Dieser Befehl eignet sich auch zum Testen ob die Kommunikation über die serielle Schnittstelle funktioniert.
t“ = test serial connection
Liefert „tok\n>“ zurück, hat aber ansonsten keine Wirkung. Dieser Befehl testet ob die Kommunikation über die serielle Schnittstelle funktioniert.
r“ = reset
Initialisiert das C2 Interface und führt ein Reset aus; liefert „rok\n>“ zurück.
d“ = device ID
Liest die Device ID der Silabs MCU, liefert „dokXX\n>“ (wobei „XX“ für das Device-ID-byte steht) oder „der\n>“. Für FF33x MCUs is die ID 0x0A. Dieser Befehl eignet sich auch zum Testen ob die C2-Kommunikation (noch) steht.
i“ = init
Initialisiert das FPI, liefert „iok\n>“ oder „ier\n>“ zurück.
e“ = device erase
Löscht den gesamten Flashspeicher, liefert „eok\n>“ oder „eer\n>“ zurück.
p“ = page erase
Löscht eine Page im Flashspeicher. Die Page-Nummer in Hex Format „XX“ ist dem Befehl anzuhängen, der Befehl lautet also „pXX“. Liefert „pXXok\n>“ oder „pXXer\n>“.
br“ = block read
Liest einen Block von Bytes aus dem Flash aus. Hierzu ist die Anzahl „XX“ der zu lesenden Bytes sowie die Adresse „ZZZZ“ ab der gelesen werden soll anzugeben. Die Daten werden dann als Hex-String zurückgeliefert. Durch zusätzliche Angabe eines „:“ nach den einführenden „br“ können die Daten auch im Intel-Hex-Format erhalten werden. Der Befehl und die Rückmeldung (wenn kein Fehler auftrat) sieht also so aus:
 “brXXZZZZ“  →  „brXXZZZZok…Daten…\n>“
 “br:XXZZZZ“  →  „br:XXZZZZok:XXZZZZ00…Daten als Hex…CC\n>“, wobei CC die Checksumme ist
bw“ = block write
Schreibt einen Block von Bytes in das Flash. Hierzu ist die Anzahl „XX“ der zu schreibenden Bytes sowie die Adresse „ZZZZ“ ab der geschrieben lesen werden soll anzugeben. Die Daten werden dann als Hex-String angehängt. Durch zusätzliche Angabe eines „:“ nach den einführenden „bw“ können die Daten auch im Intel-Hex-Format angegeben werden. Der Befehl und die Rückmeldung (wenn kein Fehler auftrat) sieht also so aus:
 “bwXXZZZZ…Daten…“  →  „bwXXZZZZ…Daten…ok\n>“
 “bw:XXZZZZ00…Daten als Hex…CC“  →  „bw:XXZZZZ00…Daten als Hex…CCok\n>“, wobei CC die Checksumme ist

Weitere „Spezial“-Befehle:
„g“ = get last error
„ma“ = query or set max number of ESC (used for the multiple ESC function)
„ms“ = query or set actice ESC (used for the multiple ESC function)
„cl“ = set C2CK low
„ch“ = set C2CK high
„cz“ = set C2CK high-Z
„xXX“ = extended commands

Anmerkungen:

  • Zum vollständigen Aufsetzen der Kommunikation muss erst ein Reset und dann ein Init durchgeführt werden, also die Befehlsfolge „ri“ abgearbeitet werden.
  • Bei den Blockread- und Blockwrite-Kommandos kann nach den ersten zwei Zeichen auch ein „?“ angegeben werden. Die Daten werden dann nicht im Hex Format interpretiert, sondern als Ein-byte Characters. Dies kann für Testzwecke sehr nützlich sein. Da die Daten jedoch i.A. nicht nur lesbare Zeichen enthalten, funktioniert die Erkennung des Datenstromendes anhand des Zeichens „\n“ nicht sicher.


Windows GUI SilProgTool

Die Windows GUI SilProgTool ermöglicht das Flashen von Hex Files. Es gibt noch einige weitere Funktionen, wie z.B. Verifizieren und eine Debugzeile, aber das wird sich im Laufe der Zeit sicher noch ändern/verbessern. Ansonsten sollte die Bedienung eigentlich klar sein.

silprogtool v002 olliw

Bemerkung: Das owSilProg-Projekt hat sich sehr schnell fort entwickelt (glücklicherweise :-)). Ich war aber hauptsächlich mit dem Flashen von BLHeli auf Silabs-BESCs beschäftigt, da dies im Moment die wichtigste Anwedung zu sein scheint, und SilProgTool ist dadurch etwas veraltet. Im Moment ist es besser BLHeliTool zu benutzen (welches im Gegensatz sehr gut funktioniert :-)).


Nützliches

Dokumentation zum C2 Interface:


Anwendungen

In dieser Rubrik versuche ich Beispiele für Anwendungen von owSilProg oder Links darauf zu sammeln.

Der (bisher) einfachste UND billigste Weg um BLHeli zu flashen. Hierfür wird ein Arduino Nano V3 benutzt, und mit den neuesten Versionen von AvrBurnTool und BLHeliTool erledigt sich alles mit ein paar Clicks. Wie die Bilder zeigen besteht die ganze Bastelarbeit darin, drei Kabel an den Arduino anzulötet – wenn das nicht einfach ist :). Details gibt’s im Tutorial. Den Arduino Nano gibt es bereits für unschlagbare $10.50 inkl. Versand; für günstige Bezugsquellen schaut hier.
owsilprog arduino-nano setup olliw owsilprog arduino-nano setup olliw

Die BLHeliBox zum Konfigurieren und Flashen von BLHeli-BESCs. Basierend auf owSilProg ist es einfach eine Box zu bauen, welche „alles“ kann: (1) Flashen der Silabs-BESCs wie üblich über den PC, (2) Konfigurieren von BLHeli-BESCs wie üblich mit BLHeliTool über den PC, (3) „in-field“ Konfigurieren von BLHeli-BESCs unabhängig vom PC. Im letzten Fall arbeitet die Box als sehr komfortable „Programmierkarte“. Weitere Infos gibt’s im Tutorial. Ich habe zur BLHeliBox (v0.07) auch vier YouTube Videos gemacht. Hier eines der Videos als Appetizer:

Für Parts 1, 3, und 4 siehe mein YouTube Kanal oder im Tutorial

– Wie cool ist den das: Die BLHeliBox gibt es nun auch mit graphischen Display! Und klein ist sie auch. Und ein Stepup-Konverter wird auch nicht mehr benötigt. Sie besteht aus einem Arduino Nano oder Arduino Uno, sowie einem LCD4884 Shield. Bauanleitung verfügbar im Tutorial.
blhelibox v008g lcd4884-b 04 olliw blhelibox v008g lcd4884-b 05 olliw

– Copperclad hat sich eine BLHeliBox aus einem Arduino Uno + LCD Shield zusammen gebastelt. Firmware flashen, zusammenstecken, 3 Kabel anlöten… fertig… siehe hier. Fehlt nur noch ein Hobbyking Stepup-Konverter (Turnigy Voltage Booster), dann wäre es 1000%ig perfekt! Hier ein Foto von Copperclad’s Aufbau:

photo by copperclad @ helifreak

– Nimic hat die BLHeliBox mit Arduino Uno + LCD Shield + HobbyKing Turnigy Voltage Booster realisiert. Firmware flashen, Voltage Booster montieren, zusammenstecken, Kabel anlöten… und fertig ist die 1000%ig perfekte BLHeliBox… siehe hier, oder im Tutorial. Ein Video von Nimic’s Aufbau:

video by nimic @ helifreak

Windows GUI BLHeliTool zum Konfigurieren und Flashen von BLHeli-BESCs (Screenshots der Version v1.00).
blhelitool v100 basic 01 olliw
blhelitool v100 advanced 01 olliw blhelitool v100 flash 01 olliw blhelitool v100 faq 01 olliw

Copperclad’s detaillierte Beschreibung, gleiche Anwendung für BLHeli wie oben, allerdings mit einem Arduino Pro Mini mit 328p, 5.0 V, 16 MHz. Sehr ausführliche Bauanleitung mit vielen Bildern. In diesem Post kam ein Arduino UNO zum Einsatz.

Sirbow2’s detaillierte Beschreibung bei rcgroups, für Arduino Boards im Allgemeinen (veraltet, bitte „offiziellen“ Tutorials folgen)

– Wilsonn1996 konnte erfolgreich einen Arduino Mega 2560 als owSilProg-Programmer zum Flashen benutzen, siehe hier.

– Dehas war kreativ und benutzt einen Emartuino, siehe hier

– Fnodado war auch kreativ und benutzte seine CRIUS MultiWII zum Flashen von Turnigy 25 AEs, siehe hier.

photo by fnodado @ rcgroups

Eric hatte die geniale Idee einen Cheapduino als Multiple-ESC-Mode fähigen owSilProg-Programmierer für seinen Quadrocopter zu verwenden! Spitze! (siehe auch hier)
owsilprog cheapduino olliw
adapted from photos by Eric

– So hat es angefangen, mein Test- und Entwicklungsaufbau. Arduino Pro Mini mit 328p, 3.3 V, 8 MHz mit USB-TTL FT2323RL Adapter zum Flashen eines BESC mit der BLHeli Firmware von sskaug. Dazu gibt es noch die Windows GUI BLHeliTool um die Parameter der BESC einzustellen. Das war wie gesagt nur mein Test/Entwicklungsaufbau, die Geschichte hat sich weiterentwickelt: Die bisher einfachste/billigste Lösung basiert auf einem Arduino Nano, wie oben beschrieben. Auch die nun verfügbare Software macht den Umbau jeden Arduinos zu einem owSilProg-Programmer zum Kinderspiel (siehe dieses Tutorial).
silprog firsttest olliw


Aktuelle Firm- und Software

1. Okt. 2013, release v20131027
Firmware owSilProg v1.20,1.21:
  – für ATmega328p @ 16MHz: owsilprog_v120_m328p_16mhz_pb3pb4.hex
  – für ATmega328p @ 8MHz: owsilprog_v120_m328p_8mhz_pb3pb4.hex
  – für ATmega168 @ 16MHz: owsilprog_v120_m168_16mhz_pb3pb4.hex
  – für ATmega1280 @ 16MHz: owsilprog_v120_m1280_16mhz_pb2pb3.hex
  – für ATmega2560 @ 16MHz: owsilprog_v120_m2560_16mhz_pb2pb3.hex
  – für ATmega8 @ 16MHz: owsilprog_v121_m8_16mhz_pb3pb4.hex
  – für ATmega8 @ 8MHz: owsilprog_v120_m8_8mhz_pb3pb4.hex
  – für ArduFlyer (Mega2560): owsilprog_v120_m2560_16mhz_pf1pf0_arduflyer.hex
  – für Cheapduino (Mega8): owsilprog_v121_m8_16mhz_pb3pb2_cheapduino.hex
Windows GUI BLHeliTool v1.22:
  – BLHeliTool_v122.exe, BLHeliTool.ini, BLHeliTool.dev
Firmware BLHeliBox v1.20:
  – für ATmega328p @ 16MHz: BLHeliBox_v120_m328p_16MHz_pb3pb4.hex,
  BLHeliBox_v120_lcd4884_m328p_16MHz_pb3pb4.hex,
  BLHeliBox_v120_lcd4884_no5_m328p_16MHz_pb3pb4.hex
Windows GUI AvrBurnTool v1.01:
  – AvrBurnTool_v101.exe, AvrBurnTool.ini, AvrBurnTool4owSilProg.dev
Avrdude 5.11.1:
  – avrdude.exe, avrdude.conf (modified to handle Arduino Mega boards)
Arduino 1.0.1:
  – libusb0.dll, boards.txt, drivers folder
BLHeli:
  – alle Hex Files Rev8.0 bis Rev10.4 (Danke Steffen alias sskaug!)

Alles zusammen als zip File: owSilProg BLHeliTool BLHeliBox v20131027 [.zip] (11.7 MB)

Bauanleitungen und Tutorials zum owSilProg Projekt, BLHeliTool und der BLHeliBox findet ihr hier.

Nutzungsbedingungen/Terms of usage: The softwares/firmwares are NOT FREE. You may use it gratis and freely for private purposes only. You may not distribute it publicly or include it in distributions; use links to this page. It is strictly forbidden to use the work in full or in parts in any manner that is intended for or directed toward commercial advantage or private monetary compensation, except you have a written agreement by the author.

Acknowledgements: Die BLHeli Firmware ist von Steffen/sskaug. Dank an ihn für die grossartige Arbeit. Der Target-Calculator in BLHeliTool wurde durch 4712’s BLHeli-Setup Program inspiriert. Dank an ihn für die tolle Idee.

Hinweis: Ab Rev9.0 hängen einige der Defaultwerte nicht nur vom Mode (Main, Tail, Multi) sondern auch vom Typ des ESC ab… das wird (bisher) nicht in BlHeliTool berücksichtigt, d.h. beim Ausführen von ‚Default‘ werden für einige ESCs die Parameterwerte nicht auf die tatsächlichen Defaultwerte zurück gesetzt. Alle anderen Funktionen funktionieren ohne Einschränkung.

“Features” in v20130320 – v20131027
Änderungen in owSilProg v1.20,v1.21:
– keine
Änderungen in BLHeliTool v1.20,v1.21,v1.22:
– Unterstützung von BLHeli 10.1, 10.2, 10.3, 10.4
Änderungen in BLHeliBox v1.20:
– keine
Änderungen in AvrburnTool v1.01:
– keine

“Features” in v20130222b
Änderungen in owSilProg v1.20:
– Anpassungen entsprechend des 1/13-Updates der AN127 von Silabs
– Unterstützung von 14 C8051F Familien: F30x-F39x, F41x, F50x-F53x, F80x-F83x, F91x/92x
Änderungen in BLHeliTool v1.20:
– Unterstützung von BLHeli 10.0
– Unterstützung von 14 C8051F Familien: F30x-F39x, F41x, F50x-F53x, F80x-F83x, F91x/92x
Änderungen in BLHeliBox v1.20:
– Unterstützung von BLHeli 10.0
Änderungen in AvrburnTool v1.01:
– Bug beseitigt

“Features” in v20130204

“Features” in v20130120

“Features” in v20130103

“Features” in v20121210

“Features” in v20121110

“Features” in v20121104

“Features” in v20121017

“Features” in v20120921c

“Features” in v20120815

“Features” in v20120727

“Features” in v20120715

Firmware Repository


85 Kommentare

  1. Steve sagt:

    Moin,
    ich habe versucht via Arduino einen Silabs Si1000 zu flashen… leider sagt er immer „Device ID= 0x16, MCU Unknown“ Kann ich da noch irgendwas machen oder muss ich mir den original Programmer kaufen ?

    Beste Grüße

  2. Danila sagt:

    Ich versuche gerade mit einem arduino nano v3.0 ein c8051f320 zu flashen, bekomme jedoch bereits beim ersten Schreibversuch eine seltsame Antwort. Es kommt zwar am Ende „ok“ zurück jedoch sofort danach auch „er“. „g“ liefert „04“. Woran kann es liegen?

    Hier der Log
    –> r
    r
    ok
    >
    –> i
    i
    ok
    >
    –> e
    e
    ok
    >
    –> bw:0A0000000201540208030100000091
    bw:0A0000000201540208030100000091
    ok
    >
    er
    >

  3. lukas sagt:

    Hallo Olli
    Vielen Dank für dieses Tool! Leider bekomme ich nur folgende Meldung:
    d… dokE3 -> Device ID E3
    MCU INCORRECT or connection to target FAILED!
    Aufschrift auf dem Chip: SIL / F330 / B2208 / 1350+
    Regler: Favourite Sky III 30A Quattro
    Gibt es da eine Lösung? Die Verkabelung sollte stimmen, ich denke der Chip wird (noch) nicht unterstützt?

  4. Ardi sagt:

    Hello!

    Is it possible to use this programmer for flashing c8051f320 (has c2 interface). Currently BLheli softfare says that the MCU is unknown (device id = 0x09 = c8051f320) and doesn’t flash the firmware. Is it the limitation of BLHeli software?

    • avr sagt:

      Ich habe das gleiche Problem, allerdings mit einem f38x µC. Ich würde die Unterstützung auch selbst einbauen, wenn der Sourcecode verfügbar wäre. Die Programmierung scheint sich ja nur in der Initialisierung zu unterscheiden.

  5. Crady sagt:

    I’ve successfully built a BlHeliBox around an UNO R3 and an LCD4884 module
    Arduino_Uno_LCD4884_PB3PB4v112.hex

    When connected to my PC I’m able to change parameters and write them to the ESCs. However, there is no „write parameters“ option anywhere in the BlHeliBox menus. I am able to scroll to different settings and modify values via the joystick, but there is no option to ‚write‘ the values to the ESC.

    What am I missing?

    Please help and thanks,

    Crady

  6. OlliW sagt:

    Hey Holger
    wau, das ist ja mal der mit Abstand beste Kommentar aller Zeiten… S U P E R ! ! !
    das mit dem Pflegen ist gerade so ne Sache… die Belastung durch das STorM32bgc Projekt und den täglichen Dingen (wie Arbeit LOL) lässt im Moment wenig anderes Bastelmässiges zu…
    wie auch immer, Danke nochmals für deinen super Beitrag 🙂
    Cheers, Olli

  7. Holger sagt:

    Hallo Olli,

    funktioniert prima Deine Lösung zum Flashen und Einstellen von BLHeli-ESC’n.
    Leider habe ich auf die Schnelle nicht herausgefunden ob und wie man einen Arduino Micro dafür verwenden kann. Den hätte ich auch noch und der wäre wie der Nano schick klein für Unterwegs.
    Für das Flashen der aktuellen BLHeli Version 11.2 musste ich die Datei BLHeliTool.dev anpassen. Anscheinend hattest Du noch keine Zeit das Schema 17 hinzuzufügen.
    Ich versuche sie mal hier mit beizufügen. Dann kann man es einfach per C&P in die eigene Datei anpassen. Nur Multi nutze ich. Die anderen sind komplett ungetestet.
    Danke für das Bereitstellen und Pflegen
    Holger

    ########################################################################################################################################
    # BLHeli Layout 17 MAIN #
    #———————————

    my @OptionListLayout17Main= (
    {
    name => ‚Governor P Gain‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 7, steps => 1,
    adr => ‚1A03‘,
    size => 1,
    choices => [ ‚0.13‘, ‚0.17‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.5‘, ‚2.0‘, ‚3.0‘, ‚4.0‘, ‚6.0‘, ‚8.0‘ ],
    boxname => ‚Gov P Gain‘,
    eepname => ‚Eep_Pgm_Gov_P_Gain‘,
    column => 2,
    },{
    name => ‚Governor I Gain‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 7, steps => 1,
    adr => ‚1A04‘,
    size => 1,
    choices => [ ‚0.13‘, ‚0.17‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.5‘, ‚2.0‘, ‚3.0‘, ‚4.0‘, ‚6.0‘, ‚8.0‘ ],
    boxname => ‚Gov I Gain‘,
    eepname => ‚Eep_Pgm_Gov_I_Gain‘,
    },{
    name => ‚Governor Setup Target‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 180, steps => 1,
    adr => ‚1A11‘,
    size => 1,
    boxname => ‚Gov Set Target‘,
    eepname => ‚Eep_Pgm_Gov_Setup_Target‘,
    equation => ‚$s= int( 100.0*$x/255.0 +0.5 ).\‘ %\‘;‘,
    },{
    name => ‚Governor Mode‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 4, default => 1, steps => 1,
    adr => ‚1A05‘,
    size => 1,
    choices => [ ‚Tx‘, ‚Arm‘, ‚Setup‘, ‚Off‘ ],
    boxname => ‚Gov Mode‘,
    eepname => ‚Eep_Pgm_Gov_Mode‘,
    },{
    name => ‚Low Voltage Limit‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 6, default => 4, steps => 1,
    adr => ‚1A06‘,
    size => 1,
    choices => [ ‚Off‘, ‚3.0 V/cell‘, ‚3.1 V/cell‘, ‚3.2 V/cell‘, ‚3.3 V/cell‘, ‚3.4 V/cell‘ ],
    boxname => ‚Low Volt Limit‘,
    eepname => ‚Eep_Pgm_Low_Voltage_Lim‘,
    },{
    name => ‚Motor Direction‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A0B‘,
    size => 1,
    choices => [ ‚Normal‘, ‚Reversed‘ ],
    boxname => ‚Mot Direction‘,
    eepname => ‚Eep_Pgm_Direction‘,
    },{
    name => ‚Input PWM Polarity‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A0C‘,
    size => 1,
    choices => [ ‚positive‘, ’negative‘ ],
    boxname => ‚Input PWM Pol‘,
    eepname => ‚Eep_Pgm_Input_Pol‘,
    },{
    name => ‚Startup Power‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 11, steps => 1,
    adr => ‚1A09‘,
    size => 1,
    choices => [ ‚0.031‘, ‚0.047‘, ‚0.063‘, ‚0.094‘, ‚0.125‘, ‚0.188‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.25‘, ‚1.50‘ ],
    boxname => ‚Startup Power‘,
    eepname => ‚Eep_Pgm_Startup_Pwr‘,
    column => 3,
    },{
    name => ‚Startup RPM‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A12‘,
    size => 1,
    choices => [ ‚0.67‘, ‚0.8‘, ‚1.00‘, ‚1.25‘, ‚1.5‘ ],
    boxname => ‚Startup RPM‘,
    eepname => ‚Eep_Pgm_Startup_Rpm‘,
    },{
    name => ‚Startup Acceleration‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 1, steps => 1,
    adr => ‚1A13‘,
    size => 1,
    choices => [ ‚0.4‘, ‚0.7‘, ‚1.0‘, ‚1.5‘, ‚2.3‘ ],
    boxname => ‚Startup Accel‘,
    eepname => ‚Eep_Pgm_Startup_Accel‘,
    },{
    name => ‚Motor Timing‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A15‘,
    size => 1,
    choices => [ ‚low‘, ‚medium low‘, ‚medium‘, ‚medium high‘, ‚high‘ ],
    boxname => ‚Mot Timing‘,
    eepname => ‚Eep_Pgm_Comm_Timing‘,
    },{
    name => ‚Motor PWM Frequency‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 3, default => 2, steps => 1,
    adr => ‚1A0A‘,
    size => 1,
    choices => [ ‚high‘, ‚low‘, ‚damped light‘ ],
    boxname => ‚Mot PWM Freq‘,
    eepname => ‚Eep_Pgm_Pwm_Freq‘,
    },{
    name => ‚Damping Force‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 6, default => 1, steps => 1,
    adr => ‚1A16‘,
    size => 1,
    choices => [ ‚very low‘, ‚low‘, ‚medium low‘, ‚medium high‘, ‚high‘, ‚highest‘ ],
    boxname => ‚Damping Force‘,
    eepname => ‚Eep_Pgm_Damping_Force‘,
    },{
    name => ‚Governor Range‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 3, default => 1, steps => 1,
    adr => ‚1A17‘,
    size => 1,
    choices => [ ‚high‘, ‚middle‘, ‚low‘ ],
    boxname => ‚Gov Range‘,
    eepname => ‚Eep_Pgm_Gov_Range‘,
    column => 1,
    expert => 1,
    },{
    name => ‚Startup Method‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A18′,
    size => 1,
    choices => [ ’stepped‘, ‚direct‘ ],
    boxname => ‚Startup Method‘,
    eepname => ‚Eep_Pgm_Startup_Method‘,
    expert => 1,
    },{
    name => ‚Demag Compensation‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 1, steps => 1,
    adr => ‚1A1F‘,
    size => 1,
    choices => [ ‚off‘, ‚low‘, ‚high‘ ],
    boxname => ‚Demag Compen‘,
    eepname => ‚Eep_Pgm_Demag_Comp‘,
    expert => 1,
    },{
    name => ‚BEC Voltage High‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 0, steps => 1,
    adr => ‚1A20‘,
    size => 1,
    choices => [ ‚low‘, ‚high‘ ],
    boxname => ‚BEC Volt High‘,
    eepname => ‚Eep_Pgm_BEC_Voltage_High‘,
    expert => 1,
    },{
    name => ‚Re-Arm at Start‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 0, steps => 1,
    adr => ‚1A10‘,
    size => 1,
    choices => [ ‚off‘, ‚on‘ ],
    boxname => ‚Rearm at Start‘,
    eepname => ‚Eep_Main_Rearm_Start‘,
    expert => 1,
    },{
    name => ‚Programming by Tx‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 1, steps => 1,
    adr => ‚1A0F‘,
    size => 1,
    choices => [ ‚off‘, ‚on‘ ],
    boxname => ‚Program by Tx‘,
    eepname => ‚Eep_Enable_TX_Program‘,
    expert => 1,
    },{
    name => ‚Throttle Rate‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 13, steps => 1,
    adr => ‚1A1E‘,
    size => 1,
    choices => [ ‚2‘, ‚3‘, ‚4‘, ‚6‘, ‚8‘, ’12‘, ’16‘, ’24‘, ’32‘, ’48‘, ’64‘, ‚128‘, ‚255‘ ],
    boxname => ‚Throttle Rate‘,
    eepname => ‚Eep_Pgm_Throttle_Rate‘,
    column => 2,
    expert => 1,
    },{
    name => ‚Throttle Min‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 37, steps => 1,
    adr => ‚1A19‘,
    size => 1,
    boxname => ‚Throttle Min‘,
    eepname => ‚Eep_Pgm_Ppm_Min_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Throttle Max‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 208, steps => 1,
    adr => ‚1A1A‘,
    size => 1,
    boxname => ‚Throttle Max‘,
    eepname => ‚Eep_Pgm_Ppm_Max_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Beacon Strength‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 200, steps => 1,
    adr => ‚1A1C‘,
    size => 1,
    boxname => ‚Beacon Strength‘,
    eepname => ‚Eep_Pgm_Beacon_Strength‘,
    column => 3,
    expert => 1,
    },{
    name => ‚Beacon Delay‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 4, steps => 1,
    adr => ‚1A1D‘,
    size => 1,
    choices => [ ‚1 min‘, ‚2 min‘, ‚5 min‘, ’10 min‘, ‚infinite‘ ],
    boxname => ‚Beacon Delay‘,
    eepname => ‚Eep_Pgm_Beacon_Delay‘,
    expert => 1,
    },{
    name => ‚Beep Strength‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 120, steps => 1,
    adr => ‚1A1B‘,
    size => 1,
    boxname => ‚Beep Strength‘,
    eepname => ‚Eep_Pgm_Beep_Strength‘,
    expert => 1,
    }
    );

    ########################################################################################################################################
    # BLHeli Layout 17 TAIL #
    #———————————

    my @OptionListLayout17Tail= (
    {
    name => ‚Tail Gain‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A07‘,
    size => 1,
    choices => [ ‚0.75‘, ‚0.88‘, ‚1.00‘, ‚1.12‘, ‚1.25‘ ],
    boxname => ‚Gain‘,
    eepname => ‚Eep_Pgm_Motor_Gain‘,
    column => 2,
    },{
    name => ‚Tail Idle Speed‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 4, steps => 1,
    adr => ‚1A08‘,
    size => 1,
    choices => [ ‚low‘, ‚medium low‘, ‚medium‘, ‚medium high‘, ‚high‘ ],
    boxname => ‚Idle Speed‘,
    eepname => ‚Eep_Pgm_Motor_Idle‘,
    },{
    name => ‚Motor Direction‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A0B‘,
    size => 1,
    choices => [ ‚Normal‘, ‚Reversed‘, ‚Bidirectional‘ ],
    boxname => ‚Mot Direction‘,
    eepname => ‚Eep_Pgm_Direction‘,
    },{
    name => ‚Input PWM Polarity‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A0C‘,
    size => 1,
    choices => [ ‚positive‘, ’negative‘ ],
    boxname => ‚Input PWM Pol‘,
    eepname => ‚Eep_Pgm_Input_Pol‘,
    },{
    name => ‚Startup Power‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 11, steps => 1,
    adr => ‚1A09‘,
    size => 1,
    choices => [ ‚0.031‘, ‚0.047‘, ‚0.063‘, ‚0.094‘, ‚0.125‘, ‚0.188‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.25‘, ‚1.50‘ ],
    boxname => ‚Startup Power‘,
    eepname => ‚Eep_Pgm_Startup_Pwr‘,
    column => 3,
    },{
    name => ‚Startup RPM‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A12‘,
    size => 1,
    choices => [ ‚0.67‘, ‚0.8‘, ‚1.00‘, ‚1.25‘, ‚1.5‘ ],
    boxname => ‚Startup RPM‘,
    eepname => ‚Eep_Pgm_Startup_Rpm‘,
    },{
    name => ‚Startup Acceleration‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 5, steps => 1,
    adr => ‚1A13‘,
    size => 1,
    choices => [ ‚0.4‘, ‚0.7‘, ‚1.0‘, ‚1.5‘, ‚2.3‘ ],
    boxname => ‚Startup Accel‘,
    eepname => ‚Eep_Pgm_Startup_Accel‘,
    },{
    name => ‚Motor Timing‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A15‘,
    size => 1,
    choices => [ ‚low‘, ‚medium low‘, ‚medium‘, ‚medium high‘, ‚high‘ ],
    boxname => ‚Mot Timing‘,
    eepname => ‚Eep_Pgm_Comm_Timing‘,
    },{
    name => ‚Motor PWM Frequency‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 4, default => 4, steps => 1,
    adr => ‚1A0A‘,
    size => 1,
    choices => [ ‚high‘, ‚low‘, ‚damped light‘, ‚damped‘ ],
    boxname => ‚Mot PWM Freq‘,
    eepname => ‚Eep_Pgm_Pwm_Freq‘,
    },{
    name => ‚Damping Force‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 6, default => 5, steps => 1,
    adr => ‚1A16‘,
    size => 1,
    choices => [ ‚very low‘, ‚low‘, ‚medium low‘, ‚medium high‘, ‚high‘, ‚highest‘ ],
    boxname => ‚Damping Force‘,
    eepname => ‚Eep_Pgm_Damping_Force‘,
    },{
    name => ‚Startup Method‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A18′,
    size => 1,
    choices => [ ’stepped‘, ‚direct‘ ],
    boxname => ‚Startup Method‘,
    eepname => ‚Eep_Pgm_Startup_Method‘,
    column => 1,
    expert => 1,
    },{
    name => ‚Demag Compensation‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 3, default => 1, steps => 1,
    adr => ‚1A1F‘,
    size => 1,
    choices => [ ‚Disabled‘, ‚Low‘, ‚High‘ ],
    boxname => ‚Demag Compen‘,
    eepname => ‚Eep_Pgm_Demag_Comp‘,
    expert => 1,
    },{
    name => ‚BEC Voltage High‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 0, steps => 1,
    adr => ‚1A20‘,
    size => 1,
    choices => [ ‚low‘, ‚high‘ ],
    boxname => ‚BEC Volt High‘,
    eepname => ‚Eep_Pgm_BEC_Voltage_High‘,
    expert => 1,
    },{
    name => ‚Programming by Tx‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 1, steps => 1,
    adr => ‚1A0F‘,
    size => 1,
    choices => [ ‚off‘, ‚on‘ ],
    boxname => ‚Program by Tx‘,
    eepname => ‚Eep_Enable_TX_Program‘,
    expert => 1,
    },{
    name => ‚Throttle Rate‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 13, steps => 1,
    adr => ‚1A1E‘,
    size => 1,
    choices => [ ‚2‘, ‚3‘, ‚4‘, ‚6‘, ‚8‘, ’12‘, ’16‘, ’24‘, ’32‘, ’48‘, ’64‘, ‚128‘, ‚255‘ ],
    boxname => ‚Throttle Rate‘,
    eepname => ‚Eep_Pgm_Throttle_Rate‘,
    column => 2,
    expert => 1,
    },{
    name => ‚Throttle Min‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 37, steps => 1,
    adr => ‚1A19‘,
    size => 1,
    boxname => ‚Throttle Min‘,
    eepname => ‚Eep_Pgm_Ppm_Min_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Throttle Center‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 122, steps => 1,
    adr => ‚1A21‘,
    size => 1,
    boxname => ‚Throttle Center‘,
    eepname => ‚Eep_Pgm_Ppm_Center_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Throttle Max‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 208, steps => 1,
    adr => ‚1A1A‘,
    size => 1,
    boxname => ‚Throttle Max‘,
    eepname => ‚Eep_Pgm_Ppm_Max_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Beacon Strength‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 80, steps => 1,
    adr => ‚1A1C‘,
    size => 1,
    boxname => ‚Beacon Strength‘,
    eepname => ‚Eep_Pgm_Beacon_Strength‘,
    column => 3,
    expert => 1,
    },{
    name => ‚Beacon Delay‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 4, steps => 1,
    adr => ‚1A1D‘,
    size => 1,
    choices => [ ‚1 min‘, ‚2 min‘, ‚5 min‘, ’10 min‘, ‚infinite‘ ],
    boxname => ‚Beacon Delay‘,
    eepname => ‚Eep_Pgm_Beacon_Delay‘,
    expert => 1,
    },{
    name => ‚Beep Strength‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 40, steps => 1,
    adr => ‚1A1B‘,
    size => 1,
    boxname => ‚Beep Strength‘,
    eepname => ‚Eep_Pgm_Beep_Strength‘,
    expert => 1,
    }
    );

    ########################################################################################################################################
    # BLHeli Layout 17 MULTI #
    #———————————

    my @OptionListLayout17Multi= (
    {
    name => ‚Governor P Gain‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 9, steps => 1,
    adr => ‚1A03‘,
    size => 1,
    choices => [ ‚0.13‘, ‚0.17‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.5‘, ‚2.0‘, ‚3.0‘, ‚4.0‘, ‚6.0‘, ‚8.0‘ ],
    boxname => ‚Gov P Gain‘,
    eepname => ‚Eep_Pgm_Gov_P_Gain‘,
    column => 2,
    },{
    name => ‚Governor I Gain‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 9, steps => 1,
    adr => ‚1A04‘,
    size => 1,
    choices => [ ‚0.13‘, ‚0.17‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.5‘, ‚2.0‘, ‚3.0‘, ‚4.0‘, ‚6.0‘, ‚8.0‘ ],
    boxname => ‚Gov I Gain‘,
    eepname => ‚Eep_Pgm_Gov_I_Gain‘,
    },{
    name => ‚Governor Mode‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 4, default => 4, steps => 1,
    adr => ‚1A05‘,
    size => 1,
    choices => [ ‚high range‘, ‚mid range‘, ‚low range‘, ‚off‘ ],
    boxname => ‚Gov Mode‘,
    eepname => ‚Eep_Pgm_Gov_Mode‘,
    },{
    name => ‚Low Voltage Limit‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 6, default => 1, steps => 1,
    adr => ‚1A06‘,
    size => 1,
    choices => [ ‚off‘, ‚3.0 V/cell‘, ‚3.1 V/cell‘, ‚3.2 V/cell‘, ‚3.3 V/cell‘, ‚3.4 V/cell‘ ],
    boxname => ‚Low Volt Limit‘,
    eepname => ‚Eep_Pgm_Low_Voltage_Lim‘,
    },{
    name => ‚Motor Direction‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 3, default => 1, steps => 1,
    adr => ‚1A0B‘,
    size => 1,
    choices => [ ’normal‘, ‚reversed‘, ‚bidirectional‘ ],
    boxname => ‚Mot Direction‘,
    eepname => ‚Eep_Pgm_Direction_Rev‘,
    },{
    name => ‚Input PWM Polarity‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 1, steps => 1,
    adr => ‚1A0C‘,
    size => 1,
    choices => [ ‚positive‘, ’negative‘ ],
    boxname => ‚Input PWM Pol‘,
    eepname => ‚Eep_Pgm_Input_Pol‘,
    },{
    name => ‚Startup Power‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 11, steps => 1,
    adr => ‚1A09‘,
    size => 1,
    choices => [ ‚0.031‘, ‚0.047‘, ‚0.063‘, ‚0.094‘, ‚0.125‘, ‚0.188‘, ‚0.25‘, ‚0.38‘, ‚0.50‘, ‚0.75‘, ‚1.00‘, ‚1.25‘, ‚1.50‘ ],
    boxname => ‚Startup Power‘,
    eepname => ‚Eep_Pgm_Startup_Pwr‘,
    column => 3,
    },{
    name => ‚Startup RPM‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 1, steps => 1,
    adr => ‚1A12‘,
    size => 1,
    choices => [ ‚0.67‘, ‚0.8‘, ‚1.00‘, ‚1.25‘, ‚1.5‘ ],
    boxname => ‚Startup RPM‘,
    eepname => ‚Eep_Pgm_Startup_Rpm‘,
    },{
    name => ‚Startup Acceleration‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 5, steps => 1,
    adr => ‚1A13‘,
    size => 1,
    choices => [ ‚0.4‘, ‚0.7‘, ‚1.0‘, ‚1.5‘, ‚2.3‘ ],
    boxname => ‚Startup Accel‘,
    eepname => ‚Eep_Pgm_Startup_Accel‘,
    },{
    name => ‚Motor Timing‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A15‘,
    size => 1,
    choices => [ ‚low‘, ‚medium low‘, ‚medium‘, ‚medium high‘, ‚high‘ ],
    boxname => ‚Mot Timing‘,
    eepname => ‚Eep_Pgm_Comm_Timing‘,
    },{
    name => ‚Motor PWM Frequency‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 4, default => 1, steps => 1,
    adr => ‚1A0A‘,
    size => 1,
    choices => [ ‚high‘, ‚low‘, ‚damped light‘, ‚damped‘ ],
    boxname => ‚Mot PWM Freq‘,
    eepname => ‚Eep_Pgm_Pwm_Freq‘,
    },{
    name => ‚Damping Force‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 6, default => 6, steps => 1,
    adr => ‚1A16‘,
    size => 1,
    choices => [ ‚very low‘, ‚low‘, ‚medium low‘, ‚medium high‘, ‚high‘, ‚highest‘ ],
    boxname => ‚Damping Force‘,
    eepname => ‚Eep_Pgm_Damping_Force‘,
    },{
    name => ‚Startup Method‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 2, default => 2, steps => 1,
    adr => ‚1A18′,
    size => 1,
    choices => [ ’stepped‘, ‚direct‘ ],
    boxname => ‚Startup Method‘,
    eepname => ‚Eep_Pgm_Startup_Method‘,
    column => 1,
    expert => 1,
    },{
    name => ‚Demag Compensation‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 3, default => 2, steps => 1,
    adr => ‚1A1F‘,
    size => 1,
    choices => [ ‚Disabled‘, ‚Low‘, ‚High‘ ],
    boxname => ‚Demag Compen‘,
    eepname => ‚Eep_Pgm_Demag_Comp‘,
    expert => 1,
    },{
    name => ‚Gain‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 5, default => 3, steps => 1,
    adr => ‚1A07‘,
    size => 1,
    choices => [ ‚0.75‘, ‚0.88‘, ‚1.00‘, ‚1.12‘, ‚1.25‘ ],
    boxname => ‚Gain‘,
    eepname => ‚Eep_Pgm_Motor_Gain‘,
    expert => 1,
    },{
    name => ‚BEC Voltage High‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 0, steps => 1,
    adr => ‚1A20‘,
    size => 1,
    choices => [ ‚low‘, ‚high‘ ],
    boxname => ‚BEC Volt High‘,
    eepname => ‚Eep_Pgm_BEC_Voltage_High‘,
    expert => 1,
    },{
    name => ‚Programming by Tx‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 0, max => 1, default => 1, steps => 1,
    adr => ‚1A0F‘,
    size => 1,
    choices => [ ‚off‘, ‚on‘ ],
    boxname => ‚Program by Tx‘,
    eepname => ‚Eep_Enable_TX_Program‘,
    expert => 1,
    },{
    name => ‚Throttle Rate‘,
    type => ‚OPTTYPE_LISTB‘, len => 0, ppos => 0, min => 1, max => 13, default => 13, steps => 1,
    adr => ‚1A1E‘,
    size => 1,
    choices => [ ‚2‘, ‚3‘, ‚4‘, ‚6‘, ‚8‘, ’12‘, ’16‘, ’24‘, ’32‘, ’48‘, ’64‘, ‚128‘, ‚255‘ ],
    boxname => ‚Throttle Rate‘,
    eepname => ‚Eep_Pgm_Throttle_Rate‘,
    column => 2,
    expert => 1,
    },{
    name => ‚Throttle Min‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 37, steps => 1,
    adr => ‚1A19‘,
    size => 1,
    boxname => ‚Throttle Min‘,
    eepname => ‚Eep_Pgm_Ppm_Min_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Throttle Center‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 122, steps => 1,
    adr => ‚1A21‘,
    size => 1,
    boxname => ‚Throttle Center‘,
    eepname => ‚Eep_Pgm_Ppm_Center_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Throttle Max‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 208, steps => 1,
    adr => ‚1A1A‘,
    size => 1,
    boxname => ‚Throttle Max‘,
    eepname => ‚Eep_Pgm_Ppm_Max_Throttle‘,
    expert => 1,
    equation => ‚$s= int( 4*$x + 1000 +0.5 );‘,
    },{
    name => ‚Beacon Strength‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 80, steps => 1,
    adr => ‚1A1C‘,
    size => 1,
    boxname => ‚Beacon Strength‘,
    eepname => ‚Eep_Pgm_Beacon_Strength‘,
    column => 3,
    expert => 1,
    },{
    name => ‚Beacon Delay‘,
    type => ‚OPTTYPE_LISTA‘, len => 0, ppos => 0, min => 1, max => 5, default => 4, steps => 1,
    adr => ‚1A1D‘,
    size => 1,
    choices => [ ‚1 min‘, ‚2 min‘, ‚5 min‘, ’10 min‘, ‚infinite‘ ],
    boxname => ‚Beacon Delay‘,
    eepname => ‚Eep_Pgm_Beacon_Delay‘,
    expert => 1,
    },{
    name => ‚Beep Strength‘,
    type => ‚OPTTYPE_UC‘, len => 3, ppos => 0, min => 0, max => 255, default => 40, steps => 1,
    adr => ‚1A1B‘,
    size => 1,
    boxname => ‚Beep Strength‘,
    eepname => ‚Eep_Pgm_Beep_Strength‘,
    expert => 1,
    }
    );

    @{$OptionListAll{layout17main}}= @OptionListLayout17Main;
    @{$OptionListAll{layout17tail}}= @OptionListLayout17Tail;
    @{$OptionListAll{layout17multi}}= @OptionListLayout17Multi;

  8. Thomas sagt:

    Hallo OlliW,

    super Arbeit, danke für die Möglichkeit zum flashen der SiLab µC.
    Gibt es auch eine Version des owSilProg für den ATMega 32U4?
    Benütze das Olimexino 32U4, ist recht günstig und man braucht keinen USB- ser Adapter 🙂
    Könnte dir ein Board zur Verfügung stellen.

    Danke
    Thomas

  9. steidlmick sagt:

    Hallo Olli,
    danke für die tolle Software!
    Ist für owSilProg vielleicht eine Anpassung/ein Update für BLHeli 11 geplant/in Arbeit?

    Grüße,
    Mick

  10. Jack sagt:

    Dear OlliW,
    Thanks for your prompt reply with useful information! I don’t know what to say except saying thank you once again!

    Cheers!

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.