The Arduino Pro Mini ships with an Optiboot bootloader that does not disable
the watchdog timer (WDT) on startup. When firmware uses wdt_enable()
to trigger a software reset, the watchdog persists through the reset cycle.
The bootloader starts but does not disable the WDT, the watchdog fires again,
and the board is trapped in a reset loop — indicated by the onboard LED
flashing continuously.
The Arduino Uno version of Optiboot handles WDT correctly — it saves and restores the MCUSR register and disables the watchdog before handing off to the sketch. Burning the Uno bootloader onto the Pro Mini fixes this while preserving 3.3V 8MHz operation.
Arduino Uno (as ISP programmer) Arduino Pro Mini 3.3V 8MHz (target board) 6x jumper wires
| Arduino Uno | Arduino Pro Mini | Notes |
|---|---|---|
| 5V | VCC | Safe at 5V during programming |
| GND | GND | Common ground |
| Pin 10 | RST | Reset control |
| Pin 11 | Pin 11 (MOSI) | SPI data |
| Pin 12 | Pin 12 (MISO) | SPI data |
| Pin 13 | Pin 13 (SCK) | SPI clock |
Load the ArduinoISP sketch onto the Uno first. This turns the Uno into an in-system programmer.
File → Examples → 11.ArduinoISP → ArduinoISP Select Uno as target board. Upload to Uno.
Tools → Board → Arduino Uno ← MUST be Uno, not Pro Mini Tools → Programmer → Arduino as ISP Tools → Burn Bootloader Wait approximately 30 seconds for completion.
After bootloader burn, disconnect the ISP wires from the Uno and connect the FTDI adapter to the Pro Mini programming header.
Tools → Board → Arduino Pro or Pro Mini Tools → Processor → ATmega328P (3.3V, 8MHz) ← back to Pro Mini Tools → Port → FTDI port Upload sketch normally.
With the Uno bootloader installed, the following WDT pattern works correctly in firmware:
#include <avr/wdt.h>
void setup() {
wdt_disable(); // MUST be first line — disables WDT left from previous reset
Serial.begin(57600);
// rest of setup...
}
// Software reset via watchdog:
if (input == "z") {
Serial.println("OK RESETTING");
delay(100); // flush serial buffer
wdt_enable(WDTO_15MS); // enable watchdog, 15ms timeout
while(1) {} // spin — watchdog fires, hardware reset
}
With the correct bootloader and firmware pattern, the reset command produces a clean single reset:
z OK RESETTING → 15ms pause → hardware reset fires → bootloader disables WDT correctly → sketch starts → wdt_disable() called as first line → rest of setup...
No reset loop. No LED flashing. Clean single reset and restart.
Pro Mini boards are not always clearly labeled. To identify 3.3V vs 5V:
8.000 marking = 8MHz = 3.3V versionS2RA = 3.3V LDOFor permanent installation the Pro Mini VCC pin vs RAW pin distinction matters:
For the WesTek ProtIoT RF coprocessor board, 5V is fed to the RAW pin. The onboard LDO provides clean 3.3V to the ATmega. The 3.3V output from the LDO powers the crystal 433MHz receiver module, keeping its data output at 3.3V logic — directly compatible with the Pi GPIO without level shifting.
WesTek Lab · Pensacola FL · April 2026
Procedure developed during ProtIoT RF Coprocessor build.