affchage d'un nombre sur LCD via PIC 16F877A
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

affchage d'un nombre sur LCD via PIC 16F877A



  1. #1
    narakphysics

    affchage d'un nombre sur LCD via PIC 16F877A


    ------

    Bonjour à tous
    j'aimerai afficher un nombre sur mon LCD en utilisant des fonctions prédéfinies de mikroC.
    voici le code:
    Code:
    float y=166,66666
    Lcd_Cmd(_LCD_CLEAR);
    Lcd_Out(1, 1, (char *)&y);
    lorsque j'exécute mon code il m'affiche des caractères aléatoires et bizarres.
    quelqu'un peut m'aider??
    merci d'avance

    -----

  2. #2
    umfred

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    Si je ne me trompe pas, avec ce code, tu lui demandes d'afficher ce qu'il y a dans l'adresse mémoire pointée par y (ce qui peut expliquer tes caractères bizarres et aléatoires. Essaie en supprimant le & (j'essaierai même sans le cast (char*) ) .
    Si ça ne marche pas, il faudra convertir ton nombre en autant de caractère nécessaire pour l'afficher.
    Nota: je suppose que l'oubli du point-virgule en fin de la 1ere ligne est une erreur de frappe

    Edit: utilise la fonction FloatToStr(y) pour convertir ton float en string et l'afficher sinon (j'ai vu ça en creusant un peu la doc de mikro c)
    Dernière modification par umfred ; 08/04/2012 à 00h28.

  3. #3
    narakphysics

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    merci pour votre réponse
    désolé j'ai oublié le ";"
    si je tape cette instruction:
    Code:
    Lcd_Out(1, 1,y);
    il m'affiche l'erreur suivant: illegal typecast 'can not convert to pointer'

  4. #4
    umfred

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    Citation Envoyé par umfred Voir le message
    Edit: utilise la fonction FloatToStr(y) pour convertir ton float en string et l'afficher sinon (j'ai vu ça en creusant un peu la doc de mikro c)
    j'ai été un peu vite avec cet edit; il faudrait donc faire:
    Code:
    float y=166,66666;
    char txt[15]; // le résultat de la fonction FloatToStr doit être dans une chaine de 14 caractères au moins (cf page 586 du manuel Mikro C)
    Lcd_Cmd(_LCD_CLEAR);
    FloatToStr(y,txt);
    Lcd_Out(1, 1, txt);
    Nota: on peut rajouter une gestion d'erreur en cas de problème de conversion de la fonction FloatToStr

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

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    merci beaucoup, elle marche très bien
    je désire savoir comment gérer les erreurs??
    autre question: pour récupérer des valeurs à partir du clavier. j'ai écrit une fonction qui permet de récupérer juste un seule caractère ensuite si j'aurai besoin de X caractères alors je l’appellerai X fois. ce qui n'est pas pratique. est ce qu'il y a une solution.??
    merci infiniment d'avance

  7. #6
    umfred

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    Citation Envoyé par achrafkaran Voir le message
    je désire savoir comment gérer les erreurs??
    regarde la page 586 de la doc de Mikro C (voir le lien dans le code de mon post précédent)
    Tu as un tableau qui t'indique les valeurs retournées en cas de problèmes (par exemple -3 si la valeur entrée est un NaN (not a Number) mais je ne pense pas que ce soit franchement nécessaire à faire.

    autre question: pour récupérer des valeurs à partir du clavier. j'ai écrit une fonction qui permet de récupérer juste un seule caractère ensuite si j'aurai besoin de X caractères alors je l’appellerai X fois. ce qui n'est pas pratique. est ce qu'il y a une solution.??
    merci infiniment d'avance
    en page 346 de cette même doc, tu as des fonctions pour la lecture d'un clavier 4x4 (le schéma est montré à la page 350).
    pour ton problème de X caractères, il suffit d'avoir une boucle qui se fait X fois et tu stockes tes caractères dans un tableau. Quelque chose du genre:
    Code:
    int x=5;
    chr t[10];
    for(i = 0;i<x;i++)
    {
    t[i]=getch();
    }
    et éventuellement en faire une fonction avec en paramètres le nombre de caractère à récupérer

  8. #7
    narakphysics

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    merci encore une fois
    la fonction FloattoStr retourne 0 ce qui signifie que la conversion est correcte
    mais il reste encore un probléme: lorsque je copie mon programme et je l’exécute sur DevC++ il me donne d'autre valeurs!!
    voici un extrait de mon code sur mikroC:
    Code:
    FloatToStr(y,txt);
         for (  j=0; j<15 ; j++)
         {
    
            Lcd_Chr(2, j+1, txt[j]);
    }
    et sur devc++
    Code:
      printf("résultat %f \n",y);

  9. #8
    umfred

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    c'est-à-dire ? quelles différences as-tu? donne un exemple

  10. #9
    narakphysics

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    les deux résultats sont de types floates mais ils sont différentes. exemple:
    Code:
    ISIS donne : Azimut:147.22
    alors que devc++: 291.84

  11. #10
    umfred

    Re : affchage d'un nombre sur LCD via PIC 16F877A

    est-tu sûr que ton y vaut la même chose dans les 2 cas ?
    (force éventuellement la valeur de y avant les opérations, si tu ne le fais pas déjà)

Discussions similaires

  1. Fréquencemètre à base d'un PIC 16F877A
    Par inviteec0556c7 dans le forum Électronique
    Réponses: 1
    Dernier message: 28/06/2009, 18h24
  2. Ecriture/Lecture sur PIC 16F877A
    Par flyingrock dans le forum Électronique
    Réponses: 9
    Dernier message: 24/04/2009, 18h26
  3. Problèmes pour initialiser un LCD avec PIC 16f877A?
    Par invite953f8104 dans le forum Électronique
    Réponses: 7
    Dernier message: 01/07/2008, 13h03
  4. PIC 16F877A sur 3V ?
    Par invite2dc206d9 dans le forum Électronique
    Réponses: 17
    Dernier message: 17/02/2008, 20h49
  5. LCD 16*2 avec pic 16f877a
    Par invite3df5f522 dans le forum Électronique
    Réponses: 3
    Dernier message: 05/02/2008, 10h57
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...