owSilProg, BLHeliTool, BLHeliBox: Tutorials

This page presents tutorials on Flashing of Silabs ESCs using owSilProg, and related topics such as the Windows program BLHeliTool, the programming box BLHeliBox, and the Bluetooth extension:

  1. Building an owSilProg Programmer
  2. BLHeliTool: Flashing the BLHeli Firmware
  3. BLHeliTool: Setting the BLHeli Parameters
  4. The Multiple-ESC Functionality
  5. BLHeliBox: What it is and how to use it
  6. BLHeliBox: Construction Manuals
  7. The Bluetooth Extension

Appendix: Sources of Supply

The basics of owSilProg, and the applications BLHeliTool and BLHeliBox based on it, are described here. For ESCs with Silabs chips the firmware BLHeli of Steffen Skaug alias sskaug is available (Thanks for this great work!).

Why owSilProg?
The easiest way to flash Silabs microcontroller is to just buy what’s nessecary, i.e. the Silabs toolstick or one of its clones (the additionally required software is available for free). There can however be good reasons for using owSilProg:

  • Continuity: If you are already an AVR „follower“ you may not want to buy extra Silabs equipment.
  • Cost: It’s currently the cheapest solution, especially if you already own AVR equipment.
  • Simplicity: For anyone who can solder three wires it’s a piece of cake. Only buying is easier…
  • Functionality: Access to opportunities that you wouldn’t have otherwise, such as the BLHeliBox or the Multiple-ESC-Feature.
  • Reusability: Arduino boards can be also used for many other purposes.
  • and X more reasons…

BLHeli
BLHeli suppports many ESCs with Silabs chips by now. An excellent source of info, with links to pictures of every ESC, is the google spreadsheet ESC specs for Simonk / BLHeli FW flash (Thanks to TomSn0w and the others for maintaining it!). For questions about BLHeli the first place to ask is Steffen’s helifreak thread BLHeli for SiLabs ESCs. Prior to that one should however have read Steffen’s manual BLHeli programming by TX SiLabs Rev10.x.pdf!


I. Building an owSilProg Programmer
(instructions are for owSilProg firmware package version v20130103 and later)

The owSilProg programmer is the piece of hardware which you need to flash Silabs microcontroller. It’s really quite easy to build. Many DIY options exist (e.g. this), but using an Arduino board is most simple.

What is needed

  • an Arduino board (with USB connector)
  • three cables
  • latest version of the owSilProg firmware package

Excellent experience exist for the Arduino Nano, Arduino Uno, Arduino Mega 2560, and Arduino Duemilanove. But any Arduino board or clone works. The multicopter folks even used their flight controllers (MultiWii, APM, …) successfully. The Cheapduino is a fantastic solution for a permanent installation in a quadcopter.

To my knowledge the cheapest option is an Arduino Nano. It is available already for unbeatable $11 (incl. shipping), see the Appendix. Very popular is the Arduino Uno. It costs slightly more than the Nano (Appendix). An advantage might be that the Uno can easily be upgraded to a BLHeliBox by attaching an Arduino LCD-keypad shield to it.

What you need to know
When you are using one of the „usual“ Arduino boards (Nano, Uno, Mega, Duemilanove), then you don’t need to know anything further than which board you’re using.

For other Arduino boards you will need to know the processor type (e.g. Atmega168, Atmega328p, Atmega2560, etc.), the clock frequency (8 MHz or 16 MHz), and the baud rate of the installed bootloader (19200 bps, 57600 bps, or 115200 bps). The processor type and clock frequency should be evident from the description of your Arduino board. The baud rate can be determined from the file boards.txt. It is easier, however, to just try out the three possible baud rates 19200, 57600, or 115200 bps.

What to do

  1. Download the owSilProg zip file from here. This file includes all required firmware/software.
  2. Unzip the zip file into a directory of your choice. Let’s call it C:\owSilProg. Other installations (of e.g. drivers) are normally not required.
  3. Start the Windows programm AvrBurnTool_vxxx.exe (it is located in the directory C:\owSilProg). It opens the following window:
    avrburntool v101 startup olliw
  4. Set the field ‚1) Select your project‘: The drop-down box provides several options. Choose one of the ‚owSilProg‘ options, according to your Arduion board (e.g. ‚owSilProg on Arduino Uno‘ for an Uno). If your board is not listet, then please choose ‚owSilProg using other Arduino‘.
  5. Set the entries in the field ‚2) Select any of the missing entries‘: For the usual Arduino boards only the entry in the field ‚Port‘ needs to be set. In this case please ignore the following and jump directly to the next step! Otherwise, the drop-down box ‚Select your AVR programmer‘ should be set to either ‚Arduino @ 19200bps‘, ‚Arduino @ 57600bps‘, or ‚Arduino @ 115200bps‘ according to the baudrate, and in the field ‚Select your target/device‘ the correct processor type should be selected. Finally, in the field ‚Select the bootloader/firmware hex file‘ the proper owSilProg hex file should be selected according to the processor type, the clock frequency, and the desired pins for the programming lines C2CK and C2D.
  6. Set the field ‚Port‘: Enter the USB port (or associated virtual COM port) to which the Arduino board is connected. The drop-down box lists the currently available ports. The correct port can be found as follows:
    – Arduino is not connected to the PC: Click the arrow button and memorize the listed COM ports.
    – Connect the Arduino board with a USB cable to the PC, and wait until the device has been registered.
    – Click on the arrow button again and open the list of current COM ports. Select the newly added COM port.
  7. Burn owSilProg firmware ‚6) Burn the target/device‘: Pressing the Burn All button starts the actual burn process. The status window of AvrBurnTool starts displaying messages. Additionally a further window opens, which runs the program avrdude. Please wait until the message press any key to continue… appears. If all goes well, the window looks like this (for the example of an Arduino Nano):
    owsilprog tutorial avrburntool burnall avrdude olliw
  8. Solder three cables to the Arduino Board: Finally, three cables, which will be wired to the programming pads GND (black), C2CK (red) and C2D (white) on the Silabs BESC, are soldered to the related pins on the Arduino board (to use the multiple ESC function one needs further cables, see Chapter IV). Which pins are related to C2CK and C2D is determined from the file name of the owSilProg hex file; the mark „pb3pb4“ e.g. indicates that it are PB3 and PB4. For „mini“ and „standard“ Arduino boards, the (ATmega) pins PB3 and PB4 are however electrically identical to the (Arduino) digital pins D11 and D12, and also to the MOSI and MISO pins of the ISP connector on the Arduino board. This pin assignment thus holds:

    Arduino Nano, Uno, Mini, Pro Mini, Duemilanove, etc.:
      pb3pb4:   PB3 = digital D11 = MOSI → C2CK = red,   PB4 = digital D12 = MISO → C2D = white

    In most cases it will be most practical to use the GND/MOSI/MISO pins of the ISP connector, and to attach the three cables there. For an Arduino Nano (left) and Arduino Uno (right) it then may look like this:
      owsilprog arduino-nano setup olliwowsilprog arduino uno scheme olliw
    For the mega boards it is more convennient to use the pins PB2 and PB3 (digital D51/D50) as these correspond here to MOSI and MISO. Hence, when using the owSilProg file with the mark „pb2pb3“ the C2CK and C2D lines can again be accessed exactly as before at the MOSI/MISO pins of the ISP connector. For the ArduFlyer apm2.5 board PF1 and PF0 are used (see here).
  9. Congratulations… you did it!

