Implementing precise single shots with AVR timer
Microcontroller timers are meant to count clock cycles in hardware, and there are many ways and configurations where timers are handy. First of all, timers are meant to work purely in hardware without utilizing CPU. Secondly, timers help generate waveforms like PWM, trigger events, count the time between events, etc. But there is one use that, in most cases, is missed and not documented – precise single shots that allow generating only a single pulse shot with precise length. And this method doesn’t require CPU to be involved – just set and forget. The idea of this method lies in using fast PWM (refer to datasheet for more info) mode a bit differently. Normally in this mode timer works by counting to TOP value; somewhere in between, there is a MATCH value where timer outputs HIG and drops to LOW when TOP is counted. This way, there is a PWM signal generated. Josh came up with the idea that, in this case, we can generate only single pulse by setting MATCH value above the TOP and setting the initial timer…