[C]-Mise en forme d'un environnement sur LCD graphique
Répondre à la discussion
Affichage des résultats 1 à 22 sur 22

[C]-Mise en forme d'un environnement sur LCD graphique



Vue hybride

  1. #1
    invite3c35244f

    [C]-Mise en forme d'un environnement sur LCD graphique

    Bonjour,
    je pense que la question n'est pas très clair, alors je m'explique...
    je suis entrain de réaliser un programme en C qui permet d'acquérir (avec mon pic) des tensions provenant de différents module, et j'affiche ensuite le résultat sur mon afficheur graphique...vous comprendrez mieux avec le schéma en pièce jointe...
    Ce que je souhaite c'est pouvoir "naviguer" entre les menus par le biais de 3 BP(donc par interruptions), voir le principe en pièce jointe, ce sera plus compréhensif...

    Je pensai faire un "truc" du style:
    Code:
    if (INT0IF==1)
        {
        if(view==0)
            {
             goto V1
            }
        }
    if(INT1F==1)
        {
        if(view==0)
            {
             goto V2
            }
        }
    if(INT2F==1)
        {
        if(view==0)
            {
             goto V3
            }
        }
    Il s'agit du principe...mais, cela peut il etre correct avec des "goto"?
    Ou avez vous une autre solution.
    Je vous remercie d'avance
    Images attachées Images attachées  

  2. #2
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Mais pourquoi donc c'est une manie ici d'utiliser les IT dès qu'il y a des BP ???

    Pourquoi tu estime avoir besoin d'associer une IT à tes BP ???

    Sinon, d'un point de vu dev, ce que tu cherche s'appelle AMA "automate d'états"
    http://fr.wikipedia.org/wiki/Automate_fini
    << In a world without walls and fences, who needs Windows and Gates ? >>

  3. #3
    invite3c35244f

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Bonjour,

    je pensais que les interruptions était un choix correct car je dois réaliser des conversions analogiques numériques et afficher le résultat, et dès qu'il y a une interruption, je change la valeur de la variable et je me redirige vers un autre affichage.
    Mais après réflexion, je peut aussi faire ça sous forme de boucle:
    Code:
    do
    {
    conversion AN
    Affichage
    }
    while ( BP1==1 || BP2==1 || BP3==1);
     
    if(BP1==1)
    {
    ....
    ...
    }
    Mais avec le nombre de fenetre d'affichage (3 module de mesures et 3 fenetre différente pour chaque module) que j'ai, ça fait un bel arbre généalogique non?
    Comment me conseillez vous de faire?
    Merci encore

  4. #4
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Tu as regardé ce que je t'avais posté ? ... ça te va pas ? ( pourquoi ? )

    Citation Envoyé par Seb.26 Voir le message
    Sinon, d'un point de vu dev, ce que tu cherche s'appelle AMA "automate d'états"
    http://fr.wikipedia.org/wiki/Automate_fini
    << In a world without walls and fences, who needs Windows and Gates ? >>

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

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Sincèrement, je n'ai pas trop bien compris le principe...
    ca que je souhaite faire correspond "un peu" au premier dessin", mais j'aurais plusieurs états... et au point de vue programmation? il vaut mieux utiliser quel principe?
    Merci encore

  7. #6
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Citation Envoyé par jorg1n Voir le message
    Sincèrement, je n'ai pas trop bien compris le principe...
    Ok ...

    En fait en gros, le principe c'est d'avoir ce que l'on pourrait appeler une tache applicative.

    Au boot de ton projet, la tache va dans un état "Init" en général, ensuite une fois l'init OK, elle passe en "IDLE" ... là, elle attends des évènements qui vont déclencher des transissions d'état ...

    ça a l'air galère comme ça, mais en fait c'est ultra simple

    (pseudo-code)
    Code:
    // boucle principale
    while(1)
    {
      ...
      tache_appli();
      ...
    }
    (tache_appli.c)
    Code:
    typedef enum{
      INIT,
      IDLE,
      MENU_1,
      MENU_2
    } e_tache_appli_State;
    
    e_tache_appli_State myState = INIT;
    
    void tache_appli( void )
    {
      switch( myState )
      {
      case INIT:
        // faire l'init de ta tache
        ...
        // passer à l"état suivant
        myState = IDLE;
        break;
    
      case IDLE:
        // attendre un évènement ( BP1 ou BP2 ici )
        if (BP1)
          myState = MENU_1;
        //
        if(BP2)
          myState = MENU_2;
        break;
    
      case MENU_1:
        // afficher le menu, puis attendre le prochain évènement
        printf( "Menu_1" );
        //
        if(BP1)
          myState = IDLE;
        //
        if(BP2)
          myState = MENU_2;
        break;
    
      case MENU_2:
        // afficher le menu, puis attendre le prochain évènement
        printf( "Menu_2" );
        //
        if(BP1)
              myState = IDLE;
        break;
      }
    }
    Dans cet exemple, au boot, tu passe par l'init, ensuite tu vas en IDLE, de là si tu fait BP1, tu vas en Menu_1, et en Menu_2 si tu fais BP2 ... du Menu_1 tu peux retourner au début (IDLE) via BP1, ou aller en Menu_2 via BP2 ... et du Menu_2, tu ne pux que retourner en IDLE via BP1 ...

    << In a world without walls and fences, who needs Windows and Gates ? >>

  8. #7
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Nb: Ensuite, tu vas étoffer le principe selon tes besoins ( genre prévoir de n'exécuter du code que lors de l'arrivée ou de la sortie d'un état ... )
    << In a world without walls and fences, who needs Windows and Gates ? >>

  9. #8
    invite3c35244f

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Je vais travailler tout ça ...
    je te remercie beaucoup

  10. #9
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    de nada ...

    ( encore toi ?!! )
    << In a world without walls and fences, who needs Windows and Gates ? >>

  11. #10
    invite3c35244f

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Et oui c'est encore....
    bon je me retrouve devant un petit problème, lorsque je suis sur mon "IDLE", voila ce que je fais:
    Code:
         case IDLE:
            monitor_123 ();
            do{
              RA2=1;          //Me permet de me situer dans le programme
              DELAY_MS(250);
              RA2=0;
              DELAY_MS(250);
              }
            while((RB0==1)||(RB1==1)||(RB2==1));
            if(RB0==0)
              {
              myState = Mod_1;
              }
            if(RB1==0)
              {
              myState = Mod_2;
              }
            if(RB2==0)
              {
              myState = Mod_3;
              }
          break;
    et il reste toujours dans la boucle do()while... ma synthaxe est t'elle bonne?
    Code:
            while((RB0==1)||(RB1==1)||(RB2==1));
    car j'ai juste essayé avec while(RB0==1), et ça fonctionne...

    Merci d'avance

  12. #11
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    En principe, on ne reste pas bloqué dans la procédure de la tache appli, c'est justement l'interet ... car en parrallèle tu peux faire autre chose ...

    Utiliser les Delay(ms() n'est pas une bonne solution dans 80% des cas ... dans le tiens par exemple, une boucle cadencée par un timer serait bien plus propre et moins limitatif pour la suite ...
    ( j'avais déjà fait quelques posts là dessus, une petite recherche devrait t'y emmener )

    En fait, le concept là dessous, c'est que tu viens de te faire une tache applicative, que tu vas exécuter régulièrement ( par exemple toute les 5ms ) ... mais l'interet du truc, c'est que tu peux aussi faire une tache LCD qui te servira de drivers, une autre pour filtrer les signaux de capteurs, une autre qui dialoguera avec u PC via l'UART ... et tout communique et tourne en parallèle ...

    Mais si toi tu me pose un while(); dans la fonction, et bien tout le reste s'arrête aussi ...
    << In a world without walls and fences, who needs Windows and Gates ? >>

  13. #12
    Seb.26

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Code:
         case IDLE:
            monitor_123 ();
    /*
    BEURK !!!
            do{
              RA2=1;          //Me permet de me situer dans le programme
              DELAY_MS(250);
              RA2=0;
              DELAY_MS(250);
              }
    */
    /*
    Pourquoi faire ça ???
            while((RB0==1)||(RB1==1)||(RB2==1));
    */
            if(RB0==0)
              {
              myState = Mod_1;
              }
            if(RB1==0)
              {
              myState = Mod_2;
              }
            if(RB2==0)
              {
              myState = Mod_3;
              }
          break;
    << In a world without walls and fences, who needs Windows and Gates ? >>

  14. #13
    invite3c35244f

    Re : [C]-Mise en forme d'un environnement sur LCD graphique

    Bonjour,

    en fait ce que je voulais faire, c'est ça:
    Code:
    case IDLE:
            monitor_123 ();  //affichage de l'ensemble (graduation,...)(view0)
    
            do{
             conversionAN();   //conversion AN sur AN0
             affichresult();      //affichage du résultat sur view0
              }
            while((RB0==1)||(RB1==1)||(RB2==1));   //tant que aucun bouton n'est appuyé
    */
            if(RB0==0)
              {
              myState = Mod_1;   // pour affichage de view1
              }
            if(RB1==0)
              {
              myState = Mod_2;   // pour affichage de view2
              }
            if(RB2==0)
              {
              myState = Mod_3;   // pour affichage de view3
              }
          break;
    Voila la raison pour laquelle je veux faire un do {}while().
    Au final, je voudrai un "case" pour chaque view sur mon afficheur..
    Penses tu que ça pourrai marcher?
    merci encore

Discussions similaires

  1. mise en forme d'un signal en sortie d'un capteur inductif
    Par invitef4b2ff81 dans le forum Électronique
    Réponses: 5
    Dernier message: 02/07/2015, 15h07
  2. [LCD] info sur LCD graphique LM6300 ?
    Par invite565767eb dans le forum Électronique
    Réponses: 2
    Dernier message: 02/12/2010, 22h01
  3. [Brun] Pas d'image à la mise sur marche LCD 32PF5521D
    Par invitecda3cd26 dans le forum Dépannage
    Réponses: 5
    Dernier message: 27/09/2008, 10h02
  4. mise en forme
    Par invite3187b170 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 19/08/2004, 21h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...