5. Hardware timers
Timers can be used for a great variety of tasks, calling a function periodically, counting events, and generating a PWM signal are among the most common use cases. Each timer consists of two 16-bit channels and this channels can be tied together to form one 32-bit timer. The operating mode needs to be configured per timer, but then the period (or the frequency) can be independently configured on each channel. By using the callback method, the timer event can call a Python function.
Example usage to toggle an LED at a fixed frequency:
frommachineimport Timer frommachineimport Pin led = Pin('GP16', mode=Pin.OUT) # enable GP16 as output to drive the LED tim = Timer(3) # create a timer object using timer 3 tim.init(mode=Timer.PERIODIC) # initialize it in periodic mode tim_ch = tim.channel(Timer.A, freq=5) # configure channel A at a frequency of 5Hz tim_ch.irq(handler=lambda t:led.toggle(), trigger=Timer.TIMEOUT) # toggle a LED on every cycle of the timer
Example using named function for the callback:
frommachineimport Timer frommachineimport Pin tim = Timer(1, mode=Timer.PERIODIC, width=32) tim_a = tim.channel(Timer.A | Timer.B, freq=1) # 1 Hz frequency requires a 32 bit timer led = Pin('GP16', mode=Pin.OUT) # enable GP16 as output to drive the LED deftick(timer): # we will receive the timer object when being called global led led.toggle() # toggle the LED tim_a.irq(handler=tick, trigger=Timer.TIMEOUT) # create the interrupt
Further examples:
frommachineimport Timer tim1 = Timer(1, mode=Timer.ONE_SHOT) # initialize it in one shot mode tim2 = Timer(2, mode=Timer.PWM) # initialize it in PWM mode tim1_ch = tim1.channel(Timer.A, freq=10, polarity=Timer.POSITIVE) # start the event counter with a frequency of 10Hz and triggered by positive edges tim2_ch = tim2.channel(Timer.B, freq=10000, duty_cycle=5000) # start the PWM on channel B with a 50% duty cycle tim2_ch.freq(20) # set the frequency (can also get) tim2_ch.duty_cycle(3010) # set the duty cycle to 30.1% (can also get) tim2_ch.duty_cycle(3020, Timer.NEGATIVE) # set the duty cycle to 30.2% and change the polarity to negative tim2_ch.period(2000000) # change the period to 2 seconds
5.1. Additional constants for Timer class
- Timer.PWM
PWM timer operating mode.
- Timer.A
- Timer.B
Selects the timer channel. Must be ORed (
Timer.A|Timer.B) when using a 32-bit timer.
- Timer.POSITIVE
- Timer.NEGATIVE
Timer channel polarity selection (only relevant in PWM mode).
- Timer.TIMEOUT
- Timer.MATCH
Timer channel IRQ triggers.