Lm35dz+18f458
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Lm35dz+18f458



  1. #1
    PicMan

    Smile Lm35dz+18f458


    ------

    Bonjour , j'ai un petit problème avec le A/D du 18F458.

    Câblage:
    entrée sortie LM35DZ 5V (0°-150°C) 10mv/°C
    sortie du LM35 sur AN4
    VREF+ sur AN3 pont diviseur 1,5V
    VREF- sur AN2 0V cablé

    Code :

    Code:
    void initCadTemp(void)
    {
    /*
    000 = Channel 0 (AN0) patte 2
    001 = Channel 1 (AN1) patte 3
    010 = Channel 2 (AN2) patte 4
    011 = Channel 3 (AN3) patte 5 
    100 = Channel 4 (AN4) patte 7
    101 = Channel 5 (AN5)(1)
    110 = Channel 6 (AN6)(1)
    111 = Channel 7 (AN7)(1)
    Vref- ==>patte 4
    Vref+==>patte 5 
    */
    
    //AN4
    ADCON0bits.CHS0=0;
    ADCON0bits.CHS1=0;
    ADCON0bits.CHS2=1;
    
    //CLOCK
    //FOSC/2
    
    ADCON1bits.ADCS2=0;
    ADCON0bits.ADCS1=0;
    ADCON0bits.ADCS0=0;
    
    /*
      ADCON1	  	ADCON0
      <ADCS2>   	 <ADCS1:ADCS0>
       				
    Clock Conversion
    0 00 FOSC/2
    0 01 FOSC/8
    0 10 FOSC/32
    0 11 FRC (clock derived from the internal A/D RC oscillator)
    1 00 FOSC/4
    1 01 FOSC/16
    1 10 FOSC/64
    1 11 FRC (clock derived from the internal A/D RC oscillator)
    */
    
    
    //control
    //AN3 Vref+ 1,5V
    ADCON1bits.PCFG0=0;
    ADCON1bits.PCFG1=0;
    ADCON1bits.PCFG2=1;
    ADCON1bits.PCFG3=1;
    
    ADCON1bits.ADFM=1; 
    //aligner à droite
    //000000000 ADRESSH:ADRESSL
    //ON
    ADCON0bits.ADON=1;
    
    
    }
    
    float getTemp(void)
    {
    
    
    //GO
    ADCON0bits.GO=1;
    
    while(ADCON0bits.GO);
    
    
    //calcul de la température en fonction du CAN
    
    temp=(ADRES*VREFH);
    temp=temp/RESOLUTION;
    temp=(1000/COEF_LINEAR)*temp;
    
    return(temp);
    }

    tension au borne du LM35 => 209,5mV==>20,95°C

    résultat d'une demande de température toute les secondes:

    ADRESH:ADRESL=>0xC0 ,192

    1500mv->1023
    x ->192

    x=(192/1023)*1500=281mv==>28,1°C


    en utilisant la masse ou une entrée pareil toujours 28,1°C

    la précision de quelque dizième de degrès, pour quoi cette équart???



    merci de répondre
    sa serai sympa
    si vous avez des questions.

    -----
    Dernière modification par PicMan ; 23/10/2008 à 21h48.

  2. #2
    DavidDB

    Re : Lm35dz+18f458

    Salut,

    Ouvre le datasheet de ton µC....

    Tu ne peux pas appliquer une tension de 1.5V sur Vref+, le minimum est de 2.2V (de mémoire).

    En plus, dans ton code je ne vois pas le temps charge du condo CAN, c'est peut-être ton compilo qui s'en occupe...

    David.

  3. #3
    PicMan

    Re : Lm35dz+18f458

    Rebonjour!
    Je suis reparti d'un programmable plus simple utilisé dans l'exemple du compilateur.

    Précision:

    Câblage:

    alimentation 5V LM35DZ (0°-150°C) 10mv/°C
    sortie du LM35 sur AN4
    VREF+ sur AN3 pont diviseur 1,5V
    VREF- sur AN2 0V cablé
    -Quartz de 8MHZ sur le circuit
    -TAcq=TAMP+Tc+TCOFF
    Tacq=2+9,61+6,25=17,86micro seconde
    réglage du Tad à 16 Tosc ((1/8MHZ)*16=2 micro sec

    10bits X Tad + 2 Tad entre deux convertions = 12 Tad

    le temps acquisition c'est juste après le OpenADC() et après 2 Tad entre chaque conversion???

    J'ai du mal à comprendre la différence entre le aquisition time et les 2 Tad d'attente entre 2 conversions.



    voici le Code:



    Code:
    void main()
    {
    
    
    initLCD();
    // configure A/D convertor
    //Fosc/4 4Tosc > 1,6microsec
    OpenADC( ADC_FOSC_16 & ADC_RIGHT_JUST & ADC_3ANA_2REF,ADC_CH4 & ADC_INT_OFF );
    /*delay aquisition*/
    while(1)
    {
    	//delay 2Tad //Tad=2microSeconde (1,6 normalement)
    	Attente100MUs(1); // Delay de 100micro pour attendre plus longtemps
    	ConvertADC(); // Start conversion
    	//delay 2Tad //Tad=2microSeconde (1,6 normalement)
    	AttenteMs(1000);
    	while( BusyADC() ); // Wait for completion
    	result = ReadADC(); // Read result
    	temp=(result*1.5)/1023;
    	temp=temp*1000;
    	temp=temp/10;
    	ftoaFaitMaison(temperature,temp);
    	afficheLCD(1,1,temperature);
    }
    
    
    }

    Je n'ai pas trouvé le minimum qu'on peut mettre en Vref-.
    voici la datasheet:
    http://www.datasheet4u.com/html/1/8/...ology.pdf.html

    j'ai 24°C et c'est très changeant alors qu'il devrait y avoir 0,1 degrès de précision + (+-0,5°C du capteur)
    il y 200mv sur le lm35DZ....pas bon...

    pouvez vous m'aider?

  4. #4
    PicMan

    Re : Lm35dz+18f458

    Pouvez me confirmer ce qu'il y a était dit quand je ne trouve pas dans la datasheet.j'ai passe beaucoup de temps alors qu'un simple passage sur le poste peu me donner une piste.


    merci de votre compréhension

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

    Re : Lm35dz+18f458

    bonsoir,

    Comme te l' a déja signalé DavidB, on ne peut pas faire n'importe quoi avec
    + REf et -REF
    exemple avec un LM335DZ :
    Utiliser l'ADC du 16F876 avec comme references 1,500V et 3,500V
    delta MINI=2,00V !!
    soit . -123°C a +81.6°C sur delta de 1024 points soit une resolution
    de +-0.2°C......
    voir application HAPR sur ma page web.

  7. #6
    invite03481543

    Re : Lm35dz+18f458

    Bonsoir,

    pourquoi ne prends-tu pas une référence intégrée de 4,096V cela te donne une résolution du A/D à 4mV et stable.
    Delta Vref ne doit pas être inférieur à 3V pour Vdd>=3V et Vref- ne doit pas dépasser 2V.
    @+

  8. #7
    PicMan

    Re : Lm35dz+18f458

    merci de vos réponses:
    -------------------------------------
    je pense utilisé toute les capacités de mon composants, comme je l'ai dis précédement, il a lui meme une précision de +/- 0,5 + erreur CAN.
    franchement meme si sa me suffit je pense dans mon cahier des charges, autant faire les choses bien.

    -->j'ai trouvé la page qui vous permet d'affirmer vos réponse, il l'a foute après les comparateur faut lire meme après ce qu'il nous intéresse arf.
    il y a 2 cas en delta, a quoi correspond le premier cas, celui que vous ne choisissez pas..?
    A20 VREF Reference Voltage
    (VREFH – VREFL)
    0V — — V
    A20A 3V — — V For 10-bit resolution


    et si vous pouvez me précisez certain point de la documentation que j'ai mal compris:

    -->J'ai du mal à comprendre la différence entre le aquisition time et les 2 Tad d'attente entre 2 conversions.
    le graphique p361 n'aide vraiment pas comparé aux texte d'explication dans le chapitre AD.




    --> et comment choisir enivron 4V en Vdd , on a pas juste le choix avec Vdd (5V)?.


    cordialement et encore merci de votre aide

Discussions similaires

  1. Capteur de température LM35DZ sur le port série
    Par invite5d1bc976 dans le forum Électronique
    Réponses: 6
    Dernier message: 13/04/2008, 20h32
Découvrez nos comparatifs produits sur l'informatique et les technologies.