Fonction " sprintf " et LCD sur ATMEL
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Fonction " sprintf " et LCD sur ATMEL



  1. #1
    Poseidon88

    Fonction " sprintf " et LCD sur ATMEL


    ------

    Bonsoir,

    J'essaye de comprendre la fonction " sprintf ".

    Si je veux afficher 148 sur le LCD, dans mon programme de base, j'affiche d'abord le "1", ensuite le "4" et enfin le "8" et du coup il faut à chaque fois que je donne les coordonnées du chiffre, et que je l'affiche ca fais 6 lignes. Sachant que j'ai 4 valeurs à afficher en tout...

    J'ai vu qu'il existe " sprintf " mais je bloque.

    En effet, il faut déclarer un tableau. OK : int buffer [3] ( pour une valeur de 3 chiffres telle que 148 )

    mais ensuite ... ca amrche comment ? apparemment :

    sprintf (buffer,X,Y) X et Y étant les coordonnées.

    Mais mon compilo me répond :

    Error: function argument #1 of type 'int [3]' is incompatible with required parameter of type 'unsigned char *'

    Sur le net on trouve pas grand chose ...

    Merci

    -----

  2. #2
    Poseidon88

    Re : Fonction " sprintf " et LCD sur ATMEL

    Le code sous CVAVR :

    Code:
     #include <mega8535.h>
    #include <delay.h>
    #include <stdio.h> // sprintf
    
    // Alphanumeric LCD Module functions
    #asm
       .equ __lcd_port=0x15 ;PORTC
    #endasm
    #include <lcd.h>
    
    int Buffer [3];
    int val;
    
    
    
    void ConvAscii (void)
    {
    	Buffer[0] = 0x30 ; 
    	Buffer[1] = 0x30 ; 
    	Buffer[2] = 0x30 ;
         
    	while (val>100) 
    		{
    		Buffer[0]++;
    		val = val -100;
    		}
    	while (val>10) 
    		{
    		Buffer[1]++;
    		val = val -10;
    		}
    	Buffer[2]= val;
    };
    
    lcd_init(20);
    
    val = 148;
    ConvAscii ();
    sprintf (Buffer,0,0);
    
    while (1)
          {
          };

  3. #3
    invite29971eb1

    Re : Fonction " sprintf " et LCD sur ATMEL

    Je vais te répondre par une devinette.

    Qu'est-ce que tu comprends dans ce message d'erreur?

    Error: function argument #1 of type 'int [3]' is incompatible with required parameter of type 'unsigned char *'

  4. #4
    sdec25

    Re : Fonction " sprintf " et LCD sur ATMEL

    Bonsoir,
    Tout d'abord une remarque :
    Code:
    Buffer[0] = 0x30;
    peut s'écrire
    Code:
    Buffer[0] = '0';
    c'est plus lisible !
    En plus, tu utilises des int pour stocker des caractères, 2 remarques :
    Pour stocker un caractère, 1 octet suffit c'est pour ça qu'on utilise des char (char = caractère). On peut aussi utiliser 2 caractères (Unicode) mais dans ton cas ça ne sert à rien.
    De toute façon int peut être sur 16 ou 32 bits suivant l'architecture donc à éviter.

    Sinon, tu n'as pas compris le but de la fonction sprintf. printf (et ses dérivées sprintf, fprintf, ...) n'est pas du tout une fonction destinée aux afficheurs LCD, c'est une fonction de formatage de texte qui prend un format et des paramètres (et qui est aussi utilisée sur PC). Fais une recherche sur internet tu trouveras des exemples à la pelle.
    Sinon il n'y a à ma connaissance pas de fonction standard pour faciliter l'utilisation d'un écran LCD alphanumérique (et ce n'est pas un problème, ce type d'écran n'est vraiment pas ce qu'il y a de plus complexe). Il y a une fonction d'envoi de caractère, à toi de créer des fonctions pour afficher des chaînes à un endroit donné.

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

    Re : Fonction " sprintf " et LCD sur ATMEL

    J'allais réagir sur l'intervention "inutile" de sdec25, pensant qu'on avait juste affaire à une erreur de type de variable (ce qu'indique le message d'erreur) mais elle m'a permis de voir un autre problème.

    Vu ton code, il est écrit sous Codevision AVR et par défaut, sprintf dirige l'écriture vers le port série. Si tu veux rediriger l'écriture vers le lcd, il faut ré-écrire la fonction putchar()

    Donc, commence par déclarer ton tableau en "unsigned char Buffer[3]". Le message d'erreur est tellement clair, que tu aurais du le trouver tout seul.

    Ensuite, soit tu redéfinis la fonction putchar(), soit tu utilises les fonctions dédiées au lcd, lcd_putc() et lcd_puts().

    Voir l'aide de Codevision, rubriques "LCD functions" et "Standard C Input/Output Functions"

  7. #6
    sdec25

    Re : Fonction " sprintf " et LCD sur ATMEL

    C'est printf qui dirige l'écriture vers le port série, sprintf ne fait qu'écrire dans le buffer donné en paramètre. Dans notre cas sprintf et la fonction ConvAscii ont la même utilité : convertir le nombre (148) en chaîne ("148").

  8. #7
    invite29971eb1

    Re : Fonction " sprintf " et LCD sur ATMEL

    Citation Envoyé par sdec25 Voir le message
    C'est printf qui dirige l'écriture vers le port série, sprintf ne fait qu'écrire dans le buffer donné en paramètre. Dans notre cas sprintf et la fonction ConvAscii ont la même utilité : convertir le nombre (148) en chaîne ("148").
    au temps pour moi, ça m'apprendra à lire trop vite.

    Mes explications restent toutefois valables....pour le printf

  9. #8
    Tryph

    Re : Fonction " sprintf " et LCD sur ATMEL

    Salut,

    ça pourrait aider:
    http://elecrom.wordpress.com/2009/07...-lcd/#more-393

    effectivement, tu n'as pas du tout compris comment et pour quoi utiliser la fonction sprintf.
    ce lien devrait t'aider a y voir plus clair: http://www.cplusplus.com/reference/c...stdio/sprintf/

Discussions similaires

  1. Réponses: 23
    Dernier message: 30/03/2012, 23h23
  2. Affichage osd "non sollicité" sur moniteur lcd
    Par invite58238e9a dans le forum Matériel - Hardware
    Réponses: 1
    Dernier message: 10/09/2010, 20h07
  3. créer un symbole "custom" sur lcd
    Par Qristoff dans le forum Électronique
    Réponses: 3
    Dernier message: 15/11/2009, 19h21
  4. question de définition entre "fonction" et "application linéaire"
    Par bendesarts dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 19/02/2009, 14h52
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...