Fix Fade-Example Issue (Arduino Uno)

Bedingt durch die Twitter-Werbung für das neue Arduino Uno sah ich mich genötigt mir dieses zuzulegen, um mal wieder etwas Bastelenergie loszuwerden.

Das Arduino-Tool hält einige Beispielprojekte bereit, bei dem zweiten (Fade) rannte ich nun gleich in einen Bug der mich etwas Zeit gekostet hat.

Das Problem: Mithilfe von analogWrite() soll eine an Port 9 angeschlossene LED zum langsamen aufleuchten gebracht werden. Stattdessen leuchtet diese nach längerer Zeit nur kurz stark auf. Das selbe Verhalten findet sich an Port 10, jedoch nicht an den anderen PWM Ports.

Die Lösung: Es handelt sich um einen Bug in Optiboot welches der Bootloader vom Arduino Uno ist. Mithilfe des folgenden Codes, lässt sich dieses Problem lösen. Dies ist natürlich nur eine Workaround bis das Problem gefixed wurde.

Optiboot sets TCCR1B - CS12 bit but not reset that bit.
Put following code to setup() routine.
TCCR1B &= ~_BV(CS12);

Update: Es gibt eine neue Version der Arduino-Tools in der dieser Bug gefixed wurde:

ARDUINO 0021 - 2010.10.02
Modifying VID / PID combination in 8U2 firmwares.

  • Fixing analogWrite() bug on pins 9 and 10 (Arduino Uno)
  • Patched RXTX to include /dev/ttyACM* on Linu