Cours:DataDS
Sommaire
- 1 Rappel : partager correctement votre Tinkercad avec l'enseignant
- 2 Documents en vrac
Rappel : partager correctement votre Tinkercad avec l'enseignant
partage en "live"
Je partage mon travail :
Je renomme ma page :
solution de secours :
Documents en vrac
Nous donnons en vrac dans cette partie tous les documents que vous avez pu rencontrer lors de la réalisations des TPs et des TDs. Choisissez les seuls qui sont en rapport avec votre sujet.
- Document officiel pour l'ATMega328p
- feuille de calcul pour les TIMERS
- timer0 de l'atmega328p en mode PWM
- Media:M2103_can.pdf
Conversion Analogique Numérique
Description partielle du Timer 2
- Description des bits pour les modes de fonctionnement du timer 2
Mode | WGM22 | WGM21 | WGM20 | Mode de fonctionnement | Bas si | Mise à jour de OCRAx si | Drapeau TOV2 positionné si |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | Normal | 0XFF | immédiatement | MAX |
1 | 0 | 0 | 1 | PWM à phase correcte | OXFF | TOP | BOTTOM |
2 | 0 | 1 | 0 | CTC | OCR2A | immédiatement | MAX |
3 | 0 | 1 | 1 | PWM rapide | 0XFF | BOTTOM | MAX |
4 | 1 | 0 | 0 | Reservé | - | - | - |
5 | 1 | 0 | 1 | PWM à phase correcte | OCR2A | TOP | BOTTOM |
6 | 1 | 1 | 0 | Reservé | - | - | - |
7 | 1 | 1 | 1 | PWM rapide | OCR2A | BOTTOM | TOP |
Attention : ces trois bits n'appartiennent pas au même registre comme le montre le schéma ci-dessous !
- Mode PWM rapide
COM2A1 | COM2A0 | Description |
---|---|---|
0 | 0 | Opération Normale de PORT, OC2A déconnecté |
0 | 1 | WGM22 = 0: Opération Normale de PORT, OC2A déconnecté, WGM22 = 1: Bascule OC2A sur la comparaison |
1 | 0 | Mise à 0 de OC2A sur la comparaison et à 1 sur overflow (MLI non inversée) |
1 | 1 | Mise à 1 de OC2A sur la comparaison et à 0 sur l'overflow (MLI inversée) |
Description partielle du TIMER 1
- Description des bits pour la génération de forme d'onde du TIMER 1
Mode | WGM13 | WGM12 | WGM11 | WGM10 | Mode de fonctionnement | Bas si | Mise à jour de OCRAx si | Drapeau TOV1 positionné si |
---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | Normal | 0XFFFF | immédiatement | MAX |
1 | 0 | 0 | 0 | 1 | PWM à phase correcte (8 bits) | OXFF | TOP | BOTTOM |
2 | 0 | 0 | 1 | 0 | PWM à phase correcte (9 bits) | OX1FF | TOP | BOTTOM |
3 | 0 | 0 | 1 | 1 | PWM à phase correcte (10 bits) | OX3FF | TOP | BOTTOM |
4 | 0 | 1 | 0 | 0 | CTC (Clear Timer on Compare) | OCR1A | immédiatement | MAX |
5 | 0 | 1 | 0 | 1 | PWM rapide (8 bits) | OXFF | BOTTOM | TOP |
6 | 0 | 1 | 1 | 0 | PWM rapide (9 bits) | OX1FF | BOTTOM | TOP |
7 | 0 | 1 | 1 | 1 | PWM rapide (10 bits) | OX3FF | BOTTOM | TOP |
14 | 1 | 1 | 1 | 0 | PWM rapide | ICR1 | BOTTOM | TOP |
15 | 1 | 1 | 1 | 1 | PWM rapide | OCR1A | BOTTOM | TOP |
Interruption externe INT0 et INT1 : détection de variation de tension sur des entrées
Le tableau suivant donne les caractéristiques utiles sur les 4 boutons poussoirs d'entrée pour le shield de l'IUT :
Bouton | Position | Arduino Pin | Port | Interruption | Niveau logique si bouton appuyé |
---|---|---|---|---|---|
A | Bas Gauche | 2 | PD2 | int0 | 1 |
D | Haut Gauche | 3 | PD3 | int1 | 1 |
B | Bas Droite | A0 | PC0 | 0 | |
C | Haut Droite | A1 | PC1 | 0 |
Cette partie détaille l'utilisation des interruptions INT0 et INT1, attachées aux pin PD2 et PD3.
Registre EICRA
Le registre EICRA permet de choisir le mode de déclenchement de l'interruption.
EICRA bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Fonction | ----- | ----- | ----- | ----- | ISC11 | ISC10 | ISC01 | ISC00 |
Valeur initiale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Le tableau suivant donne la valeur des bits ISCx0 et ISCx1 pour configurer le mode de déclenchement associé à l'interruption INTx :
ISCx1 | ISCx0 | Déclenchement de l'interruption sur : |
---|---|---|
0 | 0 | Un niveau bas sur l'entrée INTx |
0 | 1 | Un changement d'état sur l'entrée INTx |
1 | 0 | Un front descendant sur l'entrée INTx |
1 | 1 | Un front montant sur l'entrée INTx |
Registre EIMSK
Le registre EIMSK permet d'autoriser ou non les interruptions INT1 et INT0.
EIMSK bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Fonction | ----- | ----- | ----- | ----- | ----- | ----- | INT1 | INT0 |
Valeur initiale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Une mise à '1' du bit INTx permet d'autoriser l'interruption associée.
Registre EIFR Exernal Interrupt Flag Register
Le registre EIFR permet d'observer l'état des interruptions INT1 et INT0.
EIFR bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
Fonction | ----- | ----- | ----- | ----- | ----- | ----- | INTF1 | INTF0 |
Valeur initiale | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Le bit INTFx passe à '1' lors du déclenchement de l'interruption.
Exemple
Pour déclencher une interruption à chaque changement d'état de la patte PD2 (donc sur les fronts montant et descendant), on pourra utiliser le code suivant :
ISR(INT0_vect) // programme d'interruption : le programme principal est interrompu,
{ // l'interruption exécutée et ensuite le programme principal continu normalement son exécution
PORTB ^= 1<<PB0; // modification de la sortie PB0
}
int main()
{
DDRB |= (1<<PB0) ; // configuration de PB0 en sortie
cli(); // arrêt des interruptions
EICRA |= (1<<ISC00) ; // mode de déclenchement de l'interruption
EIMSK |= (1<<INT0) ; // choix des interruptions actives
sei(); // autorisation des interruptions
while(1)
{
}
}
Pour la première fois vous voyez apparaître un sous-programme particulier ISR(...). C'est lui qui va être appelé quand l'événement qui déclenche l'interruption correspondante arrive. Ce qui apparaît dans les parenthèses dépend de l'événement : ici INT0_vect est une constante associée à l'interruption sur un changement sur la broche PD2. On vous donnera toujours la constante associée à un événement.