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 | Registres | Broches | Vecteurs d'interruption | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TCNTn | OCRnA | OCRnB | OCnA | OCnB | 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 | Registres | Broches | Vecteurs d'interruption | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TCNTn | OCRnA | OCRnB | OCRnC | OCnA | OCnB | OCnC | 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 |