Timers

Micropython permet d'utiliser les timers disponibles sur une carte donnée.

Les timers

La carte Pi Pico dispose d'un timer principal en base micro-seconde couplé à un compteur 64 bits, ce qui fait qu'il ne peut jamais avoir un dépassement (overflow pour 1000 ans à 1Mhz) (p. 557 datasheet RP2040)

Liens utiles

Description de l'objet Timer

Import

La classe Timer est une classe du module machine et s'importe avec :

from machine import Timer

Constructeur

Un objet timer se crée avec :

t1=Timer()

Note

Petite différence d'avec la Pyboard sur la Pi Pico : le constructeur ne prend pas de paramètre id D'après le code source, la valeur de id est -1 par défaut, il s'agit d'un timer logiciel. Voir : https://github.com/micropython/micropython/blob/master/ports/rp2/machine_timer.c

Fonctions

L'objet timer dispose de 2 fonctions, la fonction d'initialisation :

Initialisation

objTimer.init(*, mode=Timer.PERIODIC, freq=1, period=1, callback=None)

L'argument mode défini le fonctionnement du Timer :

  • Timer.ONE_SHOT : timer à "1 coup" qui appelle la fonction une seule fois quand le délai est écoulé
  • Timer.PERIODIC : le timer tourne en boucle à la fréquence indiquée

L'argument freq fréquence en hertz

L'argument period fréquence en hertz

l'argument callback : la fonction à appeler.

Exemple d'initialisation par la fréquence :

t1.init(freq=10, callback=namefonction) # appelle fonction à la fréquence de 10 hz

Exemple d'initialisation par la période :

t1.init(period=100, callback=namefonction) # appelle fonction à la fréquence de 10 hz (et donc période de 100ms)

Désactivation

objTimer.deinit()

Exemple d'utilisation

Faire clignoter une LED en utilisant un timer

L'avantage de cette façon de faire est de libérer le processeur le reste du temps.

Je conseille fortement de ne pas utiliser While(True) mais un timer pour toutes les opérations exécutées en boucle.

from machine import Pin, Timer

led=Pin(25,Pin.OUT) # la broche GP25 dispose d'une LED onboard

timer=Timer() # pas besoin préciser le timer

def loop(timer):
    led.toggle()

# timer.init(freq=10, mode=Timer.PERIODIC, callback=tick)
timer.init(freq=10, callback=loop) # forme minimale

Bon à savoir

Une fois ce script lancé, la LED clignote, même si on ferme l'éditeur. Pour stopper le timer, il faut envoyer via l'interpréteur :

timer.deinit()

Ou bien reprogrammer la carte.

Génération de PWM

cf PWM

Génération fréquence fixe

cf tone

Interruption à intervalles régulier

todo