Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

nombres réels avec pic16F877




  1. #1
    MANOLOVIT

    nombres réels avec pic16F877

    bonjour, je voudrais savoir si on peut faire des multiplications en C avec des nombres réels sur un pic16F877. En effet aprés une CAN je dois travailler sur la valeur acquise et la multipliée dans une boucle avec des nombres réels.
    Cordialement

    -----


  2. Publicité
  3. #2
    jiherve

    Re : nombres réels avec pic16F877

    Bonsoir
    Avec une bibliothèque adaptée sans doute , mais ce ne sont que des flottants un des nombreux sous ensembles rationnel des nombre réels !
    JR

  4. #3
    RISC

    Re : nombres réels avec pic16F877

    Bonjour,

    Si tu souhaite faire des calculs en virgule flottante, il suffit d'utiliser un compilateur C capble de le faire.
    Pour le PIC16F877, tu peux par exemple utiliser le compilateur C Piclite de Hitech : http://www.htsoft.com/products/compilers/PICClite.php
    ( version gratuite mais limitée )

    Attention cependant : les calculs en virgule flottante peuvent être particulièrement lents sur les 8bits...car ils ne sont pas prévus pour cela.
    Il existe différentes possibilités pour éviter ces calculs et rester en format entier (cherche sur internet) ou dans les thread existantes de ce forum.
    Si vraiment tu dois faire ces calculs, je te conseille alors plûtot de prendre une architecture plus puissante comme les PIC18 ou PIC24 pour lesquels les compilateurs C sont en téléchargement gratuit (student edition) :
    C18 : www.microchip.com/C18
    C30 : www.microchip.com/C30

    Dans le cas du C30, je te conseille alors le format propriétaire des "fractional" propre à Microchip qui permet de faire de la virgule flottante plus rapidement. L'astuce est que Microchip a prévu de formatter la sortie du CAN directement dans ce format donc pas besoin de conversion de format ;=)

    a+
    Dernière modification par RISC ; 21/09/2007 à 20h12. Motif: correction


  5. #4
    MANOLOVIT

    Re : nombres réels avec pic16F877

    Bonjour, je joins mon programme. En effet l'acquisition marche bien mais dés que je veux recuperer une valeur de la boucle for, j'ai une sortie trés bruitée. j'ai un compilateur CC5X. Je demande votre avis pour savoir si c'est possible que le pic16F877 soit capable de faire ces calculs.

    Code:
    #pragma chip PIC16F877A
    //#pragma config = 0x3F39
    #pragma delay(clock=20000000) 
    
    //#include <math24f.h>
    
    #include "int16CXX.H"
    
    
    unsigned char val_pot;
    void pwm_init(void)
    {
    TRISC&=0xFD;//sortie CCP2 du PWM partagée avec bit(RC1)
    CCP2CON=0x0F;//mode PWM pour CCP2
    T2CON=0x04;//config timer 2 pour PWM
    PR2=0xFF;//periode PWM = (PR2+1)*4*Tosc*prescalar timer 2
    CCPR2L=0x80;//par exemple pour rapport cyclique de 50%
    	PORTA=1;
    	PORTB=0;
    	TRISA=1;
       	TRISB=0;
    	ADCON1=0x4E;//justif a gauche des 10 bits + 1 voie analogique AN0(4E-fosc/4)(0E-fosc/8)
    	ADCON0=0x01;//vitesse de conversion: Fosc/4-2.4Mhz- lecture AN0 (01-fosc/4)(41-fosc/8)
    	INTCON=1;//pas d'interrupt
    	ADIF=0;
    	ADIE=1;
    	PEIE=1;
    
    }
    
    ////////////////////////////////////////////////////////////////////////////////////////////////
    
    void main(void) {
    //	char chaine[16];//pour LCD
    char val_sup ,val_pot, val_inf, sortie, sortiedef, val_test, val_testn, val_tpos, val_tneg;
    char f,i,bi,wi;
    static const b[7]={0,0.3204,1.4648,3.4790,6.2866,9.8724,13.7787};
    static const w[7]={4.7048,-0.8861,-0.4005,-0.2508,-0.3078,-0.0736,-0.3211};
    
    	pwm_init();
    	val_pot=0;
    	val_inf=0;
    	sortiedef=0;
    	val_sup=0;
    	while (1) {
    
    
    	ADCON0|=0x04;//lance acquisition/conversion avec GO/DONE à 1
    	while (ADCON0&0x04);//tant que pas finie, on boucle
    	val_pot=ADRESH;// converison finie, lecture du résultat
    		
    		val_sup = val_pot;
    
    		for(i=1;i<=7;i++)
    		{
    			bi=b[i];
    			wi=w[i];
    			sortie=0;
    			val_test=val_inf + bi;
    			val_testn=val_inf - bi;
    			val_tpos = val_sup - bi;
    			val_tneg = val_sup + bi;
    
    			if( val_sup > val_test){
    			sortie =(val_tpos);
    			sortie*=wi;}
    
    			else if(val_sup < val_testn){
    			sortie=(val_tneg);
    			sortie*=wi;}
    
    			else{sortie=val_inf;
    			sortie*=wi;}
    
    			sortiedef+=sortie;
    		}
    
    		val_inf = val_sup;	
    		
    	PORTB=sortiedef;
    
       
    
    
    		
    	}
    }
    Fichiers attachés Fichiers attachés
    Dernière modification par HULK28 ; 24/09/2007 à 11h32. Motif: Ajout des balises [CODE][/CODE] pour une meilleure lisibilité

  6. #5
    MANOLOVIT

    Re : nombres réels avec pic16F877

    Bonjour c encore moi, pour la boucle For je me suis trompé c'est de 1 jusqu'a 7.
    Cordialement

    Je l'ai corrigé.
    Dernière modification par HULK28 ; 24/09/2007 à 11h34. Motif: Correction dans la boucle for

  7. A voir en vidéo sur Futura
  8. #6
    HULK28

    Re : nombres réels avec pic16F877

    Salut,

    quand tu dis "bruité", tu entends quoi par là?

    En général lorsqu'on veut fait une mesure d'une tension présentant une légère ondulation, on effectue par exemple 5 mesures (ou plus) et on fait la moyenne pour obtenir une valeur centrale représentative.
    Tu peux également faire une série de mesures (itération) sur 10 acquisitions, exclure les valeurs min et max et moyenner le reste.

    Je ne sais pas si c'est vraiment de cela dont tu veux parler.
    @+
    Dernière modification par HULK28 ; 24/09/2007 à 11h36.
    Tout est bien qui finit.

  9. #7
    MANOLOVIT

    Re : nombres réels avec pic16F877

    Ma question c'est juste de savoir si le pic16F877 est capable de parcourir la boucle et faire les calculs avec les nombres réels entre deux acquisitions.

  10. Publicité
  11. #8
    HULK28

    Re : nombres réels avec pic16F877

    Le problème est que tu déclares par exemple val_test en char or tu écris ici:

    val_test=val_inf + bi;

    avec bi étant un float, wi un float négatif, etc ...

    Je n'ai pas regardé dans les détails mais il semble qu'il y ait des soucis comme ça à plusieurs niveaux.
    @+
    Tout est bien qui finit.

Discussions similaires

  1. nombres réels !
    Par nassoufa_02 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 04/10/2006, 20h53
  2. Nombres Reels--Exercices.
    Par Sarah2006 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 30/12/2005, 17h25
  3. exercices sur les nombres réels
    Par djazia dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 26/11/2005, 20h56
  4. A propos des Nombres reels...
    Par Page Of Cups dans le forum Mathématiques du supérieur
    Réponses: 10
    Dernier message: 11/11/2005, 16h57
  5. Les nombres réels
    Par lealea dans le forum Mathématiques du supérieur
    Réponses: 5
    Dernier message: 11/05/2005, 22h41