0% ont trouvé ce document utile (0 vote)
54 vues2 pages

Configurer un Timer sur Arduino Uno

Configuration du timer Arduino

Transféré par

tenkampythagore
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
54 vues2 pages

Configurer un Timer sur Arduino Uno

Configuration du timer Arduino

Transféré par

tenkampythagore
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

La configuration d'un timer sur un microcontrôleur Arduino dépend de l'usage que

vous souhaitez en faire (PWM, interruption, etc.) et du modèle d'Arduino que vous
utilisez. Voici un guide général pour configurer un timer sur un Arduino Uno (basé
sur l'ATmega328P).

### 1. Comprendre les Timers sur l'Arduino Uno


L'Arduino Uno dispose de trois timers :
- **Timer 0** : Utilisé pour `millis()` et `delay()`
- **Timer 1** : 16 bits, idéal pour des applications de PWM haute résolution ou des
minuteries précises
- **Timer 2** : 8 bits, utilisé pour des applications de PWM sur certaines broches

### 2. Exemple de Configuration d'un Timer pour une Interruption

#### Configuration de Timer1 pour générer une interruption toutes les 1 seconde :

```cpp
void setup() {
// Configure Timer1
noInterrupts(); // Désactive toutes les interruptions
TCCR1A = 0; // Réinitialise les registres de contrôle
TCCR1B = 0; // Réinitialise les registres de contrôle
TCNT1 = 0; // Initialiser le compteur à 0

// Configure la fréquence de l'horloge


// 16000000 Hz / (1024 * 15625) = 1 Hz
OCR1A = 15624; // Valeur de comparaison
TCCR1B |= (1 << WGM12); // Mode CTC (Clear Timer on Compare Match)
TCCR1B |= (1 << CS12) | (1 << CS10); // Prescaler 1024
TIMSK1 |= (1 << OCIE1A); // Active l'interruption sur OCR1A

interrupts(); // Réactive les interruptions


}

ISR(TIMER1_COMPA_vect) {
// Code à exécuter toutes les secondes
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // Toggle LED
}

void loop() {
// Code principal
}
```

### 3. Explication des Étapes :


1. **Désactiver les interruptions** pendant la configuration pour éviter des
comportements inattendus.
2. **Réinitialiser les registres de contrôle** pour Timer1 (TCCR1A et TCCR1B).
3. **Initialiser le compteur** (TCNT1) à 0.
4. **Définir la valeur de comparaison** (OCR1A) pour déterminer la fréquence de
l'interruption.
5. **Configurer le mode CTC** en définissant le bit WGM12 dans TCCR1B.
6. **Configurer le prescaler** (CS12 et CS10) pour diviser l'horloge du
microcontrôleur.
7. **Activer l'interruption** en définissant le bit OCIE1A dans TIMSK1.
8. **Réactiver les interruptions** globales.
9. **Définir l'ISR** (Interrupt Service Routine) pour exécuter le code lors de chaque
interruption.

### 4. Utilisation de PWM avec les Timers

Pour utiliser les timers pour PWM, vous pouvez configurer les registres TCCRnA et
TCCRnB pour définir le mode de fonctionnement et les broches de sortie.

### Ressources supplémentaires :


- [Documentation officielle
d'AVR]([Link]
[Link])
- [Référence Arduino sur les
Timers]([Link]

N'hésitez pas à spécifier votre besoin exact pour plus de détails ou des exemples
spécifiques.

Vous aimerez peut-être aussi