The examples of an Arduino Nano and Uno were chosen above, but the instructions, with the obvious changes to the field entries and pins for the three cables, do also carry over to other Arduino boards.

If for your microcontroller and/or pin assignment the appropriate owSilProg hex file is missing, then please don’t hesitate to contact me. In general, it’s easy to create a suitable hex file!

FAQ

  • Can the Arduino be further used after having been flashed with owSilProg, i.e. does the bootlader stay intact?
    Yes. The bootloader stays intact and the Arduino can be loaded with new sketches after having been flashed with owSilProg exactly as it could be before.

Trouble Shooting

  • When connecting the Arduino board the first time with a PC, it is sometimes necessary to install a driver. The Arduino drivers are included since version v20120921 in the owSilProg firmware package and are located in the subdirectory ~/arduino-1.0.1/drivers/. A manual for installing the driver is e.g. Arduino UNO Windows 7 USB driver installation.
  • The name of the directory which hosts the bootloader/firmware hex file MUST NOT contain spaces! Avrdude can’t handle that and will abort with an error.
  • On older Arduino boards it might be neccessary in step 7 to hit the reset button (as they do not provide the auto reset feature).
  • In rare cases the file libusb0.dll (or libusb0_x64.dll) seems to be needed. Since version v20130103 it is included in the owSilProg firmware package, and problems should not occur.
  • In earlier firmware versions C2CK and C2D were attached to the pins PD2=D2 and PD3=D3, and it’s still said so in some manuals/tutorials on the web. Don’t get confused by that. The correct pins are indicated in the file name of the owSilProg hex file! (and if not, then you are using an outdated version)


II. BLHeliTool: Flashing the BLHeli Firmware
(instructions are for owSilProg firmware package version v20130103 or BLHeliTool v1.00, and later)

What is needed

  • owSilProg programmer
  • latest version of the owSilProg firmware package, or BLHeliTool files (.exe, .ini, .dev)
  • BESC with Silabs microcontroller

What you need to know
For the following you should know where the pads for the three programming lines GND, C2CK, and C2D are located on your BESC. The best source of information is IMHO Steffen’s pdf document BLHeli supported SiLabs ESCs.pdf. Further you should know how you want to connect the three corresponding cables of the owSilProg programmer to these pads. The answer depends a lot on your particular case. Please consult the appropriate threads/documents, or just ask in the respective threads.

The following color coding has become common to assign cables and pads:

GND = black   C2CK = red   C2D = white

Tip: Whenever you find four pads in a row next to the Silabs chip, which is the case for many BESCs, then you can bet that they are in the sequence GND, Vcc, C2CK, C2D. Some examples are show in the picture below. Which one is GND can easily be identified from the layout of the print board, or by testing connection with a multimeter.
esc pads 02 olliw

What to do

  1. Connect owSilProg programmer and BESC: What has to be done here depends on your setup. In most cases, the three GND, C2CK, and C2D cables will be soldered to the corresponding pads on the BESC board, or an appropriate connector is build. It could look like this:owsilprog tut01 c2pads olliw
  2. Connect owSilProg programmer and PC: Connect the owSilProg programmer with a USB cable to the PC.
  3. Connect BESC with battery: How the BESC is powered depends on your specific situation, but in most cases it is powered up ​​by simply plugging in the battery.
  4. Start the Windows program BLHeliTool_vxxx.exe: The program is located in the directory where you unpacked your owSilProg package. It opens the following (or a similar) window:blhelitool v100 startup2 01 olliw
  5. Set the field ‚Port‘: Enter the USB port (or associated virtual COM port) to which the Arduino board is connected. The drop-down box lists the currently available ports. The correct port can be found as follows:
    – Arduino is not connected to the PC: Click the arrow button and memorize the listed COM ports.
    – Connect the Arduino board with a USB cable to the PC, and wait until the device has been registered.
    – Click on the arrow button again and open the list of current COM ports. Select the newly added COM port.
  6. Set the field ‚Multiple ESC Mode‘: If you’re not familiar with the multiple ESC function, then please select ‚default‘. For info on the multiple ESC function please consult Chapter IV.
  7. Switch to the tab ‚Flash BLHeli to BESC‘: The BLHeliTool window looks then like this (or similar):blhelitool v100 flash 01 olliw
  8. Choose the hex file with the desired BLHeli firmware: The appropriate hex file can be determined most easily with the filters. Specify first the directory containing the BLHeli hex files in the field Hex File Directory. Usually it is BLHeliHexFiles, as preset. Then select via the drop-down boxes the BESC, revision, and mode (Main, Tail, Multi). The chosen hex file is always displayed in the Hex File field. If a hex file shall be flashed, which is not available through the filters, then enter its name into the Hex File field or press the ‚…‘ button and browse to the file.
  9. Flashing the BLHeli firmware: Pressing the Flash button starts the actual flashing process. The status window of BLHeliTool starts displaying messages. Please wait until the message Flash hex file…. DONE! appears – or an error message, in case something went wrong.
  10. Congratulations… that’s it!

