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

Test_ADC ?



  1. #1
    inviteafa9cf6f

    Question Test_ADC ?


    ------

    Bonjour tout le monde,

    Je suis entrain de traiter des résultats capté par des capteur via pic, pour l'affichage du résultat c'est bien mais je pense à réaliser un test par exemple j'ai un capteur de pression MPX4115 la fonction de transfert de ce capteur est :

    Vout=Vs(0,009 P-0,095)

    donc si on utilise ADC avec un précision de 10 bits j'ai comme relation :

    P=(0,54306 Radc/Vs)+10,555


    donc pour la valeur affichée y a aucun problème

    seulement lorsque je veux faire le test par exemple si 30<=P<=50 ça marche pas

    voila la partie de traitement

    Code:
    Radc = Adc_Read(1);    //  Read channel AN1 and save value in the variable temp1
    Pre = 0.10861*Radc+10,5555;
    
    // test
    
    if (25<=Pre<=40){
    IntToStr(Pre, Text);
    //Lcd_Out(2, 1, "Pressure in KPa:");
    //Lcd_Out(3,1,Text);                 // Write the value to LCD
    delay_ms (10);
    UART1_Write_Text("  Pressure");
    Delay_ms(100);
    UART1_Write_Text(Text); // Sent to uart
    delay_ms(100);}
    else
    if (temp0>50){UART1_Write_Text("Pression_limite maximum");
    Delay_ms(100);}
    else UART1_Write_Text("Pression_limite minimum");
    Delay_ms(100);

    -----

  2. #2
    inviteafa9cf6f

    Re : Test_ADC ?

    Aucune idée ?

  3. #3
    invite860936ec

    Re : Test_ADC ?

    Bonsoir, qu'est ce qui marche pas? la compilation , le test, l'affichage........
    Pour commencer , la syntaxe: if (25<=Pre<=40) me parait bizard.
    J'aurai écris: if((25<=Pre)&(Pre<=40))
    @+

  4. #4
    invite936c567e

    Re : Test_ADC ?

    Bonsoir

    guillaume83 a parfaitement raison. En écrivant « 25<=Pre<=40 », tu réalises en fait l'évaluation de l'expression « (25<=Pre)<=40 ».

    Si par exemple Pre=10, alors « 25<=Pre » est FAUX et vaut 0. Comme 0≤40, alors le résultat retourné est VRAI, alors qu'on attend FAUX.

    Plus généralement, lorsque « 25<=Pre » est FAUX et vaut 0, la valeur retournée est VRAI car comme 0≤40, et lorsque « 25<=Pre » est VRAI et vaut 1, la valeur retournée est VRAI car comme 1≤40. Donc la valeur retournée est toujours VRAI quelle que soit la valeur de Pre.

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

    Re : Test_ADC ?

    bonsoir,


    Comme l'a remarqué Guillaume83, ta syntaxe de comparaison est ORIGINALE.
    et donc j'abonde dans son sens.

    de plus:
    Code:
    Pre = 0.10861*Radc+10,5555;
    // test
    if (25<=Pre<=40){
    IntToStr(Pre, Text);

    il y a melange de syntaxe ( point et virgule) pour les parties decimales.
    la variable Pre devrait etre au moins un flotant (single)
    vu l'usage de valeurs flotante dans les calculs.
    donc le IntToStr(Pre) ne donnera rien de bon.

    comment est initialisé Pre


    ne manque -til pas des parentheses sur le ELSE
    Code:
    else
    {
    if (temp0>50){UART1_Write_Text("Pression_limite maximum");
    Delay_ms(100);}
    else UART1_Write_Text("Pression_limite minimum");
    Delay_ms(100);
    }

  7. #6
    inviteafa9cf6f

    Re : Test_ADC ?

    Citation Envoyé par guillaume83 Voir le message
    Bonsoir, qu'est ce qui marche pas? la compilation , le test, l'affichage........
    Pour commencer , la syntaxe: if (25<=Pre<=40) me parait bizard.
    J'aurai écris: if((25<=Pre)&(Pre<=40))
    @+
    exactement j'ai déjà changé la syntaxe et c'est bon merci

  8. #7
    inviteafa9cf6f

    Re : Test_ADC ?

    Citation Envoyé par PA5CAL Voir le message
    Bonsoir

    guillaume83 a parfaitement raison. En écrivant « 25<=Pre<=40 », tu réalises en fait l'évaluation de l'expression « (25<=Pre)<=40 ».

    Si par exemple Pre=10, alors « 25<=Pre » est FAUX et vaut 0. Comme 0≤40, alors le résultat retourné est VRAI, alors qu'on attend FAUX.

    Plus généralement, lorsque « 25<=Pre » est FAUX et vaut 0, la valeur retournée est VRAI car comme 0≤40, et lorsque « 25<=Pre » est VRAI et vaut 1, la valeur retournée est VRAI car comme 1≤40. Donc la valeur retournée est toujours VRAI quelle que soit la valeur de Pre.
    Pffff

    oui je sais que je ne suis dans la bon route d’après votre explication
    normalement pour la programmation des pics je travaille en assembleur mais en raison de simplifier les choses j'ai pensé d'utiliser Mikroc pro avec un petit bagage puisque je comprend bien d’après votre poste que vraiment je dois étudier le langage C

  9. #8
    inviteafa9cf6f

    Re : Test_ADC ?

    Citation Envoyé par paulfjujo Voir le message
    bonsoir,


    Comme l'a remarqué Guillaume83, ta syntaxe de comparaison est ORIGINALE.
    et donc j'abonde dans son sens.

    de plus:
    Code:
    Pre = 0.10861*Radc+10,5555;
    // test
    if (25<=Pre<=40){
    IntToStr(Pre, Text);

    il y a melange de syntaxe ( point et virgule) pour les parties decimales.
    la variable Pre devrait etre au moins un flotant (single)
    vu l'usage de valeurs flotante dans les calculs.
    donc le IntToStr(Pre) ne donnera rien de bon.

    comment est initialisé Pre


    ne manque -til pas des parentheses sur le ELSE
    Code:
    else
    {
    if (temp0>50){UART1_Write_Text("Pression_limite maximum");
    Delay_ms(100);}
    else UART1_Write_Text("Pression_limite minimum");
    Delay_ms(100);
    }
    Non rien ne manque pour l'else.

Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...