Cours:DM clignotementLeds : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Comportement)
(Comportement)
Ligne 20 : Ligne 20 :
 
*la led verte change d'état toutes les 500ms
 
*la led verte change d'état toutes les 500ms
 
*la led jaune change d'état toutes les 600ms
 
*la led jaune change d'état toutes les 600ms
 +
 +
=Aide=
 +
 +
Plutôt que de faire d'avoir une boucle while(1) qui se répète toutes les 100ms on peut avoir une boucle plus rapide mais ne pas faire l'action à chaque itération :
 +
 +
{| class="wikitable"
 +
|-
 +
|
 +
<source lang=cpp>
 +
int main()
 +
{
 +
  ...
 +
  while(1)
 +
  {
 +
    action;
 +
    _delay_ms(100);
 +
  }
 +
}
 +
</source>
 +
||
 +
<source lang=cpp>
 +
int main()
 +
{
 +
  uint8_t compteur=0;
 +
  ...
 +
  while(1)
 +
  {
 +
    compteur++;
 +
    if (compteur==10)
 +
    {
 +
      action;
 +
      compteur=0;
 +
    }
 +
    _delay_ms(10);
 +
  }
 +
}
 +
</source>
 +
|}

Version du 30 janvier 2023 à 11:34

Modalités

  • travail à réaliser sur simulIDE
  • 1 seul fichier au format .zip à déposer sur Moodle contenant :
    • le schéma : fichier .sim1
    • le code : fichier .c ou .cpp
  • travail en binôme possible

Schéma

Créer un schéma comportant les éléments suivants :

  • un µcontrôleur attiny13
  • une led rouge reliée sur la broche PA0
  • une led verte reliée sur la broche PB7
  • une led jaune reliée sur la broche PD6

Comportement

On souhaite que les 3 leds clignotent en permanence à un rythme différent :

  • la led rouge change d'état toutes les 200ms
  • la led verte change d'état toutes les 500ms
  • la led jaune change d'état toutes les 600ms

Aide

Plutôt que de faire d'avoir une boucle while(1) qui se répète toutes les 100ms on peut avoir une boucle plus rapide mais ne pas faire l'action à chaque itération :

int main()
{
  ...
  while(1)
  {
    action;
    _delay_ms(100);
  }
}
int main()
{
  uint8_t compteur=0;
  ...
  while(1)
  {
    compteur++;
    if (compteur==10)
    {
       action;
       compteur=0;
    }
    _delay_ms(10);
  }
}