FAQ

  • Is it possible to return back to the original firmware?
    No. After BLHeli has been flashed, there is no way back (in principle it would be possible to flash back the original firmware, however, it is usually protected against read-out and hence not available).

Trouble Shooting

  • If you get an error message, then – as a first attempt – please just retry the action once or twice. Sometimes this resolves the issue.
  • ‚v… Connection to owSilProg programmer FAILED!‘: This error indicates that the USB connection via the COM port between PC and owSilProg programmer doesn’t work. In 99.99% of the cases this is not due to owSilProg/BLHeliTool/BLHeliBox, but due to a wrong COM port, missing Windows driver, etc.
  • ‚d… Connection to target FAILED!‘: This error indicates that the connection between owSilProg programmer and BESC doesn’t work. In 99.9% of the cases this is not due to owSilProg/BLHeliTool/BLHeliBox, but due to a wrong or bad electrical connection between owSilProg programmer and BESC! Even when it was at first believed that everything was done right, it essentially always turned out later that it had been wrong or bad electrical connections!
  • ‚d… MCU INCORRECT or connection to target FAILED!‘: This error indicates that the BESC uses a Silabs chip which is not yet supported by BLHeli or that the connection between owSilProg programmer and BESC doesn’t work reliably, similar as in the previous error. In the first case (incorrect MCU) please drop a note in any of the threads. In the second case (bad connection) the reasons for the error can be more diverse than in the previous error, and can e.g. be related to hardware details of the specific „Arduion“ board/clone.
  • ‚e… Device erase FAILED!‘: This error should not happen, but unfortunately neverthelss occurs in very few cases. If it isn’t due to a „trivial“ issue, such as a weak lipo, then please drop a note in any of the threads.
  • ‚bw… Block write FAILED!‘: This error should not happen, but unfortunately neverthelss occurs sometimes. If it isn’t due to a „trivial“ issue, such as a weak lipo, then it is usually a follow-up error hinting towards one of the above problems.


III. BLHeliTool: Setting the BLHeli Parameters

First, follow the instructions for Flashing the BLHeli Firmware up to the 6. step, that is:

  1. Connect owSilProg programmer and BESC
  2. Connect owSilProg programmer and PC
  3. Connect BESC with battery
  4. Start Windows programms BLHeliTool_vxxx.exe
  5. Set the field Port
  6. Set the field Multiple ESC Mode

Read the parameters: The parameter values ​​stored in the BESC can be read by pressing the Read button. The status window of BLHeliTool starts displaying messages. Please wait until the message Read… DONE! appears – or an error message, in case something went wrong. The window now displays all available parameters with their current values, and looks like this (or similar):blhelitool v100 basic 01 olliw

Write the parameters: The parameter values displayed in the window can be ​​written to the BESC by pressing the Write button. The status window of BLHeliTool starts displaying messages. Please wait until the message Write… DONE! appears – or an error message, in case something went wrong.

Setting the parameters: The BLHeli parameters are available via the tabs ‚Setup Basic‘ and ‚Setup Advanced‘. BLHeli provides quite many parameters, and the partitioning leads (hopefully) to a better user experience. The usage and functioning of the various parameters is explained in Steffen’s manual BLHeli programming by TX SiLabs Rev9.x.pdf.

Trouble Shooting

  • The reading and writing of the BLHeli parameters does of course work only if a BLHeli firmware has been flashed beforehand, as described in Chapter II.


IV. The Multiple-ESC Functionality

