probleme resultat avec division de signed char sur PIC18F C18
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

probleme resultat avec division de signed char sur PIC18F C18



  1. #1
    inviteac751535

    probleme resultat avec division de signed char sur PIC18F C18


    ------

    bonjour,

    je galere vraiment en ce moment pour convertir une valeur en ascii.
    pour cela j'ai cree une petite fonction simple qui me decortique caractere par caractere.
    exemple depuis 2 octes d'une sonde de temperature, j'effectue le traitement de base pour avoir une partie virgules et une partie entiere.Jusque la tout va bien.En revanche lorsque j'arrive au traitement rien ne va...il me trouve des signed char negatif..enfin voila le code.
    Code:
    void Temp_String (char * buffer,unsigned char byteL,unsigned char byteH)
    {
    	unsigned int virgule;
    	unsigned char result,result1;
                 //la virgule
    	virgule =(byteL&0x0F);
    	virgule *=625;
    	result=(byteL>>4);
    	result1=((byteH&0x07)<<4);
    	result|=result1;
    	//*****************jusqu'ici tout va bien*************
             buffer[0]=0x2B;
    	buffer[1]=((result/10));//+48);//ici il trouve 47 car result/10 = -1 soit 0xFF
    	buffer[2]=((result-((buffer[1]-48)*10))+48);
    	buffer[3]=0x2E;
    	buffer[4]=((virgule /1000)+48);
    	buffer[5]=(((virgule -((buffer[4]-48)*1000))/100)+48);
    	buffer[6]=0x20;
    	buffer[7]=0x43;
    	buffer[8]='\0';
    	
    	
    	
    }
    donc avec

    Code:
    Temp_String (char * buffer,0x6C,0x01);
    je voudrais avoir +22.75 C soit une chaine {0x2B,0x32,0x32,0x2E,0x37,0x35 ,0x20,0x43,'\0'}

    voila mon probleme pouvez vous m'aider

    -----

  2. #2
    RISC

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Salut,

    Pourquoi n'utilises-tu pas les librairies du compilateur C18 pour tout ce qui est conversion :
    * itoa
    * btoa
    * ultoa
    ...

    Il suffit d'ajouter au début de ton programme :
    #include <stdio.h>

    Tu trouveras toutes ces librairies dans ce document : c:\Program Files (x86)\Microchip\mplabc18\v3.40 \doc\hlpC18Lib.chm

    a+

  3. #3
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Oui, je vais finallement essayer ces fonctions.
    Mais pourquoi ma division par dix me renvoie un char negatif (1111111)?

  4. #4
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    bonsoir RISC.

    j'ai utiliser les fonctions de "STDLIB.H" ITOA et BTOA.
    pas de soucis avec ces fonctions mais en revanche toujours le meme probleme de conversion.
    J'ai fait du Pas a pas en faisant un PORTD=entier[0..1] et virgule[0...2] et je suis dqns les choux complet (voir code commente plus bas).
    je suis completement perdu la...ca me depasse...il ya un truc qui s'acharne sur moi.
    est un probleme de compilation ou de hardware.(hardware j'en doute j'ai 2 pic et ils me donnent le meme resultat).

    bon voicile nouveau code
    Code:
    unsigned char sondeT[5]={0x6C,0x01,0xFE,0x07}
    char temp1 [15] = "";//variable affichage temperature
    
    void main (void)
    {
    int i=0;
    ADCON0=0;
    ADCON1=0x0f;
    TRISD=0x00;
    
       while(1) 
       {
       Temp_String (temp1,sondeT[0],sondeT[1]);
       }
    }
    
    
    void Temp_String (char * buffer,unsigned char byteL,unsigned char byteH)
    {
    	unsigned int decimales;
    	unsigned char result;
    	char virgule[5]="";
    	char entier[3]="";	
    decimales =(byteL&0x0F);
    	decimales*=625;
    	itoa(decimales,virgule);
    	result=((byteL>>4)|((byteH&0x07)<<4));
    	btoa(result,entier);
    	
    	buffer[0]=entier[0];//--> sortie sur PIC 55 soit 00110111 au lieu de 50!!!!!!!!!
    	buffer[1]=entier[1];//--> sortie du PIC 0x00 au lieu de 50!!!!!!!!! 
    	buffer[2]=0x2E;
    	buffer[3]=virgule[0];
    	buffer[4]=virgule[1];
    	buffer[5]=virgule[2];
    	buffer[7]=0x20;
    	buffer[7]=0x43;
    	buffer[8]='\0';
    }
    c'est a y perdre la tete!!!

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

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Salut ,

    Quand tu appelles ta fonction Temp_String quelles sont les valeurs de byteL et byteH qui posent problème ?

    a+

  7. #6
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    et bien ByteL=sondeT[0]=0x6C et byteH=sondeT[1]=0x01;
    apres conversion ca doit te donner 22.75 C.

    merci

  8. #7
    Jack
    Modérateur

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Il y en a marre de multiplier les discussions sur le même sujet.
    http://forums.futura-sciences.com/el...ion-18b20.html
    http://forums.futura-sciences.com/el...a-sprintf.html
    http://forums.futura-sciences.com/pr...p-pic-18f.html

    Du coup, on te redonne les mêmes solutions, c'est du temps de perdu pour tout le monde.

    Il va falloir te décider sur le fil que tu veux suivre!

  9. #8
    RISC

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Salut,

    Tes problèmes viennent de mauvaise déclarations des types...et ensuite les conversions du langage C ne se font pas correctement.
    En C il faut faire TRES TRES attention à déclarer unsigned quand c'est nécessaire car le type par défaut est...signed
    Pour déboguer ce genre de PB, utilises le mode simulateur et mets tes variables dans la watch Window cela te permettra de voir ou cela coince.

    J'ai repris la première version de ton programme qui semble fonctionner après les modifs que j'ai faites

    Code:
    #pragma config OSC = INTIO67
    #pragma config PWRT = OFF
    #pragma config LVP = OFF
    
    #include <p18f4523.h>
    
    //========================================================================
    // Function prototypes
    void Temp_String (unsigned char * ,unsigned char ,unsigned char ) ;
    //========================================================================
    
    //========================================================================
    // Global  variables
    unsigned char sondeT[5]={0x6C,0x01,0xFE,0x07};
    unsigned char temp1[15] ; //variable affichage temperature
    //========================================================================
    
    
    void main (void)
    {
    int i=0;
    ADCON0=0;
    ADCON1=0x0f;
    TRISD=0x00;
    
       while(1) 
       {
       Temp_String (temp1,sondeT[0],sondeT[1]);
       }
    }
    
    
    void Temp_String (unsigned char buffer[],unsigned char byteL ,unsigned char byteH )
    {
    	unsigned int virgule;
    	unsigned char result,result1;
    
                 //la virgule
    	virgule = byteL & 0x0F;
    	virgule *=625;
    	result=(byteL>>4);
    	result1=((byteH&0x07)<<4);
    	result|=result1;
    	//*****************jusqu'ici tout va bien*************
        buffer[0]=0x2B;
    	buffer[1]=(result/10)+0x30;
    	buffer[2]=((result-((temp1[1]-48)*10))+48);
    	buffer[3]=0x2E;
    	buffer[4]=((virgule /1000)+48);
    	buffer[5]=(((virgule -((temp1[4]-48)*1000))/100)+48);
    	buffer[6]=0x20;
    	buffer[7]=0x43;
    	buffer[8]='\0';
    }

    J'ai pris au hasard le PIC18F4523 car je pense que tu utilises un PIC18 avec ADC 12 bits (d'après ton code)

    a+
    Dernière modification par RISC ; 25/02/2012 à 00h35.

  10. #9
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    bonjour,

    Jack, desole de chez desole mais j'atais creve et despere a force de chercher...sans probleme je vais faire gaffe.

    Risc, biensur que j'ai un debugger sur c18 que j'utilise, que je synchronise et le watch m'est tres utilse...et a chaque fois mon code fonctionne Nickel.
    je vais essayer ton code mais j'ai des doutes...j'ai essayer mais mon PIC n'accepte pas les operations simple sur genre" buffer[1]=(result/10)+0x30"...
    c'est trop bizarre...j'esssaie et je te dis ca dans la matinee...

    Merci

  11. #10
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    RISC,

    T'es un CHEEEEEEEEFFFFFFFFFFFFF
    en fait tout venait de ce foutu LVP=OFF
    Pourquoi? je ne sais pas...mais enfin c'est la solution au probleme je pense

    Merci je vous tiens au courant bein sur "en suivant le meme fil directeur...

  12. #11
    RISC

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Salut,

    Le bit LVP n'a rien à voir avec tes problèmes de conversion de chaine...

    Quel PIC18 utilises-tu ? (il y en a plus de 200 !!)
    Le code que je t'ai donné compile sans erreur sur le compilateur C18 V3.40

    Quel compilateur C18 utilises-tu ?

    Quel outil de programmation ?

    J'ai fait des changements dans ton programme à plusieurs endroits.
    Regardes bien le prototype de la fonctionTemp_String
    Tu avais également déclaré ton tableau temp1 comme char et non unsigned char...

    Si tu vois des messages comme "suspicious pointer conversion" c'est le signe de problèmes de type...

    a+
    Dernière modification par RISC ; 25/02/2012 à 19h32.

  13. #12
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    salut Risc,

    Et bien j'utilise MPlab et le MCC18.
    Le PIC en question est le 18F4550.

    Je vais te repondre dans la journee concernant le deblocage de mon programme.
    je vais revenir a la configuration initiale et on verra...
    Merci en tout cas

  14. #13
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Risc,

    je suis un peu confis car la j'ai tout remis en parametre d'origine.
    Code:
    void Temp_String (char * buffer,unsigned char byteL,unsigned char byteH)
    et ca marche Nickel???
    a voir peut etre les fusibles de depart.?

  15. #14
    RISC

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Salut,

    Je te confirme que cela n'a ABSOLUMENT RIEN à voir avec les bits de configuration...
    As-tu un warning pendant la compilation ?

    Ta version originale m'avaitje crois donné :
    * une erreur pour la fonction Temp_String car il n'y avait aucun prototype
    * un warning "suspicious pointer conversion"

    Reprend le 1er exemple que tu as posté. Tu devrais avoir la même chose...

    Peux-tu également répondre à mes questions précédentes pour être sûr qu'on utilise des outils similaires :

    Quelle version du compilateur C18 utilises-tu ?

    Quel programmateur / Débogueur (Pickit2/3, ICD3,...) ?

    Quel PIC18 (référence exacte) ?

    a+

  16. #15
    inviteac751535

    Re : probleme resultat avec division de signed char sur PIC18F C18

    salut Risc,

    Quelle version du compilateur C18 utilises-tu ?

    MPLAB V8.10 avec MPLINK 4.35 et MCC18 v 2.0

    Quel programmateur / Débogueur (Pickit2/3, ICD3,...) ?

    J'utilise un programmateur PIC-01 (je ne epux pas le connecter pour deboguer on line) avec WINPIC800

    Quel PIC18 ?

    PIC 18F4550 I/P en fait je l'utilise initialement pour l'USB mais en fin de compte il semble pas pour les projets avec beaucoup d'entree sortie.


    voila en esperant avoir repondu a tes questions.je ne vois toujours pas ce qui a pu si bien radicalement changer?? pour que ca fonctionne si bien maintenant.

  17. #16
    RISC

    Re : probleme resultat avec division de signed char sur PIC18F C18

    Salut,

    Tu utilises que des versions qui ont 3 à 5 ans...
    Télécharges et installe MPLAB v8.84 et le compilateur C18 Lite v3.41 ici : http://www.microchip.com/MPLAB

    Si tu veux vraiment profiter d'un IDE moderne, tu installes la version 1.00a de MPLAB X qui est beaucoup plus conviviale.

    a+

Discussions similaires

  1. Problème USART et PIC18F, en C18. Je n'y comprend plus rien.
    Par invitec1a2f24b dans le forum Électronique
    Réponses: 12
    Dernier message: 29/12/2012, 09h22
  2. probleme de division de char en C sur C18 (microchip pic 18F)
    Par inviteac751535 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 25/02/2012, 00h18
  3. Affichage résultat d'une Conversion A/N via RS232 (p18f4520 + C18)
    Par invite8d0b7120 dans le forum Électronique
    Réponses: 7
    Dernier message: 27/04/2010, 18h58
  4. Problème d'interruption avec Pic18f
    Par invite25df009a dans le forum Électronique
    Réponses: 3
    Dernier message: 19/03/2010, 10h37
  5. Pb de types C18 sur 18F - Resultat de calcul faux
    Par invite5dd9c328 dans le forum Électronique
    Réponses: 14
    Dernier message: 12/04/2007, 22h32
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...