- 1 Introduction
- 2 Why modify the fuses values ?
- 3 Modifying the fuses
Fuses are a few special configuration bytes that are stored on the atmega328 microcontroller. Their role is to configure low level settings of the microcontroller such as the type of crystal oscillator connected to it, the brown-out detector level, the bootloader size etc.
When you buy an OrangeRX or Wolfbox module, the fuses are preconfigured to certain values.
It’s however possible to change their values under certain circumstances. Just an FTDI cable isn’t sufficient to modify the fuses values, this can only be done with a programmer such as the USBasp programmer.
Why modify the fuses values ?
There can be several reasons, but for ULRS project the most obvious one is to activate the brown-out detector on OrangeRX modules.
The brown-out detector
The brown-out detector (BOD) is a simple feature of the microcontroller that will inactivate it whenever its supply voltage is below a configurable limit.
This is advisable for any project, because if the microcontroller operates in undervoltage it can lead to unexpected behaviours : it can for example randomly jump to any memory location and execute the code.
One consequence of this is that it can jump into the bootloader code and execute randomly sequences of code that will modify the flash memory. In this case the firmware itself can be corrupted and even after resetting the microcontroller and powering correctly it won’t work. Until the firmware is flashed again.
For this to happen the module supply voltage has to be very low, under 3.39V (remember that because of the switching regulator the supply voltage of the microcontroller is lower). This shouldn’t happen in normal use with the module connected directly to the battery, but it happened already to a user with an almost empty battery and full throttle.
It’s not clear why Hobbyking doesn’t activate the BOD by default, but anyways for maximum safety it’s recommended to do it.
Only required for OrangeRX modules ?
Yes, because the Arduino Mini (ULRS Mini modules) have a factory setting of 4.3V BOD, which is fine as these boards run at 5V. So all the ULRS Mini modules based on arduino mini have already a good BOD.
And for the Wolfbox modules this should still be checked.
Modifying the fuses
About the fuse values
The fuses are represented by 3 bytes : the high fuse, the low fuse and the extended fuse. Every bit of every byte has a specific meaning, please refer to the atmega328 datasheet for a description of all the bits (or to this article, ot to this online fuse calculator).
Be careful that the high, low and extended fuses are sometimes presented in a different order.
Factory fuse values for OrangeRX
Factory settings on the OrangeRX modules :
Extended fuse : 0xFF (the 0x means that it’s an hexadecimal value)
High fuse : 0xD8
Low fuse : 0xF7
Factory fuse values for Arduino pro mini 5V 16MHz
This is just for information, as explained above the Arduino pro mini has a factory setting of 4.3V BOD, which is fine as it runs at 5V. So no real need to change it.
Factory settings on the Arduino pro mini 5V 16MHz :
Extended fuse : 0xF8
High fuse : 0xDA
Low fuse : 0xFF
Recommended fuse values
The fuse values have a difference for the brown-out detector, which is then configured for 2.7V.
Notice that the atmega328 only allows 3 different BOD values, and 2.7V is the only value that will work for this project. (Don’t try to set it at 4.3V, because the microcontroller is powered at 3.3V, and don’t set it at 1.8V because it won’t provide any improvement.)
Extended fuse : 0xFD
High fuse : 0xD8
Low fuse : 0xF7
A word of caution
It should be noted that modifying the fuses in a wrong way can make the board unusable. For example if Debugwire and SPI are deactivated at the same time it won’t be possible to program the part again, including impossible to modify the fuses again. Basically you’ll have to buy a new part in this case.
Modifying the fuses
Without going into the detail of avrdude installation, the command to run to set the fuses with USBasp is the following :
avrdude -Cavrdude.conf -patmega328p -c usbasp -V -D -U efuse:w:0xFD:m -u -U hfuse:w:0xD8:m -U lfuse:w:0xF7:m
- Ultimate LRS project origin and history
- Varonis documentation
- ULRS Release History
- Software Installation
- Hardware Installation
- Ultimate LRS : 40 km telemetry & RC link
- ULRS Range Estimator
- Future features
- Ultimate LRS Real-World Range
- 2.7W “Narpat” mod
- Openlrsng or Ultimate LRS ?
- MAVLINK Server
- Ultimate LRS telemetry on Taranis
- Ultimate LRS extension : LCD or LED displays
- Soaring with APM and Ultimate LRS
- Ultimate LRS Extensions
- Ultimate LRS Installation
- OrangeRX 1W Harmonics level
- Hobbyking OrangeRX 433MHz modules FAQ
- 3D Virtual Cockpit
- Ultimate LRS extension : 16 servo channels
- Ultimate LRS : example set-up for a plane
- MinimOSD for Ultimate LRS
- Utimate LRS power consumption
- Using Ultimate LRS + OrangeRX with a Bluetooth module
- Ultimate LRS 1.06 updater
- Ultimate LRS and Pixhawk
- Ultimate LRS or 3DR radio ?
- Ultimate LRS wiring diagram
- Ultimate LRS & OrangeRX labels to print
- Ultimate LRS failsafe settings
- Ultimate LRS RSSI
- Modding the OrangeRX 1W modules for full power
- OrangeRX modules pinout
- Ultimate LRS : user provided content
- Ultimate LRS 40 km setup
- Antennas for Ultimate LRS
- Software installation
- The FTDI adapter
- ULRS analyzer script
- Using the new HK OrangeRX modules with Bluetooth
- No categories