Since release v20130103, owSilProg/BLHeliTool/BLHeliBox support what I call the multiple ESC function. This simply means that one can connect up to 8 (!) BESCs to one owSilProg programmer or BLHeliBox, and handle them all at once. In some sense, you get eight, synchronized programmers in one (which I denote as programmer #1, programmer #2, …, programmer #8). This allows for convennient functions for multicopter users as well as for double-brushless conversions (main and tail) of micro helis.

The BLHeliBox fully supports the multiple ESC function, but for simplicity I will not mention it everytime in the following description of principles, which I will resctrict to the pair owSilProg programmer and BLHeliTool.

Multicopters
The advantages of the multiple ESC function are most obvious for multicopters. The installed BESCs should all behave identical, and thus should be flashed with the same firmware. Moreover any adjustment to any BLHeli parameter should be applied to each BESC. With a conventional „single-ESC“ programmer, one has to repeat every step for each BESC, and has to pay close attention to the consistency of the settings. With the mutiple ESC function this burden is taken away: All BESCs are connected to the owSilProg programmer, and BLHeliTool handles the rest.

Practically we are talking about the operations Flash, Verify, Read and Write. With one of the multicopter settings Bi Copter, Tri Copter, Quad Copter, Hexa Copter, or Octo Copter selected in the Multiple ESC Mode field, BLHeliTool will do the following:

Flash: The selected firmware (hex file) will be flashed to all BESCs with one hit of the Flash button. This is done sequentially starting with programmer #1, followed by programmer #2, until the last programmer as determined by the setting in the Multiple ESC Mode field (for a quad copter it would go until programmer #4).

Verify: The selected firmware (hex file) will be checked against the firmware loaded in a BESC for all BESCs with one hit of the Verify button. This is done sequentially starting with programmer #1, followed by programmer #2, until the last programmer as determined by the setting in the Multiple ESC Mode field.

Read: In contrast to the other operations, with a hit on the Read button only the parameters of the BESC connected to programmer #1 will be read!

Write: The parameters as specified in the two Setup tabs will be written to all BESCs with one hit of the Write button. This is done sequentially starting with programmer #1, followed by programmer #2, until the last programmer as determined by the Multiple ESC Mode. Additionally, the name, which is actually written to a BESC, is that in the Name field appended by ‚-1‚, ‚-2‚, ‚-3‚, and so on.

The BESC connected to programmer #1 is thus kind of the master BESC; only its parameters are read, and its parameters are cloned to all BESCs in a write operation. That’s how consistency of the BESCs is achieved. Note that you can watch this mechanism by inspecting the ‚read/write/flash/verify target no.X‘ outputs in the status window of BLHeliTool.

Double-Brushless Conversions (Main and Tail) of Micro Helis
In contrast to a multicopter, in a double-brushless (DBLBL) conversion, the BESCs for the main and tail motors are necessarily different, and cloning of parameter settings is hence irrelevant. However, the multiple ESC function also provides advantages for DBLBL conversions. It leads to a simpler electrical setup on the heli, since only one programming plug is needed and a simpler electrical wiring scheme results. Furthermore, handling is simplified since the decision whether the main or tail BESC should be accessed is made via a click on a drop-down box in BLHeliTool instead of swapping physically programming ports.

The BESC of the main motor is selected by simply choosing Main ESC in the Multiple ESC Mode field, and that of the tail motor is selcted by choosing Tail ESC. Importantly, the main BESC has to be connected electrically to programmer #1, i.e. C2CK(#1) and C2D, and the tail BESC to programmer #2, i.e. C2CK#2 and C2D.

Operation as Single ESC Programmer
Any BESC connected to the owSilProg programmer can be accessed individually by selecting one of the single ESC settings in the Multiple ESC Mode field. That is, if one selects single ESC no.1, then the BLHeliTool commands Read/Write/Flash/Verify invoke only programmer #1, if one selects single ESC no.2, then only programmer #2 is invoked, …., and if one selects single ESC no.8, then only programmer #8 is invoked.

The settings default and Main ESC are in fact aliases for single ESC no.1, i.e., all three invoke only programmer #1. Similarly, Tail ESC is an alias for single ESC no.2, and both invoke programmer #2.

Summary of Multiple ESC Modes

  • The modes default, Main ESC and single ESC no.1 are exactly identical; they all operate on programmer #1.
  • The modes Tail ESC and single ESC no.2 are exactly identical; both operate on programmer #2.
  • The modes single ESC no.3, single ESC no.4, … operate on only programmer #3, #4, and so on.
  • The modes Bi Copter, Tri Copter, …, Hexa Copter behave differently for Read and Write/Flash/Verify operations. Read is done by operating on only programmer #1, while Write/Flash/Verify is done by operating sequentially on all programmers from #1 up to the maximum number specified by the multicopter setting.

The described mechanisms are of course also provided by the BLHeliBox.

Electric Connections
For the above to work, one of course has first to electrically connect all BESCs to the owSilProg programmer (BLHeliBox). Each BESC needs a connection at its C2CK and C2D pads to the programmer. The programmer provides one C2D pin, which should be wired to all BESCs. The programmer however provides eight C2CK pins, called C2CK(#1), C2CK#2, …, C2CK#8. Obviously, C2CK(#1) should be wired to the C2CK pad of the BESC, which should be handled by programmer #1, C2CK#2 should be wired to the C2CK pad of the BESC, which should be handled by programmer no.2, and so on. Additionally a ground (GND) connection between the programmer and one BESC is required. If a BLHeliBox is used, and if it should be powered by the BESCs, i.e. the lipo attached to them, then also a Vcc connection is needed. Sketches of the wiring schemes look then as follows:

multiple esc 03 olliw

Fortunately, the owSilProg programmer allows for quite long cables (40 cm should be no problem); you can easily build a harness to connect all your BESCs to the programmer without much worries on cable lengths.

The assignment of the pins on the Arduino or BLHeliBox to the nine lines C2D, C2CK(#1), C2CK#2, …, C2CK#8 is given in the following tables. Please note that the BLHeliBoxes, which are using the standard Arduino LCD shield, as well as the Mega boards have different pin assignments.

Arduino Nano, Uno, Duemilanove, and so on; BLHeliBox No.3, No.4, No.5 (Arduino + LCD4884)
hex files: owsilprog_v1XX_mXXX_pb3pb4.hex, BLHeliBox_v10X_lcd4884_XXX_pb3pb4.hex
C2CK (#1) C2D   C2CK#2 C2CK#3 C2CK#4 C2CK#5 C2CK#6 C2CK#7 C2CK#8
Arduino D11 D12 D10 D9 D8 A2 A3 A4 A5
ISP MOSI MISO
Atmega PB3 PB4 PB2 PB1 PB0 PC2 PC3 PC4 PC5
BLHeliBox No.1, No.2 (Arduino Uno + LCD Shield)
hex file: BLHeliBox_v1XX_m328p_16MHz_pb3pb4
C2CK (#1) C2D   C2CK#2 C2CK#3 C2CK#4 C2CK#5 C2CK#6 C2CK#7 C2CK#8
Arduino D11 D12 D2 D3 A1 A2 A3 A4 A5
ISP MOSI MISO
Atmega PB3 PB4 PD2 PD3 PC1 PC2 PC3 PC4 PC5
Arduino Mega, Mega 2560
hex files: owsilprog_v1XX_mXXX_pb2pb3.hex
C2CK (#1) C2D   C2CK#2 C2CK#3 C2CK#4 C2CK#5 C2CK#6 C2CK#7 C2CK#8
Arduino D51 D50 D49 D48 D47 D46 D45 D44 D43
ISP MOSI MISO
Atmega PB2 PB3 PL0 PL1 PL2 PL3 PL4 PL5 PL6
Cheapduino (Atmega8 at 16MHz)
hex files: owsilprog_v1XX_m8_16mhz_pb3pb2_cheapduino.hex
C2CK (#1) C2D   C2CK#2 C2CK#3 C2CK#4 C2CK#5 C2CK#6 C2CK#7 C2CK#8
Arduino D11 D10 D9 A0 A4 A5 A5 A5 A5
ISP MOSI
Atmega PB3 PB2 PB1 PC0 PC4 PC5 PC5 PC5 PC5


V. BLHeliBox: What it is and how to use it

What is the BLHeliBox? The BLHeliBox serves several functions at once. On the one hand it is a programming box (also called programming card by some) for BLHeli Silabs BESCs, which allows us to easily set the BLHeli parameters „in-field“, independent of a PC. One just has to connect the BLHeliBox via its C2 programming lines to a BESC. The settings are then made via the keys and display. On the other hand it works also exactly like an owSilProg programmer. That is, it can be connected to a PC via USB, and using the Windows program BLHeliTool the BLHeli firmware can be flashed and the parameters be set, exactly as it has been described in Chapter II und III. The BLHeliBox thus serves three functions:

Functions of the BLHeliBox

  • Flashing Silabs BESCs with BLHeli
  • Setting the parameters of BLHeli BESCs via a PC using the Windows program BLHeliTool
  • Setting the parameters of BLHeli BESCs „in-field“, independent of a PC

With a BLHeliBox you don’t need a separate owSilProg programmer, since it is already integrated into it (saving you the money for it). The BLHeliBox offers you however the additional advantage of checking and adjusting the parameters of a BLHeli BESC everywhere at anytime.

How is it used? Well, the operation of the BLHeliBox is simple and should be self explaining:

If it is to be used as an owSilProg programmer, then just use it exactly as you would use an owSilProg programmer… that is, connect it via USB with a PC and via the C2 programming lines with a BESC, run BLHeliTool, that’s it.

When used as a programming box the functions of the keys should become quickly clear. As regards Read BESC? and Write BESC? a comment is however at place: First switch, using the key which increases the option values, to yes, and then hold down the Select key until (after ca. 2 seconds) the Read or Write is executed (watch the display). It, btw, holds in general also in the other menus, that holding down the Select key (for ca. 2 seconds) will perform a selected action, while pressing the Select key shortly will lead you to the next menu.

The menu structure for the BLHeliBox fimrware v1.0x is as follows (shown for the example of the BLHeliBox No.5):
blhelibox v10x menu structure 01 olliw

I did four videos for an early version of the BLHeliBox and its functions (start with part 2):

Part 1: Basics and Hardware

Part 2: Setting Parameters, the BLHeliBox as Programming Box/Card
Part 3: Setting Parameters, the BLHeliBox as Interface to a PC
Part 4: Flashing the BLHeli Firmware into the BESC


VI. BLHeliBox: Construction Manuals
(some parts only in German so far)

Unfortunately, a hardware option which would allow us to build the BLHeliBox both easily (< 10 min) AND cheaply (< $15) is not available so far. Below I present several solutions, which range from "most cheap and easy but less cool“ to „not that easy and cheap but most cool„. Personally I of course like best the last option, the BLHeliBox No.5, its extra coolness factor I found worth the extra work :). But choose yourself.

Box Hardware Ranking Costs*
No.1 Arduino Uno + LCD-Keypad Shield simple: ++, cheap: ++, cool: + $20
No.2 Arduino Uno + LCD-Keypad Shield
+ Hobbyking Voltage Booster
simple: +,  cheap: +,  cool: ++ $24
No.3 Arduino Uno + LCD4884 Shield simple: +,  cheap: o,  cool: +++ $30 – 30Eur
No.4 Arduino Nano + LCD4884 Shield
+ Consumables
simple: o,  cheap: o,  cool: ++++ $30 – 30Eur
No.5 ArduBox with LCD4884 Module simple: o,  cheap: +,  cool: +++++ $20- $25

* Costs are incl. shipping

These solutions are all based on Arduino boards, which guarantees a simple build. In all cases the proper BLHeliBox firmware need to be flashed, and GND, C2CK and C2D wires to be soldered to the respective points. Here one follows exactly Chapter I, with the appropriate choice in step 4.

VI.1. Arduino Uno + LCD-Keypad Shield

Der Aufbau dieser Box ist wirklich kinderleicht, und man ist mit $20 (inkl. Versand) dabei. Copperclad @ helifreak hat hier Pionierarbeit geleistet (hier). Diese Box hat allerdings einen Nachteil. Die BLHeliBox muss natürlich mit Strom versorgt werden. Da das LCD-Keypad Shield aber mit 5 V betrieben werden muss, reicht ein 1S Lipo-Akku zur Versorgung nicht aus (das Shield funktioniert tatsächlich gerade so ab 4 V, aber das ist sehr knapp). Wer also einen 1S-Heli hat, und das werden Viele sein, der kann die Box nicht einfach über die Versorgung des Helis bzw. BESCs mitbetreiben, sondern muss der Box eine extra Versorgung spendieren, wie z.B. ein zusätzlicher 2S Lipo (dieses „Problem“ tritt nicht auf wenn die Box am PC angeschlossen ist; dann wird sie über den USB versorgt).

What is needed

  • Arduino Uno
  • Arduino LCD keypad shield
  • three cables
  • Consumables to power the box
  • latest version of the owSilProg firmware package

Günstige Quellen für den Arduino Uno und das LCD-Keypad Shield sind im Appendix angegeben. Wie Ihr die Box mit Strom versorgen wollt hängt natürlich stark von eurer Situation ab. Ein einfacher Weg wäre ein extra 2S Lipo zum Anstecken an einen geeignet gefertigten Stecker.

What to do

  1. Flashen der BLHeliBox-Firmware. Vorgehen genau wie in Kapitel I, nur mit der Einstellungen ‚BLHeliBox on Arduino Uno + LCD Shield‘ in Schritt 4.
  2. Anbringen der GND, C2CK, C2D Leitungen. Drei Kabel mit den entsprechenden ISP-Anschlüssen verbinden, es kann sowohl der ISP-Stecker am Uno Board (siehe Bild Kapitel I, Schritt 8) sowie am LCD-Keypad Shield (siehe nachfolgende Bilder) benutzt werden.
  3. Versorgungsspannung realisieren. Da gibt es viele Möglichkeiten; eine wäre einen 2S-Lipo über einen Ein-Aus Schalter mit GND (Minus Pol) und den Vin Pad (Plus Pol) zu verbinden. Der Lipo findet evtl. sogar zwischen den beiden Boards Platz.
  4. Zusammenstecken der beiden Boards.

Das Ganze sieht dann z.B. so aus (leider nicht zu erkennen wie die Versorgung realisiert wurde):

copperclad UNO BLHeli Box copperclad UNO BLHeli Box
photos by copperclad @ helifreak

VI.2. Arduino Uno + LCD-Keypad Shield + Hobbyking Voltage Booster

This box is perfect (but cooler ones exist). Nimic @ helifreak has done pioneering work here (link). The construction is marginally more laborious than before, one now has to master 6 simple solder joints, and costs are ca. $24 (incl. shipping). The power supply issue described in section VI.1 is solved here elegantly by using a setp-up converter (voltage booster), which converts the 1S voltage of a lipo into 5 V (or more). In comparison to the box of section VI.1. only the booster needs additionally to be installed.

What is needed

  • Arduino Uno
  • Arduino LCD keypad shield
  • Hobbyking voltage booster
  • four cables, double-faced adhesive tape
  • latest version of the owSilProg firmware package

Cheap sources for the Arduino Uno and LCD Keypad Shield are given in the Appendix. In principle any booster which delivers 5 V output voltage is suitable. I like the Hobbyking Voltage Booster here (it delivers 5.2 V). $2.99 looks like a fair deal.

What to do

  1. Flashing the BLHeliBox firmware. Follow exactly Chapter I, except with the setting ‚BLHeliBox on Arduino Uno + LCD Shield‘ in step 4.
  2. Connect GND, C2CK, C2D wires. Solder three cables to the respective ISP connections, one can use either the ISP connector on the Uno board (see picture in Chapter I, step 8) or on the LCD keypad shield (see the following pictures).
  3. Install voltage booster. The GND and Vout pins at the voltage booster are connected to the GND and Vin pads on the Uno board or the LCD keypad shield. The voltage input of the booster is connected of course to the positive pole of the lipo. Here a skecth of the wiring:
    blhelibox uno shield booster olliw
  4. Put together both boards.

A picture gallery showing the individual building steps in detail:


VI.3. BLHeliBox No.3: Arduino Uno + LCD4884 Shield

Diese Lösung ist perfekt, cool und leicht zu bauen, aber mit ca. $30 bis 30 Eur nicht ganz billig. Cool ist sie wegen dem graphischen Display und weil die Box deutlich kleiner/kompakter ist. Die Elekronik kann direkt aus einem 1S Lipo versorgt werden, ein Voltagebooster ist nicht nötig (der Arduino wird dann zwar ausserhalb der Spezifikation betrieben, aber das macht nichts). Wenn die Box allerdings gleichzeitig am USB und an einen Lipo angeschlossen würde, dann würde der Lipo „schnell-geladen“ werden. Dies läßt sich aber leicht vermeiden, indem eine Schottky-Diode in die plus-Versorgungsleitung vom Lipo eingebaut wird. Der Aufbau besteht also darin, vier Kabel und eine Diode anzubringen.

What is needed

  • Arduino Uno
  • Arduino LCD4884 shield
  • Schottky diode (e.g. SB130)
  • four cables
  • latest version of the owSilProg firmware package

Günstige Quellen für den Arduino Uno und das LCD4884 Sield sind im Appendix angegeben. Schottky-Dioden gibt es im lokalen Fachhandel; jede ist geeignet (ich habe die Beobachtung gemacht, dass je „dicker“ die Diode desto niedriger die Durchlassspannung und desto besser für uns geeignet).

What to do

  1. Flashen der BLHeliBox-Firmware. Vorgehen genau wie in Kapitel I, nur mit der Einstellungen ‚BLHeliBox on Arduino Uno + LCD4884 Shield‘ in Schritt 4.
  2. GND, C2CK, C2D, und Vcc Verbindunsgleitungen. In das Kabel vom Plus-Pol der BESC bzw. Lipo ist eine Schottky-Diode einzulöten (Kathode Richtung Box, Anode Richtung Lipo). Die Kabel dann mit den entsprechenden Pins des ISP-Steckers am Uno Board verbinden, siehe nachfolgendes Bild.
    blhelibox v008g lcd4884-03 olliw
  3. Zusammenstecken der beiden Boards.

Das Ganze sieht dann z.B. so aus:

blhelibox v008g lcd4884 olliw blhelibox v008g lcd4884 olliw

VI.4. Arduino Nano + LCD4884 Shield + Consumables

Diese Lösung benötigt etwas mehr Bastelaufwand, und etwas Geld (ca. 35Eur); die Box ist dafür im Vergleich zu den vorhergehenden Lösungen deutlich kleiner und VIEL handlicher. Anstatt eines Arduino Uno wird nun ein Arduino Nano verwendet, weil er alles hat was man braucht aber kleiner (und billiger) als ein Uno ist. Zusätzlich benötigt man ein „Adapterboard“, welches man sich selber zusammenbaut.

What is needed

  • Arduino Nano V3
  • Arduino LCD4884 shield
  • Schottky diode (z.B. SB130)
  • cables, pin headers, print board
  • latest version of the owSilProg firmware package

Günstige Quellen für den Arduino Nano und das LCD4884 Shield sind im Appendix zu finden. Zur Schottky-Diode wurden im Kapitel IV.3 Angaben gemacht. Die weiterhin für’s Adapterboard benötigten Kleinteile sollten im lokalen Fachhandel zu finden sein.

What to do

  1. Flashen der BLHeliBox-Firmware. Vorgehen genau wie in Kapitel I, nur mit der Einstellungen ‚BLHeliBox on Arduino Nano (w m328p) + LCD4884 Shieldd‘ in Schritt 4.
  2. Adapterboard basteln. Hierzu wird der Arduino Nano auf eine Leiterplatte gelötet, und Verbindungen zu entsprechend angebrachten Steckerleisten hergestellt. Die nachfolgende Bilderreihe gibt eine Anregung.
  3. Zusammenstecken der Boards.

Diese Bilderreihe zeigt meinen Aufbau. Ich habe mir noch den Spass gemacht und habe das ganze mit passend zugeschnittenem, dicken Papier umhüllt. Macht die ganze Box noch einiges touchier:

blhelibox v008g lcd4884 b 01 olliw blhelibox v008g lcd4884-b 02 olliw blhelibox v008g lcd4884-b 03 olliw blhelibox v008g lcd4884-b 04 olliw

blhelibox v008g lcd4884-b 05 olliw


VI.5. BLHeliBox No.5: ArduBox with LCD4884 module

This is certainly so far the most cool, compact, best, and in comparison cheapest solution! One uses simply an ArduBox, which provides everything needed, and flashes the BLHeiBox firmware. The BLHeliBox No.5 provides all connections required for making full use of the multiple ESC function, is ideally suited for double-brushless conversions (main&tail) of micro helis, and allows to select between 1S and 2/3S power supplies via a jumper.

What is needed

  • ArduBox with LCD4884 module
  • latest version of the owSilProg firmware package

Currently one has to build the ArduBox oneself, but the ArduBox may become available for purchase in the near future (not by me, but someone else). For all infos on the ArduBox, please see here.

What to do

  1. Flashing the BLHeliBox firmware. Follow exactly Chapter I, except with the setting ‚BLHeliBox No.5 (Arduino Nano w m328p + LCD4884 module)‘ in step 4.

Here’s a detailed view on the BLHeliBox No. 5, with all provided connections/ports:
blhelibox no5 details 02 olliw



VII. The Bluetooth Extension

The owSilProg programmer, the various BLHeliBoxes and BLHeliTool can be used very easily together with a Bluetooth adapter. That is, with a Bluetooth module connected to the owSilProg programmer and/or BLHeliBox the communication with BLHeliTool is wireless. When everything is set up, which is done quickly with the developped methods, things run that smooth that one actually doesn’t recognize the wireless operation (except of course of the missing cable). The usage is exactly as before, without the need of any special actions.

Which Bluetooth module?
I am using the bluetooth-serial module everyone is using for this purpose. Especially I got the JY-MCU BT module with voltage regulator. Possible sources you find in the Appendix.

Connecting the Bluetooth module to the owSilProg programmer or BLHeliBox
The bluetooth module is connected via a diode (any diode does it, e.g. 1N4148) to the Rx and Tx pins (digital D0 and D1) of the Arduino, as shown in the scheme.
blhelitool bluetooth scheme olliw

The resistor in the Tx connection to the USB adapter is very important for the correct functioning. However, it rarely has to actually be installed explicitely. The Arduino boards with a USB connector come with the drawn resistors already implemented, and you hence don’t have to worry further about them. Even otherwise they are not needed, at least with USB-serial adapters with FTDI chip. So, in praxis you only need the diode.

Setting up Win7 for using the Bluetooth module
Follow this description, up to the point where teraterm gets involved: http://www.hobbytronics.co.uk/bluetooth-module-connection

Configuring the Bluetooth module
This is done using the BTConfigTool, which is integrated into BLHeliTool; it does the configuration fully automatically. The steps in pictures:
blhelitool bluetooth 01 olliw blhelitool bluetooth 02 olliw blhelitool bluetooth 03 olliw blhelitool bluetooth 04 olliw

blhelitool bluetooth 05 olliw

Further infos
http://www.rcgroups.com/forums/showpost.php?p=23960212&postcount=437



Appendix: Sources of Supply

Arduino Nano
Germany:

Overseas

Arduino Uno/Uno R3

  • $10.82 Uno or $14.20 Uno R3 (+ $2.99 shipping) at Hobbyking
  • $12.49 Uno R3 (incl. shipping + USB cable) at MITAO E-mart (AliExpress), link
  • $13.96 Uno (incl. shipping) at uzone2012 (ebay), link
  • $14.72 Uno (incl. shipping + USB cable) at jk_parts (ebay), link
  • $15.20 Uno R3 (incl. shipping + USB cable) at Dealextreme, link
  • various other Asian ebay dealers

Cheapduino

  • $19.90 for 5 pieces (+ shipping) at DFRobot

Arduino LCD-Keypad Shield

  • $6.90 (incl. shipping) at Dealextreme, link
  • ca $7 from Asian ebay dealers (link)
  • Hobbyking $8.32 link (+ $2.99 shipping)

Arduino LCD4884 Sield
Germany:

Overseas

  • 11.99Eur (incl. shipping) at profit_vanity (ebay)
  • $21.67 (incl. shipping) buychina
  • ca. $20 from various dealers (use google)

Arduino Uno + LCD4884 Sield Combo
Germany:

Overseas

Bluetooth Module (JY-MCU, HC05)
Europe:

  • 8.50Eur (incl. shipping) at hillfly3389 (ebay) (UK)
  • 8.29Eur (+ 0.99Eur shipping) at newlaunch (ebay) (UK)

Overseas

  • $8.20 (incl. shipping) at Dealextreme, link
  • ca. $10 from various ebay dealers (use google)

Other Sources


108 Kommentare

  1. SilbernerSurfer sagt:

    Bin Anfänger mit BLHeli. Gibts ein Tutorial in dem erklärt wird was die einzelnen Werte bedeuten, für was die gut sind und bewirken?

  2. james sagt:

    hey I’m trying to make a owSilProg Programmer with my arduino leonardo, but when I check connection the cmd window displays:
    „connecting to programer: .“
    my arduino is using the chip atmelMega32u4 and it is not listed in AvrBurnTool, so maybe that’s the problem. Can anyone help?

  3. Lindbaergh sagt:

    Moin moin, erst mal Danke für das Projekt, ohne das ich mich wohl nie an die BLHeli Firmware und das flashen meiner Silabs ESC gemacht hätte. Und wer weiß wie die akktuelle BLHelisuite ohne die hier geleistete Vorarbeit aussehen würde.Mir hat das BLHelitool jedenfalls immer gute Dienste geleistet.

  4. Cliff Geerdes sagt:

    The latest version of BLHeli firmware has layout version 19, but that is not available in the latest escdude source.
    I would try to make a layout19multi if I could download the latest BLHeliTool program BLHeliTool.dev, but helifreak.com is down and I can’t find any links to current versions of BLHeliTool.
    Thank you for the great software!

    Google translate into German follows:

    Die neueste Version der Firmware hat BLHeli Layout-Version 19 , aber das ist in der neuesten escdude Quelle nicht zur Verfügung.
    Ich würde versuchen, eine layout19multi machen , wenn ich die neueste BLHeliTool Programm BLHeliTool.dev herunterladen, aber helifreak.com unten ist , und ich kann keine Links zu aktuellen Versionen von BLHeliTool nicht finden .
    Vielen Dank für die tolle Software !
    Ich hoffe, das richtig übersetzt !

  5. Andi sagt:

    Hallo Olli,

    zunächst einmal vielen Dank für die Entwicklung und Bereitstellung von BLHeliTool und BLHeliBox! – Beides war für mich bei meinen ersten MultiCopter-Experimenten in 2013 sehr hilfreich! – Hut ab!

    Wird das Projekt weiter gepflegt, damit die Tools auch mit neueren BLHeli-Versionen genutzt werden können? – Ich bin mir sicher, dass viele User sich darüber freuen würden!

    Gruss
    Andi

    • OlliW sagt:

      Hey Andi,
      nein, ich habe schon vor langem die Lust dran verloren und mir neue Projekte gesucht, Alternativen gibt es ja
      Olli

  6. Gert Lauritsen sagt:

    Read… Please wait!
    delay… OK
    v… OlliW SilProg v1.20 BLHeliBox PB3PB4
    read target no. 1
    Having the same problem:

    r… rok
    d… dok2B -> Device ID 2B F39x/37x
    i… iok
    br… br011A02ok12 -> Layout 18
    br… br021A00ok0C01 -> Revison 12.1
    br… br021A0Dok55AA -> Mode MULTI
    Read… ABORTED!
    The options for this target are not available in BLHeliTool.dev!

  7. J sagt:

    Hello, OlliW.

    Would it be possible to have a HEX of OWSILPROG for 12Mhz M8 USBASP stick? How about a more general programming tool for the C8051F chips without the BESC conditions? Just flash a hex, any(if it can be checked, that it is not totally incorrect hex, maybe that limit) hex to any supported chips.

  8. ver2go sagt:

    Hi,

    I hope this the proper place to ask this.

    Which hex file would I use for a Digispark (ATTIny85 based)
    http://digistump.com/wiki/digispark/tutorials/digispark

    Thanks in advance

    owsilprog_v120_m1280_16mhz_pb2pb3.hex
    owsilprog_v120_m168_16mhz_pb3pb4.hex
    owsilprog_v120_m2560_16mhz_pb2pb3.hex
    owsilprog_v120_m2560_16mhz_pf1pf0_arduflyer.hex
    owsilprog_v120_m328p_16mhz_pb3pb4.hex
    owsilprog_v120_m328p_8mhz_pb3pb4.hex
    owsilprog_v120_m8_8mhz_pb3pb4.hex
    owsilprog_v121_m8_16mhz_pb3pb2_cheapduino.hex
    owsilprog_v121_m8_16mhz_pb3pb4.hex

  9. kronosol sagt:

    Hey Olliw.
    Blheli hat mittlerweile Rev. 12.2 erreicht. Hab das auch etwas verschlafen, leider kann das BLHeliTool jetzt keine Settings mehr machen. Vielleicht gibt es ja als Weihnachtsgeschenk eine Update von dir, wo auch die neuen Versionen drin sind. Mit freundlichem Gruß, Kronosol.

    Read… Please wait!
    delay… OK
    v… OlliW SilProg v1.20 PB3PB4
    read target no. 1
    r… rok
    d… dok0A -> Device ID 0A F33x
    i… iok
    br… br011A02ok12 -> Layout 18
    br… br021A00ok0C02 -> Revison 12.2
    br… br021A0Dok55AA -> Mode MULTI
    Read… ABORTED!
    The options for this target are not available in BLHeliTool.dev!

Hinterlasse einen Kommentar

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