lcd fonctionne // printf ne fonctionne pas
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

lcd fonctionne // printf ne fonctionne pas



  1. #1
    invite60546543

    Question lcd fonctionne // printf ne fonctionne pas


    ------

    Bonjour

    J'ai réalisé un montage à base de pic 18F4550 avec un lcd (classique 4*16 caracteres)..

    Le LCD fonctionne correctement..j'affiche ..j'efface etc..

    sauf le printf qui ne marche pas (j'ai pourtant bien inclus stdio.h)

    d'où cela peut -il venir?


    Je vous remercie

    -----

  2. #2
    Moezzz

    Re : lcd fonctionne // printf ne fonctionne pas

    bonsoir
    peut tu donner plus de détail sur le programme et le compilateur que tu utilise

  3. #3
    invite60546543

    Re : lcd fonctionne // printf ne fonctionne pas

    Bonjour

    compilateur MCC18 + MPLAB + PROTEUS

    PIC 18F4550 4MHZ

    Actuellement j'utilise putsXLCD pour afficher du texte et ftoa pour convertir les nombres en chaine.(jusque là c'est ok)

    printf:

    jai bien précisé le flux de sortie

    stdout=_H_USER

    mais rien n'y fait...j'ai même essayé fprintf(_H_USER,"message") : ne marche pas non plus

  4. #4
    sdec25

    Re : lcd fonctionne // printf ne fonctionne pas

    Bonjour,
    _H_USER est la sortie utilisateur. Par défaut l'écriture ne fait rien, il faut définir une fonction _user_putc qui écrit un caractère (dans ton cas sur le LCD).
    cf. le code de la fonction putc (qui est appelée par printf), que tu as dans putc.c :
    Code:
    int
    putc (char c, FILE * f)
    {
      /* if the handle > 0 then it's a pointer to a string buffer address.
         specifically, a pointer to a pointer referencing the next available
         byte in the buffer, to which the character will be stored. */
      if ((int) f >= 0)
        return (unsigned char) (*(*(char **) f)++ = c);
    
      if ((signed char) f == (signed char) _H_USART)
        {
          /* the invocation of the USART function is direct, as it's our
             default value and we want it to work without needing any
             direct initialization from the user */
          return _usart_putc (c);
        }
      else
        {
          /* the invocation of the user function is direct, not via a
             function pointer. We just put an empty definition of the
             function in the library and if the user specifies their own
             version it will be found first and the library definition will 
             be ignored. We do it this way because it's generally better to 
             spend 2 bytes of program memory for the RETURN instruction of
             the empty function than three bytes of data memory for the
             function pointer. */
          return _user_putc (c);
        }
    }

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

    Re : lcd fonctionne // printf ne fonctionne pas

    bonjour

    je ne comprends pas très bien votre réponse..

    de plus je me suis rendu compte que

    sprintf
    fprintf
    printf etc ne marche pas...


    normalement ces fonctions sont "de bases" dans mcc18..

    dois-je le réinstaller...?

  7. #6
    sdec25

    Re : lcd fonctionne // printf ne fonctionne pas

    Bonjour,
    je ne comprends pas très bien votre réponse..
    Je peux difficilement être plus clair. Qu'est-ce que tu n'as pas compris dans le fait de redéfinir la fonction _user_putc ?

    de plus je me suis rendu compte que

    sprintf
    fprintf
    printf etc ne marche pas...
    sprintf qui ne fonctionne pas, ça m'étonne. Peux-tu montrer ton code et le résultat obtenu ?
    Pour printf c'est normal.
    Sur un PC avec un OS, printf écrit sur la sortie standard (que le programme appelant peut récupérer pour afficher dans la console). Sur PIC il n'y a rien de tout cela => printf ne fait rien du tout, sauf si on a redéfini la sortie standard.

  8. #7
    invite60546543

    Re : lcd fonctionne // printf ne fonctionne pas

    oui mais en installant mcc18 printf et les autres ne sont pas installées par défault ?

    dans mon compilateur (dans les sources ) je trouve pourtant:

    Code:
    /* printf() is a wrapper function which calls vfprintf() with stdout as the 
       destination output stream. EOF is returned on error, else the number 
       of characters output. */
    int
    printf (const rom char *fmt, ...)
    {
      va_list ap;
      int n;
      va_start (ap, fmt);
      n = vfprintf (stdout, fmt, ap);
      va_end (ap);
      return n;
    }
    et pareil pour vprintf (avec un code assez long)

  9. #8
    sdec25

    Re : lcd fonctionne // printf ne fonctionne pas

    Je ne vois pas où tu veux en venir.
    oui mais en installant mcc18 printf et les autres ne sont pas installées par défault ?
    Si, et le fait que ton programme compile le prouve.

    Le problème n'est pas dans la fonction printf. Cette fonction ne fait rien par défaut, il faut juste que tu lui dises comment afficher un caractère sur l'écran LCD. cf. mon message #4

  10. #9
    invite60546543

    Re : lcd fonctionne // printf ne fonctionne pas

    Code:
    il faut juste que tu lui dises comment afficher un caractère sur l'écran LCD. cf. mon message #4
    oui mais comment ?
    je dois rajouter du code dans cette fonction ?

  11. #10
    sdec25

    Re : lcd fonctionne // printf ne fonctionne pas

    Non tout est fait pour ne pas avoir à modifier les fonctions existantes. Il faut juste créer une fonction _user_putc
    Citation Envoyé par sdec25 Voir le message
    par défaut l'écriture ne fait rien, il faut définir une fonction _user_putc qui écrit un caractère (dans ton cas sur le lcd).
    Cf. Le code de la fonction putc

  12. #11
    invite60546543

    Re : lcd fonctionne // printf ne fonctionne pas

    int _user_putc (char c)
    {
    putcXLCD(c);
    }




    comme cela ?

  13. #12
    invite60546543

    Re : lcd fonctionne // printf ne fonctionne pas

    avec en +

    Code:
    return (c);

  14. #13
    sdec25

    Re : lcd fonctionne // printf ne fonctionne pas

    Oui comme cela.
    Si tu mets un point d'arrêt dans cette fonction tu verras qu'elle est appelée par putc.

Discussions similaires

  1. Grand Servomoteur fonctionne pas, alors que petit fonctionne
    Par victorjung dans le forum Électronique
    Réponses: 3
    Dernier message: 04/02/2011, 21h45
  2. Ecran lcd pas de vidéo mais osd fonctionne
    Par ebreizhoo dans le forum Matériel - Hardware
    Réponses: 0
    Dernier message: 07/07/2010, 13h22
  3. [Brun] Moniteur LCD fonctionne 3" puis s'éteint
    Par sunny374 dans le forum Dépannage
    Réponses: 2
    Dernier message: 19/11/2009, 20h57
  4. Comment fonctionne un afficheur LCD ( trame)
    Par invite42dae262 dans le forum Électronique
    Réponses: 6
    Dernier message: 09/03/2007, 21h52
  5. mes javascript:popupimage ne fonctionne pas sur mon site web mais fonctionne en local
    Par invite4ff499e4 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 28/01/2006, 17h31
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...