Timers et bibliothèques

Certaines fonctions ou bibliothèques utilisent des timers sans forcément l'afficher. Sans le savoir, on arrive parfois à des incompatibilités.

N'utilisent pas les timers

delayMicroseconds()
Stepper
Accelstepper

Utilisation des timers

Deux bibliothèques peuvent utiliser le même registre TCNTn si il peut y avoir une valeur commune. C'est le cas du timer 0 qui peut être utilisé en même temps pour faire du PWM et par millis(). Par contre si la valeur de TCNTn doit être différente, il y a incompatibilité; c'est le cas de servo qui ne peut être utilisé avec le PWM du timer 1.

Normalement, sauf exception, deux bibliothèques ne peuvent pas utiliser le même registre OCRnX, ni la même broche.

Deux bibliothèques ne peuvent pas utiliser le même vecteur d'interruption. Il y aurait deux définitions pour la fonction associée, avec un message "multiple definition of `__vector_XX".

Avec une carte Uno/Nano

Fonctions
ou
 bibliothèques 
RegistresBrochesVecteurs d'interruption
 TCNTn  OCRnA  OCRnB OCnAOCnB TIMERn_OVF_vect  TIMERn_COMPA_vect  TIMERn_COMPB_vect 

Timer 0 (8 bits, 980Hz pour le PWM)
millis()
micro()
delay()
TCNT0 TIMER0_OVF_vect
PWM broche 6 TCNT0 OCR0A OC0A
PWM broche 5 TCNT0 OCR0B OC0B

Timer 1 (16 bits, 490Hz pour le PWM)
PWM broche 9 TCNT1 OCR1A OC1A
PWM broche 10 TCNT1 OCR1B OC1B
Servo(1) TCNT1 OCR1A TIMER1_COMPA_vect
PWMServo TCNT1 OCR1A(2) OCR1B(3) OC1A(2) OC1B(3)
QuickStep(4) TCNT1 OCR1A TIMER1_COMPA_vect
TMRpcm TCNT1 OCR1A OCR1B TIMER0_OVF_vect TIMER1_COMPA_vect TIMER1_COMPB_vect

Timer 2 (8 bits, 490Hz pour le PWM)
tone() TCNT2 OCR2A
PWM broche 11 TCNT2 OCR2A OC2A
PWM broche 3 TCNT2 OCR2B OC2B
ServoTimer2(5) TCNT2 TIMER2_OVF_vect
Notes:
(1) Au moins 1 servo (le maximum est 12)
(2) Si un servo sur la broche 9
(3) Si un servo sur la broche 10
(4) Pour 1 ou 2 pas à pas
(5) Pour 1 à 8 servos

 

Avec une carte Mega

Fonctions
ou
 bibliothèques 
RegistresBrochesVecteurs d'interruption
 TCNTn  OCRnA  OCRnB  OCRnC OCnAOCnBOCnC TIMERn_OVF_vect  TIMERn_COMPA_vect  TIMERn_COMPB_vect  TIMERn_COMPC_vect 

Timer 0 (8 bits, 980Hz pour le PWM)
millis()
micro()
delay()
TCNT0 TIMER0_OVF_vect
PWM broche 13 TCNT0 OCR0A OC0A
PWM broche 4 TCNT0 OCR0B OC0B

Timer 1 (16 bits, 490Hz pour le PWM)
PWM broche 11 TCNT1 OCR1A OC1A
PWM broche 12 TCNT1 OCR1B OC1B
Servo TCNT1(1) OCR1A(1) TIMER1_COMPA_vect(4)
PWMServo TCNT1 OCR1A(5) OCR1B(6) OCR1C(7) OC1A(5) OC1B(6) OC1C(7)
QuickStep(8) TCNT1 OCR1A TIMER1_COMPA_vect
TMRpcm(13) TCNT1 OCR1A OCR1B TIMER1_OVF_vect TIMER1_COMPA_vect TIMER1_COMPB_vect

Timer 2 (8 bits, 490Hz pour le PWM)
tone() TCNT2 OCR2A
PWM broche 10 TCNT2 OCR2A OC2A
PWM broche 9 TCNT2 OCR2B OC2B
ServoTimer2(12) TCNT2 TIMER2_OVF_vect

Timer 3 (16 bits, 490Hz pour le PWM)
PWM broche 5 TCNT3 OCR3A OC3A
PWM broche 2 TCNT3 OCR3B OC3B
PWM broche 3 TCNT3 OCR3C OC3C
Servo TCNT3(2) OCR3A(2) TIMER3_COMPA_vect(4)
QuickStep(9) TCNT3 OCR3A TIMER3_COMPA_vect
TMRpcm(13) TCNT3 OCR3A OCR3B TIMER3_OVF_vect TIMER3_COMPA_vect TIMER3_COMPB_vect

Timer 4 (16 bits, 490Hz pour le PWM)
PWM broche 6 TCNT4 OCR4A OC4A
PWM broche 7 TCNT4 OCR4B OC4B
PWM broche 8 TCNT4 OCR4C OC4C
Servo TCNT4(3) OCR4A(3) TIMER4_COMPA_vect(4)
QuickStep(10) TCNT4 OCR4A TIMER4_COMPA_vect
TMRpcm(13) TCNT4 OCR4A OCR4B TIMER4_OVF_vect TIMER4_COMPA_vect TIMER4_COMPB_vect

Timer 5 (16 bits, 490Hz pour le PWM)
PWM broche 46 TCNT5 OCR5A OC5A
PWM broche 45 TCNT5 OCR5B OC5B
PWM broche 44 TCNT5 OCR5C OC5C
Servo TCNT5(4) OCR5A(4) TIMER5_COMPA_vect(4)
QuickStep(11) TCNT5 OCR5A TIMER5_COMPA_vect
TMRpcm(13) TCNT5 OCR5A OCR5B TIMER5_OVF_vect TIMER5_COMPA_vect TIMER5_COMPB_vect
Notes:
(1) Au moins 13 servo (le maximum est 48)
(2) Au moins 25 servo (le maximum est 48)
(3) Au moins 37 servo (le maximum est 48)
(4) Au moins 1 servo (le maximum est 48)
(5) Si un servo sur la broche 11
(6) Si un servo sur la broche 12
(7) Si un servo sur la broche 13
(8) Pour 1 ou 2 pas à pas utilisant le timer 1
(9) Pour 1 ou 2 pas à pas utilisant le timer 3
(10) Pour 1 ou 2 pas à pas utilisant le timer 4
(11) Pour 1 ou 2 pas à pas utilisant le timer 5
(12) Pour 1 à 8 servos
(13) Au choix