Cours:TPS 2103 1 : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m (Ex 1: mise en jambe !)
(Ex 1: mise en jambe !)
Ligne 28 : Ligne 28 :
 
</source>
 
</source>
  
 +
{{Aide|Il faut apprendre à debugger un programme. Le plus simple est de se servir de la liaison série :}}
 +
 +
<source lang=c>
 +
 +
void setup()
 +
{
 +
  Serial.begin(9600);
 +
  DDRD = 0x?? ;                // configuration des e/s (registre de direction DDRx) sur le port D.
 +
}
 +
 +
void loop()
 +
{
 +
  unsigned char res;
 +
  res = PIND & 0x??;
 +
  Serial.print("res = ");
 +
  Serial.println(res,BIN);
 +
  if ( (res) != 0 )
 +
  {
 +
        Serial.println("le test est vrai.");
 +
        PORTD = 0x??;          // on modifie en conséquence l'état de la sortie
 +
  }
 +
  else
 +
  {
 +
        Serial.println("le test est faux.");
 +
        PORTD = 0x??;
 +
  }
 +
  delay(200);                  // indispensable pour ne pas avoir un affichage trop rapide !
 +
}
 +
 +
</source>
 +
{{finAide}}
  
 
{{Question|On peut simplifier le programme précédent en utilisant l'opérateur décalage : il suffit de "recopier" l'état du bouton poussoir (PD2) sur la led (PD6) en décalant de 4 bits (PD{{Rouge|6}}-PD{{Rouge|2}} vers la gauche}}
 
{{Question|On peut simplifier le programme précédent en utilisant l'opérateur décalage : il suffit de "recopier" l'état du bouton poussoir (PD2) sur la led (PD6) en décalant de 4 bits (PD{{Rouge|6}}-PD{{Rouge|2}} vers la gauche}}

Version du 23 mars 2014 à 23:56

Nous avons abordé la programmation des cartes arduino au premier semestre en utilisant des fonctions de haut niveau ce qui, bien que pouvant simplifier certaine tâche, présente un certain nombre de limitation.

L'objectif de ces TPs est de découvrir le fonctionnement du µcontrôleur Atmega328p et d'en explorer les possibilités.

Nous commencerons simplement de façon analogue au premier TP du module M1102 en configurant des e/s (il est sans doute utile de jeter un coup d’œil au lien précédent !).

Ex 1: mise en jambe !

Nous considérons pour le moment le bouton A et la led de droite (p0).

Question.jpg Complétez le programme suivant pour que la led s'allume si le bouton est appuyé

void setup()
{
   DDRD = 0x?? ;                 // configuration des e/s (registre de direction DDRx) sur le port D.
}

void loop()
{
   if ( (PIND & 0x?? ) != 0 )    // on observe l'état de l'entrée
         PORTD = 0x??;          // on modifie en conséquence l'état de la sortie
   else
         PORTD = 0x??;
}
Bluebg.png
Aidesmall.png
À propos de cette image

Il faut apprendre à debugger un programme. Le plus simple est de se servir de la liaison série :

void setup()
{
   Serial.begin(9600);
   DDRD = 0x?? ;                 // configuration des e/s (registre de direction DDRx) sur le port D.
}

void loop()
{
   unsigned char res;
   res = PIND & 0x??;
   Serial.print("res = ");
   Serial.println(res,BIN);
   if ( (res) != 0 )
   {
         Serial.println("le test est vrai.");
         PORTD = 0x??;          // on modifie en conséquence l'état de la sortie
   }
   else
   {
         Serial.println("le test est faux.");
         PORTD = 0x??;
   }
   delay(200);                  // indispensable pour ne pas avoir un affichage trop rapide !
}

Question.jpg On peut simplifier le programme précédent en utilisant l'opérateur décalage : il suffit de "recopier" l'état du bouton poussoir (PD2) sur la led (PD6) en décalant de 4 bits (PD6-PD2 vers la gauche

void setup()
{
  DDRD = 0x?? ; // configuration des e/s (registre de direction DDRx) sur le port D.
}

void loop()
{
  PORTD = (PIND&0x??)<<4;
}