<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Merci pour le lien.
En ce qui concerne le sprintf...je fais la même chose qui est utilisé dans le lien.
Et j'ai toujours une erreur,:
au ligneError[Pe120]: return value type ("char __bank *") does not match the function type ("char")
Error[Pe120]: return value type ("char __bank *") does not match the function type ("char")
etCode:char TensionBatt1 (void) { conv_AN_vbatt1 (); calcul_vbatt1 (); conv_ftoa_vbatt1 (); return (vbat1a);//lerreur est la!!!!!!! }
et pourtant j'ai remodifier la declaration du char:Code:char conv_ftoa_vbatt1 (void) { sprintf (vbat1a,"%6.2f",vbat1f); return (vbat1a);//lerreur est la!!!!! }
etCode:char vbat1a[30];
Code:extern char vbat1a[30];
Normal ... un char est un octet signé, par une chaine de caratère ...
Toi tu ne veux pas renvoyer un char, mais un char* ( donc un pointeur vers un/des char )
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
En ce qui concerne:
Je souhaite stocké le résultat de la conversion qui est sur 10 bits dans un int, et ensuite réaliser cette opération dessus:Code://int resultV; // pourquoi 'int' ???!
Je peu faire cela si je le déclare en unsigned char??Code:resultV=((ADRESH*256)+ADRESL); //Récupération du résultat sur 10 Bits
merci d'avance
Et comment déclarer alors ma variable vbat1a pour etre utilisable par la fonction sprintf?
Jai fais 2 3 petites modifications, mais je comprend la fin, mais comment faire? comment lui dire à quoi est égal "value" et de meme que le résultat du calcul...
Merci de ton aideCode://Déclaration des variables char vbat1a; // BUG !!! comment la déclaré??? //Déclaration des fonctions = prototypes unsigned short conv_AN_vbat1 (void); float calcul_vbat1 (void); char conv_ftoa_vbat1 (void); //comment la déclaré?? //Définition des fonctions char mesure_bat1 (void) // BUG !!!comment la déclaré?? { conv_AN_vbat1 (); calcul_vbat1 (); conv_ftoa_vbat1 (); return (vbat1a); } //int conv_AN_vbat1 (void) unsigned short conv_AN_vbat1(void) { ADCON0=0x05; ADCON2=0xA5; GO_DONE=1; while(GO_DONE); // Deadlock ! GO_DONE=0; return (((ADRESH*256)+ADRESL)); } float calcul_vbat1 (unsigned short value) { float van1 ; van1 = ((float)value) * q; //value est éagal à quoi? return ((float)(van1 * 6.8576)); } char conv_ftoa_vbat1 (void); // BUG !!! { sprintf (vbat1a,"%6.2f",vbat1f); // BUG !!! return (vbat1a); }
> Pourquoi la stocker dans une variable globale ??? ...
> Pourquoi un int ?
Comme ça :comment lui dire à quoi est égal "value" et de meme que le résultat du calcul...
Par exemple ...Code:calcul_vbat1( conv_AN_vbat1() );
Mais une fois de plus : va lire des cours de C, là tu perds ton temps ... Manifestement tu ne connais pas le C, et c'est pas sur un PIC que tu pourras apprendre dans les meilleures conditions ...
Bonne continuation.
@++
Seb.
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Merci de ta réponse...
juste une dernière chose...
en ce que concerne le char pour le sprintf...je ne vois pas du tout...je sais je dois revoir mes cours...promis...je m'endors avec ce soir...
Tout est là :
http://irc.essex.ac.uk/www.iota-six....ntf_sscanf.asp
Code:char str[10]; sprintf(str, "%f", 15.05);
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Mais c'est exactement ce que je fais lorsque je fais:
non??Code:char vbat1a[30]; sprintf(vbat1a, "%f", vbat1f);
et j'ai toujours cette erreur:
je ne comprend pas??Error[Pe120]: return value type ("char __bank *") does not match the function type ("char")
Je t'ai déjà donné cette réponse ...
Normal ... un char est un octet signé, par une chaine de caratère ...
Toi tu ne veux pas renvoyer un char, mais un char* ( donc un pointeur vers un/des char )
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Je suis perdu...
voila ce que j'ai:
j'arrive pas a voir avec le pointeur..où l'utiliser,...Code:char *vbat1a; */ /******************** Définitions des sous-programmes *************************/ //Mesure Tension unsigned short conv_AN_vbat1(void); float calcul_vbat1 (unsigned short); char conv_ftoa_vbatt1 (void); /*********************** TENSION **********************************/ char TensionBatt1 (void) { calcul_vbatt1 ( conv_AN_vbatt1 () ); conv_ftoa_vbatt1 (); return (vbat1a); } /*************************************************************** Nom : conv_AN_vbatt1 Role : Réalisation d'une conversion Analogique/numérique sur AN1 ****************************************************************/ unsigned short conv_AN_vbat1(void) { ADCON0=0x05; // Sélection AN1/ADON = 1. ADCON2=0xA5; // Justification à droite/Tps d'acquisition=4Tad/Horloge de conversion=16Tosc GO_DONE=1; // Start Conversion A/N while(GO_DONE); // attend EOC GO_DONE=0; // Fin Conversion A/N return (((ADRESH*256)+ADRESL)); } /*************************************************************************** Nom :calcul_vbatt1 Role : Calcul de la tension suite à la convAN->résultat en réel *****************************************************************************/ float calcul_vbat1 (unsigned short value) { float van1 ; van1 = ((float)value) * q; //Calcul de la tension présente sur AN1 (Float) return ((float)(van1 * 6.8576)); } /*************************************************************************** Nom : conv_ftoa_vbatt1 Role : conversion du résultat: float to string *****************************************************************************/ char conv_ftoa_vbatt1 (void) { sprintf (vbat1a,"%6.2f",vbat1f); return (vbat1a); }
Et pourquoi ,mon programme fonctionnait lorsque tout était sous le meme fichier .c et les variables déclarés en globales et que la il me met une erreur de déclaration au point de vue du char???
<< L'histoire nous apprend que l'on apprend rien de l'histoire. >>
Et pour le vbat1f, comment le remplacer, en faisant le meme principe que précédement:
c'est faisable???Code:conv_ftoa_vbatt1 (calcul_vbatt1 ( conv_AN_vbatt1 () ));
je m'enmèle les pinceaux...je pensai que ça allait être plus simple...
J'ai modifié avec ce que tu m'as donné :
et ça fonctionne, j'ai toujours l'erreur avec vbat1f, mais c'est normal, je regarde, mais j'ai 2 warning:Code:char vbat1a[10]; char* conv_ftoa_vbatt1(void) { [...] return(vbat1a); }
surCode:Warning[Pe223]: function declared implicitly
il sont déclaré pourtant comme ça:Code:calcul_vbatt1 ( conv_AN_vbatt1 () );
merci encore pour ton aide...Code:unsigned short conv_AN_vbat1(void); float calcul_vbat1 (unsigned short);
Désolé...erreur de ma part, a force de faire des copier/coller...
Par contre...ça compile, mais es ce que c'est vraiment correct ça:
Merci beaucoup Seb26...et je te promet que je bouquine mon livre de C ce soir..jen ai besoin je crois...Code:char* TensionBatt1 (void) { conv_ftoa_vbat1 ( calcul_vbat1 ( conv_AN_vbat1 () )); return (vbat1a); }