arduino:atmega328p_arduinos_and_custom_fuse_settings
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
arduino:atmega328p_arduinos_and_custom_fuse_settings [2020/01/04 01:56] – [Burn the bootloader and test] mithat | arduino:atmega328p_arduinos_and_custom_fuse_settings [2021/04/22 01:12] – [What specs do I want?] mithat | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== ATmega328P Arduinos and custom fuse settings ====== | ====== ATmega328P Arduinos and custom fuse settings ====== | ||
- | |||
- | <WRAP center round info 60%> | ||
- | Work in progress. | ||
- | </ | ||
Programming your device with the code you want to execute, whether with a bootloader or directly with a programmer, is one layer of programming your device. Another layer is the so-called //fuses// inside an ATmega microcontroller. | Programming your device with the code you want to execute, whether with a bootloader or directly with a programmer, is one layer of programming your device. Another layer is the so-called //fuses// inside an ATmega microcontroller. | ||
Line 62: | Line 58: | ||
- | ==== What specs do I want? ==== | + | ==== 3. What specs do I want? ==== |
This article covers making a variant of an existing board where only the fuses have been changed. The relevant parameters in the '' | This article covers making a variant of an existing board where only the fuses have been changed. The relevant parameters in the '' | ||
Line 72: | Line 68: | ||
There is one additional caveat here: You can only change fuses that are compatible with what the bootloader you plan to use will let you do. Again there isn't a lot of documentation here, so if you've done everything right but things still don't work, this might be the reason. The solution to this is to compile a custom bootloader, which is well beyond the scope of this piece. | There is one additional caveat here: You can only change fuses that are compatible with what the bootloader you plan to use will let you do. Again there isn't a lot of documentation here, so if you've done everything right but things still don't work, this might be the reason. The solution to this is to compile a custom bootloader, which is well beyond the scope of this piece. | ||
- | ==== How do I burn a bootloader? ==== | + | ==== 4. How do I burn a bootloader? ==== |
This too is a pretty big topic, but the TL;DR is: hook up a programmer to your board, select the right board and programmer, then do a //Tools > Burn Bootloader// | This too is a pretty big topic, but the TL;DR is: hook up a programmer to your board, select the right board and programmer, then do a //Tools > Burn Bootloader// | ||
Line 127: | Line 123: | ||
===== Case study ===== | ===== Case study ===== | ||
- | In the section, I walk through the process of creating a custom version of a 3.3V/8MHz Pro Mini where the brown-out detection (BOD) threshold is changed from the stock nominal | + | In the section, I walk through the process of creating a custom version of a 3.3V/8MHz Pro Mini where the nominal |
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
Line 149: | Line 145: | ||
^ BODLEVEL2, 1, 0 ^ V< | ^ BODLEVEL2, 1, 0 ^ V< | ||
| 111 | BOD disabled | | 111 | BOD disabled | ||
- | | 110 | 1.8V((The ATmega328P datasheet indicates this is " | + | | 110 | 1.8V((The ATmega328P datasheet indicates this state is " |
| 101 | 2.7V | | | 101 | 2.7V | | ||
| 100 | 4.3V | | | 100 | 4.3V | | ||
Line 157: | Line 153: | ||
Now is a good time to mention that the ATmega328P fuses are //active low//, meaning that a 0 sets (" | Now is a good time to mention that the ATmega328P fuses are //active low//, meaning that a 0 sets (" | ||
- | So, to set the brown-out threshold to 1.8V we want the last three bits of the extended fuse byte to be '' | + | So, to set the brown-out threshold to 1.8V I want the last three bits of the extended fuse byte to be '' |
==== Preparing the new board files ==== | ==== Preparing the new board files ==== | ||
Line 228: | Line 224: | ||
==== Burn the bootloader and test ==== | ==== Burn the bootloader and test ==== | ||
- | Whether you plan to upload your sketches with a USB to serial converter (i.e., using the bootloader) or directly | + | Whether you plan to upload your sketches with a USB to serial converter (i.e., using the bootloader) or directly |
=== Burn it === | === Burn it === | ||
Line 234: | Line 230: | ||
* Create a new project consisting of a simple sketch (e.g. blink.) | * Create a new project consisting of a simple sketch (e.g. blink.) | ||
* Under //Tools > Board// you should see an entry for "Pro Mini 3.3V/8Mhz, 1.8V BOD, ATmega328P" | * Under //Tools > Board// you should see an entry for "Pro Mini 3.3V/8Mhz, 1.8V BOD, ATmega328P" | ||
- | * As a sanity check, Verify/ | + | * As a sanity check, Verify/ |
* Hook up a programmer to a 3.3V/8MHz Pro Mini and select the programmer you're using under //Tools > | * Hook up a programmer to a 3.3V/8MHz Pro Mini and select the programmer you're using under //Tools > | ||
* Plug the programmer into your computer | * Plug the programmer into your computer | ||
Line 252: | Line 248: | ||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | If you reduce the BOD threshold or turn off BOD entirely, don't run programs uploaded by the bootloader at low voltages. See [[arduino: | + | If you reduce the BOD threshold or turn off BOD entirely, don't run programs uploaded by the bootloader at low voltages. To run a sketch at low voltage you should upload your sketch directly using a programmer. See [[arduino: |
</ | </ | ||
- | To run a sketch at low voltage you should upload your sketch directly using a programmer. | ||
==== Upload with programmer and test ==== | ==== Upload with programmer and test ==== | ||
- | After burning the bootloader to set the fuses, hook up your programmer. Be sure you have set both the board and programmer to the correct values under //Tools//. Then upload your simple test sketch with //Sketch > Upload Using Programmer// | + | After burning the bootloader to set the fuses, |
Follow the instructions above to read the fuse settings. You should see: | Follow the instructions above to read the fuse settings. You should see: | ||
Line 273: | Line 268: | ||
</ | </ | ||
- | The extended fuse should | + | Confirm that the extended fuse is still '' |
- | You can now connect the Pro Mini to a variable supply to see whether it works as expected below 2.7V. It may not work all the way down to 1.8V though, but because you're not using a bootloader, the chances | + | You can now connect the Pro Mini to a variable supply to see whether it works as expected below 2.7V. It may not work all the way down to 1.8V though, but because you're not using a bootloader, |
arduino/atmega328p_arduinos_and_custom_fuse_settings.txt · Last modified: 2021/04/22 01:37 by mithat