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

question sur arduino mega2560



  1. #1
    cougar73

    question sur arduino mega2560


    ------

    bonjour

    j ai fais des recherches sur google pour faire une mesure différentiel en tension sur arduino je n ai pas trouvé. faut il faire la mesure avec des AOP en différentiel?

    merci d avance pour vos réponses bonne journée

    -----

  2. Publicité
  3. #2
    PA5CAL

    Re : question sur arduino mega2560

    Bonjour

    La référence à lire absolument est la datasheet du microcontrôleur de la carte, en l'occurrence celle de l'ATmega2560, disponible sur le site de son constructeur Atmel (par ici - attention, le document concerne cinq circuits de la même famille présentant quelques différences).

    On peut y lire qu'il est possible d'utiliser certaines paires d'entrées analogiques afin de réaliser une mesure différentielle, et d'appliquer dans certains cas un coefficient multiplicateur (×10 ou ×200) au résultat. Les différentes façons de procéder y sont également expliquées.

    Par conséquent, il n'est a priori pas nécessaire de mettre en œuvre un AOP dans le seul but de réaliser la différence entre deux signaux.

    Mais cela n'empêche pas qu'un AOP puisse être nécessaire pour d'autres raisons.

  4. #3
    cougar73

    Re : question sur arduino mega2560

    bonjour

    si je prend l exemple de la datasheet page 281, devant ADMUX est marqué 0xFB s est là ou est placé le registre??
    si je suis l exemple ADMUX s est une conversion différentiel donc pour choisir les entrées analogique ADC3-ADC2 avec le gain 10* en binaire 01101
    RFS1 RFS0 =11
    ADLAR je pense qu il doit etre a 1?

    AMUX=11101101 juste?

    pas évident a comprendre je suis nul en anglais.

    merci d avance PA5CAL

  5. #4
    PA5CAL

    Re : question sur arduino mega2560

    Citation Envoyé par cougar73 Voir le message
    si je prend l exemple de la datasheet page 281, devant ADMUX est marqué 0xFB s est là ou est placé le registre??
    Non. L'adresse du registre est 0x7C, comme indiqué au §26.8.1 juste au-dessous, écrit en petit, à gauche des cases donnant le nom des bits du registre. Mais cette adresse n'est pas importante, puisque sous l'environnement Arduino, il suffit d'utiliser « ADMUX » pour la désigner.

    Le 0xFB qui est indiqué est le contenu inscrit dans le registre dans cet exemple. Sa signification est donnée entre parenthèses juste après. Toutefois, comme tu l'indiques, IL Y A UNE ERREUR DANS LE DOCUMENT À CET ENDROIT. En effet, le gain indiqué ne correspond pas à la description. 0xFB correspond à un gain ×1, et c'est 0xED qui correspond à un gain ×10.

    0xFB est égal à 11111011 en binaire. D'après la doc, avec ADMUX=0xFB les bits du registre sont positionnés à :
    REFS1:0 = 11 : référence interne de 2,56V avec une capa sur la pin AREF (voir tableau 26-3, page 281)
    ADLAR = 1 : le résultat est collé à gauche dans le double registre ADCL:ADCH (voir page 282)
    MUX4:0 = 11011 : avec MUX5=0, on mesure (ADC3–ADC2)×1 (voir tableau 26-4, page 283)

    Et 0xED est égal à 11101101 en binaire. D'après la doc, avec ADMUX=0xED les bits du registre sont donc positionnés à :
    REFS1:0 = 11 : référence interne de 2,56V avec une capa sur la pin AREF (voir tableau 26-3, page 281)
    ADLAR = 1 : le résultat est aligné à gauche dans le double registre ADCL:ADCH (voir page 282)
    MUX4:0 = 01101 : avec MUX5=0, on mesure (ADC3–ADC2)×10 (voir tableau 26-4, page 283)

    NB: sur l'ATmega2560, MUX5 est le bit 4 du registre ADCSRB, et indique si l'on s'adresse aux canaux 0 à 7 (MUX5=0) ou bien aux canaux 8 à 15 (MUX5=1).

    Le code correspondant à la conversion devrait ressembler à ceci :
    Code:
    int analogRead_3_2_x10()
    {
      uint8_t low, high;
    
      // met MUX5 à 0
      ADCSRB &= 0xF7;
    
      // paramètre l'opération : mesure de (ADC3–ADC2)×10, résultat aligné à gauche, référence interne 2,56V
      ADMUX = 0xED;
    
      // débute la conversion
      sbi(ADCSRA, ADSC);
    
      // attend la fin de la conversion (quand ADSC repasse à zéro)
      while (bit_is_set(ADCSRA, ADSC));
    
      // lit le résultat - le poids faible doit être lu IMPÉRATIVEMENT en premier !
      low  = ADCL; // poids faible
      high = ADCH; // poids fort
    
      // retourne le résultat recombiné
      return (high << 8) | low;
    }
    (Attention, non testé. Je l'ai juste écrit sur un coin de table.)

  6. #5
    cougar73

    Re : question sur arduino mega2560

    bonjour PA5CAL

    le int analogRead vous le déclarez en variable en entier?
    je ne sais pas trop ou le placer ce qui y a dans les {} je le placerais bien dans void setup?

    j avoue, je suis perdu la structure du code n est pas la même qu on a l habitude de voir pour une conversion simple.

    merci de vos réponses

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

    Re : question sur arduino mega2560

    analogRead_3_2_x10 est le nom d'une fonction qui retourne un int et dont le code exécutable est écrit entre la première { et la dernière } de mon exemple.

    Il s'agit d'une déclaration de fonction tout-à-fait basique en langage C.

    Cette fonction peut être appelée normalement depuis la fonction loop() du croquis Arduino, par exemple.
    Dernière modification par PA5CAL ; 09/05/2014 à 10h13.

  9. Publicité

Sur le même thème :

Discussions similaires

  1. Question (bête) sur arduino ..
    Par t94 dans le forum Électronique
    Réponses: 11
    Dernier message: 30/08/2013, 09h53
  2. Question d'Arduino
    Par MRTgang dans le forum Électronique
    Réponses: 3
    Dernier message: 03/07/2013, 14h12
  3. Question d'Arduino
    Par MRTgang dans le forum Électronique
    Réponses: 0
    Dernier message: 30/06/2013, 10h06
  4. question programmation carte arduino
    Par vincedu56 dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 11/02/2013, 20h30
  5. Débutant Arduino, question de choix
    Par Forhorse dans le forum Électronique
    Réponses: 2
    Dernier message: 30/04/2012, 08h45