Manual PWM is hard, and it doesn’t leave room for anything else in the program. Why can’t we offload that chore to the microcontroller? It’s smart enough for that…right?
Background Information
PWM is such a popular tool many microcontrollers implement special hardware so they can mindlessly toggle the pin while doing something else. We call this PWM-based output analog output.
Unlike digital outputs, which only have two possible values, analog outputs have a huge range of possible values. On the Arduino we can analog-ly output 256 different values. If we set an analog output to zero, that’s like setting a pin LOW, and 255 is like setting a pin HIGH, but all of the values in between produce an output that’s neither HIGH or LOW – it’s somewhere in between.
Analog output seems great – why wouldn’t you use it all the time? Unfortunately, not all pins have special PWM powers. Only pins 3, 5, 6, 9, 10, 11 and 13 are able to produce analog outputs.
Code Components
New block alert! While it may look similar, we’ll be using Set Analog Pin this time instead of its digital counterpart:
- Set Analog Pin: This block looks a lot like the Set Digital Pin block. We still tell it which pin to control, but instead of a restrictive, digital output option, we get to choose any number between zero and 255 for the output. Find this block under the Pins bin.
Do This
Stack the blocks in the loop section. Order them so the analog values go from zero at the top to 255 at the bottom. Then upload away!
The LED on pin 5 should cycle through five different levels of brightness (including fully on and fully off). Remember that setting the analog output to zero turns the LED off, and 255 is like setting it to HIGH.
Try adding analog control of the pin 6 LED to the drawing. You can create the same effect from the last experiment, with just two lines of code (and you can execute other code while the LEDs remain in their dimmed state!).
Further Explorations
- What’s the dimmest value you can set the LED and still see it on?
- Why do you think there are 256 possible analog output values? That doesn’t seem like a very round number (hint: 28).
No comments:
Post a Comment