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

[Arduino] Valeurs identiques sur sorties paires et impaires



  1. #1
    sori2

    [Arduino] Valeurs identiques sur sorties paires et impaires


    ------

    Bonjour,

    J'ai branché 4 capteurs analogiques à mon arduino via une carte analogique/numérique I2C (https://www.robotshop.com/en/4-chann...interface.html).
    J'ai utilisé 2 scripts différents et à chaque fois j'obtiens les mêmes valeurs issues des capteurs pour les entrées 1 et 3 (32 par exemple) et 2 et 4 (2873 par exemple).
    Pensant que la carte était HS, j'en ai acheté une autre et j'obtiens la même chose.

    Auriez-vous une idée de l'origine de mon problème?

    Cordialement,


    Nom : Capture.JPG
Affichages : 139
Taille : 31,0 Ko

    -----
    Dernière modification par sori2 ; 07/04/2021 à 09h57.

  2. Publicité
  3. #2
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Voici le code:
    Code:
    MCP3428 MCP_1(0x68); // Declaration of MCP3428: A2, A1, A0 bits (000, 0x68)
    MCP3428 MCP_2(0x6E);
    
    void setup()
    {
        // Start serial communication and set baud rate = 9600
        Serial.begin(9600);
        Serial.println("MCP3428 Conversion Analogique en digital");
        Serial.println("        ************************************            ");
        Serial.println("        ");
        delay(500);
    }
    
    void loop()
    {
        byte error1;
        int8_t address1;
    
        address1 = MCP_1.devAddr;
        // The i2c_scanner uses the return value of
        // the Write.endTransmisstion to see if
        // a device did acknowledge to the address.
        Wire.beginTransmission(address1);
        error1 = Wire.endTransmission();
        if (error1 == 0)
        {
            long Raw_ADC;
    
            // MCP3428 is configured to channel 1 with 14 bits resolution, one shot mode and gain defined to 1
            // This arrangement of the mentioned paarmeters can be changed as per convenience
            MCP_1.SetConfiguration(1,16,0,1);
    
            // Note that the library waits for a complete conversion
            Raw_ADC = MCP_1.readADC();
            // raw_adc = raw_adc * LSB(1 mV)/PGA for PGA = 1;       // 12-bit Resolution
            // raw_adc = raw_adc * LSB(250 µV)/PGA for PGA = 1;     // 14-bit Resolution
            // raw_adc = raw_adc * LSB(62.5 µV)/PGA for PGA = 1;    // 16-bit Resolution
    
            // Output to the Screen
            Serial.print("Débit: ");
            Serial.println(Raw_ADC);
            //1-2
            MCP_1.SetConfiguration(2,16,0,1);
            Raw_ADC = MCP_1.readADC();
            Serial.print("Pression: ");
            Serial.println(Raw_ADC);
            //1-3
            MCP_1.SetConfiguration(3,16,0,1);
            Raw_ADC = MCP_1.readADC();
            Serial.print("T° moteur: ");
            Serial.println(Raw_ADC);        
            //1-4
            MCP_1.SetConfiguration(4,16,0,1);
            Raw_ADC = MCP_1.readADC();
            Serial.print("V° moteur: ");
            Serial.println(Raw_ADC);      
    
            
        }
        else
        {
            Serial.println("La première carte I2C est déconnectée");
            Serial.println(" ");
            Serial.println("        ************        ");
            Serial.println(" ");
        }
    Dernière modification par Antoane ; 07/04/2021 à 10h07. Motif: remplacement balises quote par code

  4. #3
    jiherve

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    bonjour,
    c'est bien un MCP3428 qui est monté ?
    car il existe deux petits frères en bicanal .
    JR
    l'électronique c'est pas du vaudou!

  5. #4
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Merci pour ce message.

    Oui c'est bien ça.
    Et j'utilise le script comme indiqué ici: https://community.ncd.io/t/program-h...el-sensor/2420, le script est ici comme c'est indiqué : https://github.com/ncdcommunity/Ardu...t_4Channel_ADC : Arduino_Library_MCP3428_16Bit_ 4Channel_ADC
    Dernière modification par sori2 ; 07/04/2021 à 13h28.

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

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    mama mia... j'ai regardé le code de la "librairie"... ça fait peur, c'est codé avec les pieds par un cul de jatte...

    il faudrait loguer le mot de contrôle envoyé au chip pour vérifier...

    sinon, il y a une autre lib MCP342x qui a l'air moins pourrie... https://www.arduino.cc/reference/en/libraries/mcp342x/
    Jusqu'ici tout va bien...

  8. #6
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Merci pour cette réponse,

    J'ai essayé cette librairie en premier et le résultat est le même...
    Je ne sais pas comment on fait pour "loguer le mot de contrôle envoyé au chip", peux tu m'aiguiller et je fais...

    Cdlt,

  9. Publicité
  10. #7
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Précision: j'ai utilisé cette libraire que tu préconises en tt premier. Mais je n'ai pas réussi à l'utiliser car je ne savais pas quelle fonction mettre dans mon script.
    Du coup j'ai essayé celle jointe (aussi du site github).
    Donc pour utiliser celle que tu préconises, peux-tu m'aider stp à la modification de mon script (certaines fonctions n'ont pas le même nom j'imagine)?
    Merci
    Fichiers attachés Fichiers attachés
    Dernière modification par sori2 ; 07/04/2021 à 15h47.

  11. #8
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    J'ai vu qu'il y avait des exemple de scripts, je vais les utiliser... Je vous tiens au courant....

    Autrement j'ai testé mes entrées capteurs dans la carte analogique vers I2C et j'ai bien des ampérages compris entre 4 en 20 mA: 4 pour 0 et 7,22 mA pour 28°C.
    Dernière modification par sori2 ; 07/04/2021 à 15h52.

  12. #9
    polo974

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Citation Envoyé par sori2 Voir le message
    Merci pour cette réponse,
    ...
    Je ne sais pas comment on fait pour "loguer le mot de contrôle envoyé au chip", peux tu m'aiguiller et je fais...

    Cdlt,
    dans le header de la lib, mettre la ligne contenant "uint8_t config;" après la ligne contenant "public:" (ce qui permettra d'accéder à la variable, c'est pourri, mais rapide).

    dans ton source après chaque appel à MCP_1.SetConfiguration(...)
    ajoute:

    Serial.print("config: "); Serial.println(MCP_1.config);

    normalement, ça devrait donner 136, 168, 200 et 232


    tu peux aussi faire la même chose pour la ligne contenant uint8_t data[3];
    et après les MCP_1.readADC();
    ajouter:

    Serial.print("config lue: "); Serial.println(MCP_1.data[2]);

    normalement, ça devrait donner 136, 40, 72 et 104

    au fait, as-tu reçu un schéma et une doc de ta carte?

    sinon, pour la lib officielle (https://www.arduino.cc/reference/en/libraries/mcp342x/), il y a un peu de doc et un dossier d'exemples dans le github...
    Jusqu'ici tout va bien...

  13. #10
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Bonjour et merci,

    J'ai donc utilisé le script "ConvertandRead" qui est dans les exemples.
    J'obtiens des valeurs incohérentes:
    Channel 1 - 4 mA en entrée -> le script donne -> 768 à 770
    Channel 2 - 4 mA -> -992 à -1024
    Channel 3 - 7,2 mA -> 512 à 546
    Channel 4 - 4 mA -> 0

    Voici le script (je change la valeur du chanel ici: uint8_t err = adc.convertAndRead(MCP342x::ch annel4, MCP342x:neShot, ... ):
    Code:
    #include <Wire.h>
    #include <MCP342x.h>
    
    /* Demonstrate the use of convertAndRead().
     */
    
    
    // 0x68 is the default address for all MCP342x devices
    uint8_t address = 0x68;
    MCP342x adc = MCP342x(address);
    
    void setup(void)
    {
      Serial.begin(9600);
      Wire.begin();
    
      // Enable power for MCP342x (needed for FL100 shield only)
      pinMode(9, OUTPUT);
      digitalWrite(9, HIGH);
      
      // Reset devices
      MCP342x::generalCallReset();
      delay(1); // MC342x needs 300us to settle, wait 1ms
      
      // Check device present
      Wire.requestFrom(address, (uint8_t)1);
      if (!Wire.available()) {
        Serial.print("No device found at address ");
        Serial.println(address, HEX);
        while (1)
          ;
      }
    
    }
    
    void loop(void)
    {
      long value = 0;
      MCP342x::Config status;
      // Initiate a conversion; convertAndRead() will wait until it can be read
      uint8_t err = adc.convertAndRead(MCP342x::channel4, MCP342x::oneShot,
               MCP342x::resolution16, MCP342x::gain1,
               1000000, value, status);
      if (err) {
        Serial.print("Convert error: ");
        Serial.println(err);
      }
      else {
        Serial.print("Value: ");
        Serial.println(value);
      }
      
      delay(1000);
    }

    J'ai tenté de modifier la librairie comme tu l'indiques:
    j'ai ajouté au fichier "MCP342x.h" la ligne suivante (sous public donc):
    Code:
    public:
      uint8_t config;    //Modif avril
    Par contre dans mon script exemple, je ne trouve pas les lignes dont du parles, je n'ai donc pas pu les ajouter (j'ai regardé les autres scripts fournis en exemple et je n'ai pas trouvé ces lignes non plus):
    - MCP_1.SetConfiguration(...)
    - uint8_t data[3];
    - MCP_1.readADC();

    Enfin ci-joint le datasheet dont je dispose, venant du site vendeur: https://www.robotshop.com/en/4-chann...interface.html

    Peux-tu me consacrer encore un peu de temps?

    Merci de ton aide
    Dernière modification par sori2 ; 08/04/2021 à 09h55.

  14. #11
    polo974

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    euhhh, les modifs, c'était pour le 1er soft avec la librairie que tu avais... on l'oublie définitivement...

    bon, là, déjà, ça donne des résultats différents, donc il y a de l'espoir....

    coté doc, ce sont des guignols (oui, je suis dur), ils mettent la doc du composant, mais rien sur la carte...

    la doc du constructeur:
    https://store.ncd.io/product/4-chann...i2c-interface/
    onglet description: Needs External Power Supply to power up the 4-20mA Device. Ah ouais, mais quelle tension ? ? ?
    onglet drawings. schémas avec alim 12V

    ça y est, on sait qu'il faut une alim de 12V ! ! !

    sauvegarde les infos et l'image du schéma ! ! !


    Note: Set MCP3428 gain to one to read 0-40mA Signal, set the gain at two to read 0-20mA and 4-20mA signals. Needs External Power Supply to power up the 4-20mA Device.

    When resolution is set to 16-bit:
    1. at 4mA the raw ADC value will be around 5813
    2. at 20mA the raw ADC value will be around 29390.
    tu peux mettre les 4 canaux dans la boucle
    pour le moment, j'ai laissé la gain à 1, mais pour du 20mA, tu peux mettre à 2 (cf plus haut).
    (j'ai aussi ajouté le status (qui correspond au contrôle avec le bit 7 à 0).)
    Code:
    void loop(void)
    {
      long value = 0;
      Serial.println("");
      MCP342x::Config status;
      // Initiate a conversion; convertAndRead() will wait until it can be read
      uint8_t err = adc.convertAndRead(MCP342x::channel1, MCP342x::oneShot,
               MCP342x::resolution16, MCP342x::gain1,
               1000000, value, status);
      if (err) {
        Serial.print("Convert1 error: ");
        Serial.println(err);
      }
      else {
        Serial.print("Value1: ");
        Serial.println(value);
        Serial.print("status1: ");
        Serial.println(status);
      }
        err = adc.convertAndRead(MCP342x::channel2, MCP342x::oneShot,
               MCP342x::resolution16, MCP342x::gain1,
               1000000, value, status);
      if (err) {
        Serial.print("Convert2 error: ");
        Serial.println(err);
      }
      else {
        Serial.print("Value2: ");
        Serial.println(value);
        Serial.print("status2: ");
        Serial.println(status);
      }
        err = adc.convertAndRead(MCP342x::channel3, MCP342x::oneShot,
               MCP342x::resolution16, MCP342x::gain1,
               1000000, value, status);
      if (err) {
        Serial.print("Convert3 error: ");
        Serial.println(err);
      }
      else {
        Serial.print("Value3: ");
        Serial.println(value);
        Serial.print("status3: ");
        Serial.println(status);
      }
        err = adc.convertAndRead(MCP342x::channel4, MCP342x::oneShot,
               MCP342x::resolution16, MCP342x::gain1,
               1000000, value, status);
      if (err) {
        Serial.print("Convert error: ");
        Serial.println(err);
      }
      else {
        Serial.print("Value4: ");
        Serial.println(value);
        Serial.print("status4: ");
        Serial.println(status);
      }
      
      delay(1000);
    }
    bonne continuation...
    Jusqu'ici tout va bien...

  15. #12
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Re-bonjour,

    et merci,

    Voici ce que cela donne:

    Value1: 674 (pour 4 mA)
    status1: 0
    Value2: -984 (4,1 mA)
    status2: 0
    Value3: 160 (7,2 mA)
    status3: 0
    Value4: 0 (4,05 mA)
    status4: 0

    Et quand je passe le gain à 2, cela semble plus cohérent:

    Value1: 48 (4 mA)
    status1: 0
    Value2: 2050 (4,1 mA)
    status2: 8
    Value3: 8224 (7,2 mA)
    status3: 0
    Value4: 2 (4,05 mA)
    status4: 72

    - ce serait bon si 4mA se traduit en Value = 0 (et pas 5813);
    - il y a 2 status qui ne sont plus à zéro. Mais je ne comprends pas à quoi correspond cette variable?

    Qu'en penses-tu?
    Merci

    PS: ma carte est bien alimentée en 12V et mes capteurs sont alimentés aussi.

  16. Publicité
  17. #13
    polo974

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Ça a l'air assez incohérent comme résultats...
    Mais là j'ai pas trop le temps de creuser...
    Jusqu'ici tout va bien...

  18. #14
    sori2

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    Je comprends et je te remercie pour ton aide.
    Si je prends 4 mA -> 0 alors ça a l'air de marcher (valeurs qui grandissent comme il faut).

    Peux-tu me dire juste un truc: à quoi correspond le "status"?

    Merci,
    Bonne journée,

  19. #15
    umfred

    Re : [Arduino] Valeurs identiques sur sorties paires et impaires

    status c'est le registre de contrôle (cf la doc)

Discussions similaires

  1. Réponses: 26
    Dernier message: 22/12/2015, 11h44
  2. Fonctions paires/impaires
    Par Pretzel dans le forum Mathématiques du collège et du lycée
    Réponses: 7
    Dernier message: 10/12/2011, 18h13
  3. fonctions paires et impaires pour demin!!!
    Par kiara9 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 12/10/2008, 12h25
  4. Exemples de fonctions paires ou impaires
    Par nyu56 dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 06/09/2008, 11h20
  5. les fonctions paires ou impaires
    Par vanilla94 dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 20/12/2006, 18h46
Découvrez nos comparatifs produits sur l'informatique et les technologies.