incomprehension de l'exercices microcontroleur
Répondre à la discussion
Affichage des résultats 1 à 21 sur 21

incomprehension de l'exercices microcontroleur



  1. #1
    sandaff

    incomprehension de l'exercices microcontroleur


    ------

    Bonjour!
    je ne comprends pas comment on a obtenus les chiffres telque 011011011011 dans l'exercice ci_dessous:
    Code HTML:
    Cadre lumineux d'une enseigne
    
    Une enseigne publicitaire est entourée d'un cadre réalisé avec des segments lumineux, selon le croquis suivant : 
    
    
    
    On cherche à donner une impression de rotation, en allumant successivement les groupes de segments suivants : 
    - S0, S1, S3, S4, S6, S7, etc (011011011011) 
    - S1, S2, S4, S5, S7, S8, etc (110110110110) 
    - S0, S2, S3, S5, S7, S8, etc (101101101101) 
    On dispose d'une procédure AfficheCadre (unsigned int segments) qui affiche les segments S0 à S11 selon les bits 0 à 11 du paramètre "segments" et d'une procédure AttenteMs (int ms).
    
    Ecrivez la boucle principale du programme qui fait "tourner" le cadre dix fois dans un sens, puis dix fois dans l'autre sens.
    
    Réponse : Les motifs successible à envoyer ont été placés dans un tableau. Un index parcourt le tableau dans un sens ou dans l'autre, selon la variable "sens". Les changements de directions se font donc en repartant de la position courante, pour un effet visuel optimal. 
    
    #define MaxCycle 10 // nombre de mouvements dans le cycle 
    #define Periode 200 // attente ente chaque changement 
    
    #define LgTable 3 // nombre de motifs dans la table 
    unsigned int tableMotifs[] = {0b011011011011, 0b110110110110, 0b101101101101}; 
    unsigned char idx=0; // index dans la table 
    unsigned char sens=1; // sens de balayage de la table 
    unsigned char cycle; // compteur des répétitions 
    
    void loop() { 
      for (cycle=0; cycle<(MaxCycle*LgTable); cycle++) { 
        if (sens) { 
          if (idx == (LgTable-1)) { idx=0;} else { idx++;} 
        } else { 
          if (idx == 0) { idx=LgTable-1; } else { idx--;} 
        } 
        AfficheCadre (tableMotifs[idx]); 
        AttenteMs (Periode); 
      } 
      sens = !sens; 
    }
    
    

    -----

  2. #2
    Pierrre

    Re : incomprehension de l'exercices microcontroleur

    bonjour
    les chiffres representent (de gauche a droite) l'etat des segments S0 à S11 : 0 le segment est eteint, 1 il est allume

    A+

  3. #3
    hary

    Re : incomprehension de l'exercices microcontroleur

    Exercice de l'EPFL !

    C'est le concepteur de l'exercice qui a simplement décidé d'allumer 2 leds et d'en laisser 1 éteinte et ainsi de suite, pour créer son motif.
    Ensuite, pour les motifs suivant, il le fait "tourner" de 1 led en 1 led.
    La suite de 1 représente les leds allumées et le 0 celles éteinte pour chaque motif possible et souhaité.

    Cela répond il à ta question ?

  4. #4
    Seb.26

    Re : incomprehension de l'exercices microcontroleur

    << my 2 cents ... >>

    Code:
    unsigned int tableMotifs[] = {0b011011011011, 0b110110110110, 0b101101101101}; 
    
    unsigned char idx; // index dans la table 
    unsigned char sens; // sens de balayage de la table 
    unsigned char cycle; // compteur des répétitions 
    
    void loop()
    { 
      sens = 0x01; // +1
      subloop();
    
      sens = 0xFF; // -1
      subloop();
    }
    
    void subloop()
    {
      for( cycle=0 ; cycle<10 ; cycle++ )
      {
        do
        {
          idx = (idx+sens) & 0x03;
        }
        while( idx == 0x03 );
    
        AfficheCadre(tableMotifs[idx]); 
        AttenteMs(Periode); 
      } 
    }
    pour une solution un peu plus originale ...

    PS: la solution proposée en post #1 ne répond pas à la demande de l’énoncé "Ecrivez la boucle principale du programme qui fait tourner le cadre dix fois dans un sens, puis dix fois dans l'autre sens."
    Dernière modification par Seb.26 ; 19/06/2014 à 09h29.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  5. A voir en vidéo sur Futura
  6. #5
    hary

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par Seb.26 Voir le message
    << my 2 cents ... >>

    Code:
    unsigned int tableMotifs[] = {0b011011011011, 0b110110110110, 0b101101101101}; 
    
    unsigned char idx; // index dans la table 
    unsigned char sens; // sens de balayage de la table 
    unsigned char cycle; // compteur des répétitions 
    
    void loop()
    { 
      sens = 0x01; // +1
      subloop();
    
      sens = 0xFF; // -1
      subloop();
    }
    
    void subloop()
    {
      for( cycle=0 ; cycle<10 ; cycle++ )
      {
        do
        {
          idx = (idx+sens) & 0x03;
        }
        while( idx == 0x03 );
    
        AfficheCadre(tableMotifs[idx]); 
        AttenteMs(Periode); 
      } 
    }
    pour une solution un peu plus originale ...

    PS: la solution proposée en post #1 ne répond pas à la demande de l’énoncé "Ecrivez la boucle principale du programme qui fait tourner le cadre dix fois dans un sens, puis dix fois dans l'autre sens."
    C'est du C pure ? Je demande à cause du "do". C'est vrai que c'est un mot réservé au C, mais je ne l'ai encore jamais vu dans une boucle. Les "{}" ne suffisent ils pas à dire "do" ?

    Je ne comprend pas cette partie :
    Que fait "& 0x03;"

    Et à quoi correspond " while( idx == 0x03 );"

  7. #6
    PA5CAL

    Re : incomprehension de l'exercices microcontroleur

    Bonjour
    Citation Envoyé par hary Voir le message
    C'est du C pure ? Je demande à cause du "do". C'est vrai que c'est un mot réservé au C, mais je ne l'ai encore jamais vu dans une boucle. Les "{}" ne suffisent ils pas à dire "do" ?
    L'expression complète, c'est « do ... while ... » (boucle). Et c'est une expression de base du C.

    Citation Envoyé par hary Voir le message
    Je ne comprend pas cette partie :
    Que fait "& 0x03;"
    On garde les deux bits de poids faible du résultat en annulant les six bits de poids plus fort.

    L'opérateur « & » réalise une opération ET bit à bit, et 0x03 représente 00000011 en binaire.

    Citation Envoyé par hary Voir le message
    Et à quoi correspond " while( idx == 0x03 );"
    Pou le « while », voir ma première remarque.

    « == » correspond au test d'égalité. Si le test est positif (si idx est égal à 3) alors on continue à reboucler (on reprend après le « do »).



    Je pense qu'il est urgent de revoir (ou de commencer à apprendre sérieusement) les bases du C.
    Dernière modification par PA5CAL ; 19/06/2014 à 10h12.

  8. #7
    hary

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par PA5CAL Voir le message

    Je pense qu'il est urgent de revoir (ou de commencer à apprendre sérieusement) les bases du C.
    C'est ce que je suis en train de faire !
    Et je n'avais pas vu le do while !

  9. #8
    hary

    Re : incomprehension de l'exercices microcontroleur

    Pour comprendre ce qui se passe. Sans changer le fonctionnement.

    Puis je remplacer :
    Code:
    void loop()
    { 
      sens = 0x01; // +1
      subloop();
    
      sens = 0xFF; // -1
      subloop();
    }
    par

    Code:
    void loop()
    { 
      sens = 0x01; // +1
      subloop();
    
      sens = 0x03; // -1
      subloop();
    }
    Dernière modification par hary ; 19/06/2014 à 10h36.

  10. #9
    Seb.26

    Re : incomprehension de l'exercices microcontroleur

    Essaye de dérouler ce code dans ta tête et de voir comment ça marche (déjà : est-ce que ça marche ???)
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  11. #10
    PA5CAL

    Re : incomprehension de l'exercices microcontroleur

    Oui. Le fonctionnement est équivalent.

    Sur 2 bits, -1 s'écrit 3. Autrement dit, avancer de 3 positions modulo 4 (=22) revient à reculer de 1 position.
    Dernière modification par PA5CAL ; 19/06/2014 à 11h07.

  12. #11
    hary

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par Seb.26 Voir le message
    Essaye de dérouler ce code dans ta tête et de voir comment ça marche (déjà : est-ce que ça marche ???)
    C'est bien ce que j'essaie de faire avec grande difficulté. Mais je me perds vite !

    PA5CAL, j'ai l'impression que tu parles de subloop() alors que ma question, pour le moment, concernait loop()

  13. #12
    sandaff

    Re : incomprehension de l'exercices microcontroleur

    je suis plus qu'heureux d'etre sur ce site

  14. #13
    PA5CAL

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par hary Voir le message
    PA5CAL, j'ai l'impression que tu parles de subloop() alors que ma question, pour le moment, concernait loop()
    Je parle bien de loop(), mais loop() appelle subloop().

    Les six bits de poids fort de sens ne sont pas utilisés, et peuvent donc être fixés à 1 (0xFF) ou à 0 (0x03) sans que cela change le fonctionnement du programme.
    Dernière modification par PA5CAL ; 19/06/2014 à 15h25.

  15. #14
    hary

    Re : incomprehension de l'exercices microcontroleur

    J'ai l'impression que si on avait 4 index (ou 5 ou 6 ..) au tableaux au lieu de 3, ça poserait problème pour coder dans le même style.

  16. #15
    PA5CAL

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par hary Voir le message
    J'ai l'impression que si on avait 4 index (ou 5 ou 6 ..) au tableaux au lieu de 3, ça poserait problème pour coder dans le même style.
    Exact. Une programmation moins spécifique consiste à tester si l'on a atteint une extrémité du tableau pour repartir à l'autre.

  17. #16
    sandaff

    Re : incomprehension de l'exercices microcontroleur

    quel est la correspondance des s1,s2,....... par rapport aux leds et aux bits?

  18. #17
    PA5CAL

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par sandaff Voir le message
    quel est la correspondance des s1,s2,....... par rapport aux leds et aux bits?
    Ça, c'est le hardware qui le détermine.

  19. #18
    sandaff

    Re : incomprehension de l'exercices microcontroleur

    je n'ai pas bien compris, moi je pensais que si on a S1,S0,S3,S5 et on a les bits 1010 ce qui veux dire S1 S3 sont allumé et S0,S5 sont eteint.
    en meme temps ils vont correspondre chacun à un led.

  20. #19
    hary

    Re : incomprehension de l'exercices microcontroleur

    Le bit (0 ou 1) qui commande la première Led est situé à droite !

  21. #20
    PA5CAL

    Re : incomprehension de l'exercices microcontroleur

    Citation Envoyé par sandaff Voir le message
    je n'ai pas bien compris, moi je pensais que si on a S1,S0,S3,S5 et on a les bits 1010 ce qui veux dire S1 S3 sont allumé et S0,S5 sont eteint.
    en meme temps ils vont correspondre chacun à un led.
    Ça peut être ça, ou pas, en fonction de ce qu'on veut obtenir.


    On pourrait par exemple numéroter les segments physiquement contigus de la même manière que les bits, soit S0,S1,S2,....S11 pour les bits 0 à 11, ou bien pour les bits 11 à 0.

    Mais rien n'empêche non plus un 0 de représenter un segment allumé et un 1 un segment éteint.

    Quant aux segments, ils peuvent aussi être constitués de plusieurs leds qui s'allument et s'éteignent en même temps.


    Bref, le programme ne fait pas tout. Le schéma électronique et le montage physique des leds sont aussi importants dans la conception du projet.

    Par exemple, avec ce même programme, on pourrait tout aussi bien animer une enseigne lumineuse constituée de 12 lettres multicolores, qu'une surface en forme de croix verte de type enseigne de pharmacie.

  22. #21
    sandaff

    Re : incomprehension de l'exercices microcontroleur

    merci c'es t claire maintenant

Discussions similaires

  1. Choix d'un microcontroleur / carte à microcontroleur
    Par bisou10 dans le forum Électronique
    Réponses: 29
    Dernier message: 25/10/2013, 14h33
  2. exercices avec le microcontroleur C68HC11
    Par invitee5428a36 dans le forum Électronique
    Réponses: 0
    Dernier message: 28/12/2009, 08h37
  3. Incompréhension
    Par invite320123c4 dans le forum Physique
    Réponses: 2
    Dernier message: 03/01/2009, 18h32
  4. incompréhension
    Par invite19dc08a5 dans le forum Chimie
    Réponses: 1
    Dernier message: 14/12/2008, 12h52
  5. incompréhension
    Par invite8cda7215 dans le forum Orientation après le BAC
    Réponses: 0
    Dernier message: 30/04/2008, 16h42
Découvrez nos comparatifs produits sur l'informatique et les technologies.