Affichage sur un LCD
Répondre à la discussion
Affichage des résultats 1 à 26 sur 26

Affichage sur un LCD



  1. #1
    invite9e4f31bb

    Affichage sur un LCD


    ------

    Bonjour,

    Je voudrais tester la conduction des fils, donc j'ai fait un schéma ISIS où j'ai mis des connecteurs (fermé dans le cas où le fil est passant, ouvert si le fil est bloquant). Et je voudrais afficher sur un afficheur LCD l'état de chaque fil systématiquement (un par un, s'il est passant ou non), puis il les affiche tous à la fois sous la forme d'une liste.

    J'ai fait un programme en langage C sur MikroC pro mais j'ai un petit problème, j'ai parvenu à afficher les fils défectueux un par un, mais je n'ai pas parvenu à les afficher ensuite tous à la fois sur le même écran.

    Je vous mets ici le montage ISIS et le programme dans les attachements.

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    invite0e5af214

    Re : Affichage sur un LCD


  3. #3
    invite9e4f31bb

    Re : Affichage sur un LCD

    On travaille sur le même projet en fait, j'ai juste besoin d'un petit coup de main sur ce point s'il vous plaît.

  4. #4
    invite0e5af214

    Re : Affichage sur un LCD

    Ok admettons...

    Commence par poser une question alors, on verra ce qu'on peut faire.

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

    Re : Affichage sur un LCD

    Oui merci pour vous.

    Voilà, admettons dans ce cas qu'il y a 3 fils non passants, donc on les affiche sur l'écran un par un, ensuite on les affiche tous à la fois sous la forme d'une liste. J'ai pu afficher les fils défectueux sur l'écran un par un, mais quand je veux les afficher tous à la fois je n'y ai pas parvenu.

    Un exemple pour mieux comprendre où ce que je veux arriver, admettons que le fil4, le fil5 et le fil8 sont défectueux, donc on voit sur l'écran C1 / 04, qui disparaît après, ensuite on voit C1 / 05, qui disparaît aussi, puis on voit C1 / 08, qui disparaît également. Et à la fin (là où je suis bloqué), on les affiche tous sous la forme d'une liste :
    (ligne 1, colonne 1) : C1 / 04
    (ligne 2, colonne 1) : C1 / 05
    (ligne 3, colonne 1) : C1 / 08

  7. #6
    invite0e5af214

    Re : Affichage sur un LCD

    Ok, je comprend ce que tu veux faire.
    Et qu'est-ce qui te bloque exactement ?
    • Ca compile pas ? Et dans ce cas là envoi nous les messages d'erreur de l'outil
    • Ca fait pas ce que tu espérais ? Et dans ce cas là, ça fait quoi ??
    • Tu te demandes comment tu vas afficher l'état des 10 fils (c'est le nombre qu'il y avait sur le schéma de ton pote) sur un écran à 4 lignes ?

  8. #7
    invite9e4f31bb

    Re : Affichage sur un LCD

    Ils sont que 8 fils, et au max, je ne veux afficher que 8 erreurs, donc je me suis dis que je peux afficher 2 erreurs par ligne.

    Le truc c'est que j'ai pas pu l'écrire dans le programme, j'ai pensé à enregistrer les messages d'erreur dans une variable puis je fais un appel à la fin, ça reste une idée et je ne sais pas trop comment l'écrire.

  9. #8
    invite0e5af214

    Re : Affichage sur un LCD

    Ok, c'est un problème d'algorithme donc.

    j'ai pensé à enregistrer les messages d'erreur
    Enregistrer les messages d'erreur, bof, ca fonctionnerais bien sur, mais c'est une mauvaise idée car ca utiliserait inutilement de la mémoire du PIC, qui n'en a pas beaucoup.

    Enregistrer les numéros des fils défectueux dans une variable, ou plutôt un tableau, pour les réutiliser plus tard, là oui.

    Ca donne :

    Code:
    // Déclarer le tableau de taille 8, un élément par fil
    unsigned char defectueux[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    Dans le code existant, dans chaque if/else, il faut remplir le tableau en conséquence, donc :
    Code:
    if(PORTB.RB0)
    {
      // blablabla
    }
    else
    {
       // blablabla
       defectueux[0] = 1;
    }
    Tu auras donc à la fin de ton code existant un tableau donc chaque élement qui vaudra 1 correpond à un fil défectueux.

    Ensuite tu devras parccourir ton tableau pour savoir quelles lignes afficher.

  10. #9
    invite9e4f31bb

    Re : Affichage sur un LCD

    Votre solution est parfaite, sauf qu'en réalité, chaque fil aura un nom différent de l'autre (sans numérotation), donc il ne faut pas enregistrer les numéros des fils défectueux dans un tableau, mais plutôt leurs noms, n'est ce pas ?

    J'ai déclaré ça au début :
    unsigned char *defectueux[8]={"filS25","filD32","filD45"," filF22","filJ45","filT54","fil U76","filR45"};
    Et le problème de l'algorithme persiste encore, avez-vous une idée s'il vous plaît ?

  11. #10
    invite9e4f31bb

    Re : Affichage sur un LCD

    Désolé pour le double poste, mais je n'ai pas trouvé le bouton Edit.

    Juste pour dire que j'ai pensé à déclarer un autre tableau de taille 8, mais qu'il sera vide, et à chaque fois qu'on détecte un fil défectueux et que l'on affiche sur l'écran, le nom de fil sera enregistré dans le tableau vide pour qu'il sera utilisé à la fin de l'exécution, ça donne :

    unsigned char *defectueux[8]={"filS25","filD32","filD45" ," filF22","filJ45","filT54","fil U76","filR45"};
    unsigned char *affiche[8];
    Le problème de l'algorithme demeure malheureusement encore pour moi.

  12. #11
    invite0e5af214

    Re : Affichage sur un LCD

    sauf qu'en réalité, chaque fil aura un nom différent de l'autre
    Oui je m'en doute bien, et le raisonnement fonctionne toujours, sauf qu'en effet tu dois avoir ton tableau de noms, en plus du tableau des index de fils defectueux :

    Code:
    unsigned char *defectueuxNames[8]={"filS25","filD32","filD45"," filF22","filJ45","filT54","fil U76","filR45"};
    unsigned char defectueux[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    tu remplis le tableau defectueux comme on a vu avant.
    Et à la fin tu fais :

    Code:
    unsigned char ligne = 0;
    unsigned char colonne = 0;
    ...
    for(i=0 ; i<8 ; i++)
    {
    
        if(defectueux[i])
       {
          ECRIRE_LCD(ligne, colonne, defectueuxNames[i]);
       }
    
       // Ca c'est pour ecrire au bon endroit sur l'ecran
       ligne = ligne + 1;
       if(ligne == 4)
       {
          ligne = 0;
          colonne = 9;   // J'ai mis 9 au hasard, tu met ce que tu veux hein ;-)
       }
    }
    EDIT : Ah je vois que tu as eu la même idée
    Courage tu y es presque !!!

  13. #12
    invite9e4f31bb

    Re : Affichage sur un LCD

    Oui merci beaucoup, mais j'y ai pas encore arrivé, cela n'affiche pas ce que je veux avoir.

    Je mets ici le programme complet que vous voyez de près s'il vous plaît ?

  14. #13
    invite0e5af214

    Re : Affichage sur un LCD

    Oui vas-y post ton code

  15. #14
    invite9e4f31bb

    Re : Affichage sur un LCD

    C'est un peu long, mais clair (enfin j'espère ^^)


    int i;
    unsigned char ligne = 0;
    unsigned char colonne = 0;
    unsigned char *defectueuxNames[8]={"filS25","filD32","filD45"," filF22","filJ45",
    "filT54","filU76","filR45" };
    unsigned char defectueux[8] = {0, 0, 0, 0, 0, 0, 0, 0};

    sbit LCD_RS at RD4_bit;
    sbit LCD_EN at RD5_bit;
    sbit LCD_D4 at RD0_bit;
    sbit LCD_D5 at RD1_bit;
    sbit LCD_D6 at RD2_bit;
    sbit LCD_D7 at RD3_bit;

    sbit LCD_RS_Direction at TRISD4_bit;
    sbit LCD_EN_Direction at TRISD5_bit;
    sbit LCD_D4_Direction at TRISD0_bit;
    sbit LCD_D5_Direction at TRISD1_bit;
    sbit LCD_D6_Direction at TRISD2_bit;
    sbit LCD_D7_Direction at TRISD3_bit;

    void main() {

    TRISB=0xFF;
    Lcd_Init();
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Cmd(_LCD_CURSOR_OFF);
    Lcd_Out(2, 4, "BEGIN TESTING");
    Lcd_Out(3, 5, "***********");
    delay_ms(1200) ;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(1100);

    if (PORTB.F0==0)
    {
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out(2, 6, " filS25 ");
    delay_ms(1000);
    defectueux[0] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F1==0)
    {
    Lcd_Out(2, 6, " filD32 ");
    delay_ms(1000) ;
    defectueux[1] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F2==0)
    {
    Lcd_Out(2, 6, " filD45 ");
    delay_ms(1000) ;
    defectueux[2] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F3==0)
    {
    Lcd_Out(2, 6, " filF22 ");
    delay_ms(1000) ;
    defectueux[3] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F4==0)
    {
    Lcd_Out(2, 6, " filJ45 ");
    delay_ms(1000) ;
    defectueux[4] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F5==0)
    {
    Lcd_Out(2, 6, " filT54 ");
    delay_ms(1000) ;
    defectueux[5] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F6==0)
    {
    Lcd_Out(2, 6, " filU76 ");
    delay_ms(1000) ;
    defectueux[6] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }


    if (PORTB.F7==0)
    {
    Lcd_Out(2, 6, " filR45 ");
    delay_ms(1000) ;
    defectueux[7] = 1;
    Lcd_Cmd(_LCD_CLEAR);
    delay_ms(300) ;
    }
    delay_ms(300) ;


    for(i=0 ; i<8 ; i++)
    {
    if(defectueux[i])
    {
    Lcd_Out(ligne, colonne, defectueuxNames[i]);
    }

    ligne = ligne + 1;
    if(ligne == 4)
    {
    ligne = 0;
    colonne = 10;
    }
    }
    }


  16. #15
    invite9e4f31bb

    Re : Affichage sur un LCD

    P.S : J'ai éliminé les ELSE, je ne travaille désormais qu'avec les IF parce que je ne cherche qu'à afficher les fils défectueux.

  17. #16
    invite0e5af214

    Re : Affichage sur un LCD

    Ok, je reconnais le code que je t'ai écrit

    Ca affiche quoi alors ?

  18. #17
    invite9e4f31bb

    Re : Affichage sur un LCD

    Oui ^^

    ça n'affiche pas ce que je veux avoir, si par exemple j'ouvre tous les connecteurs, je ne vois sur l'écran que 3 noms de fils à droite de l'écran, or normalement je dois voir tous les noms des fils sur l'écran. Je vous passe le fichier .HEX si voudrez voir de près.

    ça n'affiche que sur la première, la deuxième et la troisième ligne à droite seulement.

  19. #18
    invite0e5af214

    Re : Affichage sur un LCD

    A droite de l'écran ???
    Etrange, regarde au niveau de la config de ton écran, ca doit pas être grand chose.

    Tu as compris ce qu'il faisait le code que je t'ai envoyé avant de le recopier ??

  20. #19
    invite9e4f31bb

    Re : Affichage sur un LCD

    Je n'ai rien touché aux configuration de l'écran. Oui je l'ai bien regardé mais je ne l'ai pas tout bien assimilé il faut dire.

  21. #20
    invite0e5af214

    Re : Affichage sur un LCD

    Et si tu l'ouvres que 4 interrupteurs ? Les noms des fils sont corrects et alignés à gauche de l'écran ?

    Et si tu ouvres 5 interrupteurs ? Tu as la ligne du haut alignée à droite, et les 3 autres alignées à gauche ???

  22. #21
    invite9e4f31bb

    Re : Affichage sur un LCD

    Je vous ai fait des screens pour 3 cas :

    Les 4 premiers ouverts. (Rien ne s'affiche)
    Les 5 premiers ouverts. (Seul le fil5 défectueux s'affiche convenablement)
    Tous ouverts. (Le fil6 (ligne1), le fil7 (ligne2) et le fil8 (ligne3) s'affichent à droite de l'écran, rien de plus)

    ça donne des résultats inattendus.
    Images attachées Images attachées

  23. #22
    invite0e5af214

    Re : Affichage sur un LCD

    Ah....

    Essais de remplacer

    ligne = 0;
    par
    ligne = 1;

    Au debut (à la déclaration) ET à la fin du code (dans la boucle for)

  24. #23
    invite9e4f31bb

    Re : Affichage sur un LCD

    J'y ai pensé, j'ai même déplacé la ligne (ligne = ligne + 1;) pour voir et toujours ça donne des affichage inattendus.

  25. #24
    invite0e5af214

    Re : Affichage sur un LCD

    Non pardon, c'est colonne que tu dois remplacer par 1 !

  26. #25
    invite9e4f31bb

    Re : Affichage sur un LCD

    J'ai fait comme vous me disiez et ça donne toujours des résultats improbables, ça vient de l'ISIS ? Parce que j'ai bien suivi les instructions du programme et normalement ça devrait fonctionner parfaitement.

  27. #26
    invitefaaca50b

    Re : Affichage sur un LCD

    juste en passant, ISIS est une daube qui fait ce qu'il a envie, et on a le risque que
    - des programmes qui tournent en reel deconneront sur ISIS
    - des programmes qui tournent sur ISIS ne tourneront pas en reel...

    ISIS n'est pas omniscient, juste daubesque...

Discussions similaires

  1. Affichage sur LCD en 4bits
    Par invite07bc4d05 dans le forum Électronique
    Réponses: 3
    Dernier message: 20/07/2010, 17h39
  2. affichage sur LCD 2*16
    Par inviteb815bb1a dans le forum Électronique
    Réponses: 2
    Dernier message: 09/04/2010, 21h43
  3. Affichage de l'année sur un lcd ?
    Par invite21b84cdb dans le forum Électronique
    Réponses: 2
    Dernier message: 30/03/2010, 17h55
  4. Affichage temperature sur LCD?
    Par invitee25bb931 dans le forum Électronique
    Réponses: 10
    Dernier message: 31/03/2008, 18h38
  5. affichage clignotant sur LCD
    Par invite5396f733 dans le forum Électronique
    Réponses: 11
    Dernier message: 21/09/2007, 10h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...