Tutoriel Arduino timer méthodes et pratique

Interruptions
Les Timers
Déroulement du code (rappel)
? Le code en C/C++ est séquentiel
? il s’execute “de haut en bas” intnombre = 0; nombre++;
Serial.println(nombre); // 1 nombre += 8;
Serial.println(nombre*2); // 18 nombre = analogRead(A0);
Serial.println(nombre); // ?
Prérequis: Binaire, hexa, decimal,
? Décimal: base 10
? Celle que l’on utilise au quotidien
? Hexadécimal: base 16
? (a,b,c,d,e,f) pour (10,11,12,13,14,15)
? Différentiée par 0x au début du nombre
? Ex: 0x2e = 2*16 + 14 = 48
? Binaire: base 2
? Différentiée par 0b au début du nombre
? 0b00000001 = 1
? 0b1010 = 12
Prérequis: Opérations bit à bit
? OU logique : |
? 1 | 0 = 1

? 0 | 0 = 0
? NEGATION : ~
? ~1 = 0
? ~0 = 1
? ET logique : &
? 1 & 0 = 0
? 1 & 1 = 1
? SHIFT : << et >>
? (1 << 2) = 0b100
? (6 >> 1) = 0b011
? XOR : ^
? 0^1 = 1,
0^0 = 0, 1^1 = 0
Prérequis: Opérations bit à bit
? Le uC contient des registres (paquets de bits) pouvant être modifiés par l’utilisateur.
? Exemples avec le bit 7 du registre PORTC ? Mettre à 1:
? PORTC |= (1 << PORTC7); ? Mettre à 0:
? PORTC &= ~(1 << PORTC7); ? Commuter:
? PORTC ^= (1 << PORTC7);
? Rappel: x=x+1 équivalent à x+=1

Marche aussi avec les opérateurs bits à bits
Les interruptions, pourquoi?
? Principe de base : interrompre le déroulement séquentiel du code
? Rapidité d’action
? Réaliser plusieurs taches en meme temps
main loop
fonction
Les interruptions, pourquoi?
? Principe de base : interrompre le déroulement séquentiel du code
? Rapidité d’action
? Réaliser plusieurs taches en meme temps
main loop
fonction
Les interruptions, pourquoi?
? Principe de base : interrompre le déroulement séquentiel du code
? Rapidité d’action
? Réaliser plusieurs taches en meme temps
main Signal interne
loop(Timers) ou externe

(capteurs, lignes de
fonctioncommunication
Les interruptions, pourquoi?
? Principe de base : interrompre le déroulement séquentiel du code
? Rapidité d’action
? Réaliser plusieurs taches en meme temps
Signal interne
(Timers) ou externe (capteurs, lignes de communication
Les interruptions, pourquoi?
? Principe de base : interrompre le déroulement séquentiel du code
? Rapidité d’action
? Réaliser plusieurs taches en meme temps
Signal interne
(Timers) ou externe (capteurs, lignes de communication
Les interruptions, pourquoi?
? Principe de base : interrompre le déroulement séquentiel du code
? Rapidité d’action
? Réaliser plusieurs taches en meme temps
Interruptions, généralités
? Les variables modifiées dans une interruption doivent etre déclarées volatile

? volatilecharbutton_counter;
? Les interruptions doivent être aussi courtes que possible
? Ne pas utiliser millis() ou delay() dans une interruption
Interruptions, the Arduino way
AttachInterrupt( digitalPinToInterrupt(pin), ISR, mode)
? pin peut valoir 0,1,2,3,7
? ISR est le nom de la fonction à appeler, sans paramètres et ne renvoie rien ? mode peut etre:
? CHANGE (flanc montant ou descendant)
? RISING (flanc montant)
? FALLING (flanc descendant)
? LOW
Interruptions, the Arduino way
Interruptions, the Arduino way
? detachInterrupt(
digitalPinToInterrupt(pin))
? pour supprimer une interruption
? interrupts()
? activer les interruptions
? noInterrupts()
? désactiver les interruptions
(temporairement par exemples)
Interruptions, the AVR way
? On sait exactement ce qu’il se passe

? Souvent Arduino ne renseigne pas sur ce qu’il désactive => Incompatibilités de certaines librairies sans que cela soit documenté!
? Plus complexe, il faut chercher le datasheet
? Plus puissant car plus d’interruptions disponibles: PCINT, ICP (même si certaines librairies Arduino les rendent disponibles)
Interruptions, the AVR way
? Plusieurs registres à modifier pour le setup
? EICRA/EICRB pour définir le mode d’ interruption
? EIMSK pour activer certaines interruptions
? cli()/sei() pour toutes les dés/activer
? ISR(INTn_vect) noms des ISR
? Ça a l’air compliqué vu comme ça
? Le datasheet est clair et explique tout ceci (s’ habituer à le lire)
Interruptions, the AVR way
Interruptions
Les Timers
Les timers, comment?
? Ce sont des compteurs internes du uC (sur 8, 10 ou 16 bits généralement)
? Vitesse d’incrémentation du compteur variable (multiple de la fréquence du uC)
? Peuvent déclencher des interruptions (internes) lorsque:
? il y a overflow du compteur
? le compteur atteint une valeur choisie
Les timers, pourquoi?

? Réaliser plusieurs taches en meme temps ? Faire du PWM (moteurs par ex.) ? Respect des timings:
while(1){ if(condition)
// do some very long stuff else
// do some short stuff digitalWrite(LED, HIGH);
La LED ne clignotera pas à
delay(100);une fréquence fixe (5 Hz)
digitalWrite(LED, LOW);car la durée des instructions
delay(100);dans la condition varie
}
Les timers, the Robopoly way setTimer(callback, interval, callNumber);
? callback: pointeur de fonction
? interval: nombre de periodes de 100ms entre 2 appels de callback
? callNumber: nombre de fois qu’on appelle la fonction
? Maximum 4 timers
? Pas de servos! (utilisent le même Timer…)
? 65s entre 2 appels maximum
? 256 appels maximum
? Renvoie l’ID de votre fonction
Les timers, the Robopoly way
? unSetTimer(callback_id)
? enleve la fonction identifiée par callback_id de la liste d’appels

? Lisez le Readme pour plus de détails
? Toujours vérifier les comptabilités entre les libraries (Servos, setSpeed, setTimer, etc…)
Les timers, the Robopoly way
Les timers, the AVR way
? Moins de magie, on sait exactement ce qu’il se passe
? Plus complexe, il faut chercher dans le datasheet
? Meilleur controle des timings!
Les timers, the AVR way
? Interruption lorsque:
? il y a overflow du compteur
? le compteur atteint une valeur choisie
(fonctionne par comparaison de valeur)
? Les registres importants:
? TCCR: Timer configuration
? TCNT: Timer counter (valeur du timer)
? TIMSK: Timer interruptions mask
? OCRi: Output comparison
Les timers, the AVR way
Aller plus loin
? Plus d’infos sur:
? Polycopié de Microcontroleurs
(disponible en lecture au local)
?

? “Comprendre les microcontroleurs” sur Coursera (Pas de date de future session)
Calendrier du semestre
? Prochain démon
? Lundi 7 février , 12h15 en ELA1
? Sujet: Encodeurs
? Workshop III
? Samedi 5 mars en haut du BM
? Utile pour se préparer au concours
? Grand Concours
? Samedi 19 mars en SG1 Contact/Infos
Contact principal
Site officiel - toutes les infos et slides sont la!
Facebook - pour suivre l’actualité du club!
MERCI!
Questions?