Cours:DataDS

De troyesGEII
Révision datée du 11 juin 2020 à 06:39 par Bjacquot (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Rappel : partager correctement votre Tinkercad avec l'enseignant

partage en "live"

Je partage mon travail :

Tinkercad etape1.jpg
Tinkercad etape2.jpg
Tinkercad etape3.jpg

Je renomme ma page :

Tinkercad etape4.jpg
Tinkercad etape5.jpg


solution de secours :

RendrePublic1.png
RendrePublic2.png
RendrePublic3.png
RendrePublic4.png

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.

ArduinoPinout.png

Conversion Analogique Numérique

Can atmega328.png

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 !

La documentation (presque) complète du Timer 2 (8 bits)
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
La comparaison avec le timer 1

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.

AVR INT0 int.png
AVR INT1 int.png

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.

UART : la liaison série

Usart atmega328.png