Introduction: Modify a 5V USBasp Arduino Bootloader Programmer to Work at Both 3.3V and 5V
A full video explanation and end to end demonstration can be found in this youtube video.
I made a half-size Arduboy with 500 games stored on a 3.3V serial flash.
To simplify the circuit and reduce the foot print, I converted the ATMega32U4 micro-controller to work at 3.3V instead of 5V.
A boot loader that works with serial flash need to be loaded to the ATMega32U4 using an USBasp programmer.
However, the conventional USBasp programmer on the market all works at 5V only.
Though some USBasp advertised that target voltage can be selected by jumper for 3.3V or 5V, most of the ones on the market can only switch the voltage of the VCC pins's but not that of the TTL signal pins such as MISO/MOSI/Reset/SCK within the ICSP connectors. These pins are still running at 5V.
From the community forums of Arduboy, I learnt that the USBasp can be modified to switch jumpers to select between 3.3V and 5V to match the voltage levels of the microcontrollers that you need to program to, both on VCC pins and also on the other ICSP pins.
However, my version of the boards were not covered in those instructions. I looked at the schematics and decided to try my luck to modify my version of the USBasp board. I hope to share my journey so you can also modify your own version of the USBasp board to work at 3.3V and 5V.
Step 1: The Modificaiton
Refer to the original schematic before modification.
The USBasp is driven by an ATMega8L chip.
There is a jumper to select whether 3.3V or 5V is supplied to the VCC pins on the 10-pin ICSP connector that is used to connect to the target micro-processor to be programmed. It could be an ATmega 328 for Arduino Nano, ATMega32U4 for Arduino Pro Micro (used in Arduboy game console) or ATtiny85 used in ATtiny game consoles.
However, the jumper could not control the voltage level of the ATMega 8L chip. Hence all the ICS pins - MISO/MOSI/Reset/SCK are always based on the ATmega 8's voltage level of 5V.
This could damage any micro-controllers that cannot go above 3V or any associated memory chips that only works at max 3.3V.
To fix this issue, refer to the second schematics (modified version), we need to allow the jumper to select the voltage level to be used by the ATmega 8 chip as well.
Different versions of the USBasp PCB board may need different modifications depending on the design.
You can reference the schematics and trace the PCB board to identify how to modify the board similar to the ones below:
For my version of USBasp board, l need to cut wires/traces on the circuit board where "x" is marked :
1. In the front, right above the fuse
2. At the back , right above the 5V jumper pin.
And add two wires (I used laminated/insulated wire of 0.3mm diameter).
3. From the 5V jumper pin to the fuse at the point before the cut.
4. From the middle pin of the jumper for 5V/3V to the point right after the cut of the 5V trace.
Refer to the actual diagram after the modification.
For easy explanation , two USBasp boards are shown side by side one facing up one facing down.
You only need to apply the modificaiton to one USBasp board to both the front side and the back side.