Reason
Fuses. There are a couple of user selectable operation modes of the AVR microcontrollers. The fuses can’t be edited in the same way you normally program you Arduino. You will need a hardware AVR programmer, ie the one described here: Arduino as ISP. There are a few GUI softwares that are supposed to do this, but I couldn’t get any of the Mac OS X ones to connect to my Arduino/Genuino Uno, so I used AvrDude from the Terminal.
I wanted to do this in order to get a 16 MHz clock output on the Arduino Digital pin 8 / B0 / CLK0. This signal was to be used as a Reference Clock for the AV9110 Serially Programmable Frequency Generator.
Parts list
• AVR Programmer
• Arduino Uno
• AvrDude software
Setting (aka Programming) the fuses
Step 1, find out the new fuse settings
Use this site to get the hex numbers for your new fuse settings: http://www.engbedded.com/fusecalc (If you don’t understand the contents of this site you need to read your AVR docs, search the web, or ask yourself if you really need to change any fuses.)
Step 2, burn the fuses with AvrDude
In your shell, type avrdude. (If it says unknown command or similar, you need to CD to the directory where AvrDude is on your Mac.) If it presents a list of AvrDude parameters you’re good to go. This command changes the CKOUT fuse so the system clock is output on B0:
avrdude -c stk500v1 -p m328p -P /dev/cu.wchusbserial410 -b 19200 -U lfuse:w:0xBF:m -U hfuse:w:0xD2:m -U efuse:w:0x04:m
-c stk500v1 (programmer is Arduino as ISP)
-p m328p (Microcontroller name)
-P /dev/cu.wchusbserial410 (port name)
The above settings can be gathered from the output of the Arduino IDE when uploading a sketch to your Arduino. Please turn on “Verbose Output when uploading”.
lfuse:w:0xBF:m -U hfuse:w:0xD2:m -U efuse:w:0x04:m (New fuse settings)
These are the new fuse settings from http://www.engbedded.com/fusecalc. I was mainly interested in CKOUT = true. Setting the fuses wrongly can make your Arduino unresponsive. Please read up on which fuses NOT to change, prior to experimentation.