Carte Romeo

De Wiki Arobose
(Commande des moteurs)
(Communication XBee)
Ligne 315 : Ligne 315 :
 
     }
 
     }
 
   return 0;
 
   return 0;
 +
}
 +
</syntaxhighlight>
 +
 +
== Conversion analogique / numérique ==
 +
 +
Les capteurs que nous utilisons retourne généralement une information (tension) sous forme analogique. Pour exploiter cette information, le microcontroleur doit la convertir en signal numérique.
 +
 +
Le convertisseur analogique / numérique de l'ATMEGA32U4 est un convertisseur 10 bits soit une précision de 1024 points. En se basant sur une tension de référence (généralement la tension d'alimentation), il va, par approximation successive, définir la valeur numérique correspondante à la tension.
 +
 +
Dans un premier temps, nous allons configurer le convertisseur. Le microcontroleur a 6 entrées analogiques sur le port F qu'il faut configurer en entrée. La tension de référence pour effectuer la conversion est la tension d'alimentation Vcc = 5V.
 +
<syntaxhighlight lang="c">
 +
/* Voltage reference : Vcc
 +
* Right adjust result
 +
* and with clock prescaled to system clock divided by 1024 */
 +
void
 +
adc_setup(void)
 +
{
 +
  /* initialize PORTF pins as input pin */
 +
  DDRF = 0x00;
 +
 +
  /* set ADC prescale factor to 1024 */
 +
  ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
 +
 +
  /* Vcc is reference voltage */
 +
  ADMUX |= (1 << REFS0);
 +
 +
  /* Set ADC to Free-Running Mode */
 +
  ADCSRB = 0;
 +
 +
  /* adc enable */
 +
  ADCSRA |= (1 << ADEN);
 +
}
 +
</syntaxhighlight>
 +
 +
Ensuite, nous allons lire la valeur de chaque entrée en démarrant la conversion.
 +
<syntaxhighlight lang="c">
 +
void
 +
adc_start_conversion(uint8_t pin)
 +
{
 +
  //adc_enable(pin);
 +
  ADMUX = (1 << REFS0) | pin;
 +
  DIDR0 = (1 << pin);
 +
  ADCSRA |= (1 << ADSC); // adc start conversion
 +
}
 +
 +
uint16_t
 +
adc_read(uint8_t pin)
 +
{
 +
  uint8_t low;
 +
  adc_start_conversion(pin);
 +
  while (ADCSRA & (1 << ADSC))
 +
    ;                    // wait for result
 +
  low = ADCL;  // must read LSB first
 +
  return (ADCH << 8) | low;    // must read MSB only once!
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
[[Category:Produits]]
 
[[Category:Produits]]

Version du 10 juillet 2013 à 14:42

Outils personnels
Catégories