Yahoo refuse tous les emails du site. Si vous avez une adresse chez un autre prestataire, c'est le moment de l'utiliser ;)

En cas de soucis, n'hésitez pas à aller faire un tour sur la page de contact en bas de page.

Code Arduino / AVR permettant de mesurer la tension d'alimentation du microcontrôleur (Arduino UNO uniquement)

par skywodd | | Langue : C++ | Licence : GPLv3

Description :

Code Arduino / AVR permettant de mesurer la tension d'alimentation du microcontrôleur.

Compatible avec les microcontrôleurs ATMega328p uniquement.

Code source :

Voir le code source brut | Télécharger readvcc.ino | Télécharger readvcc.ino.zip

/**
 * Code Arduino / AVR permettant de mesurer la tension d'alimentation du microcontrôleur.
 */

/* Fonction setup() */
void setup() {
 
  /* Initialisation du port série */
  Serial.begin(115200); 
  Serial.println(F("VCC-O-Meter"));
}

/** Mesure la référence interne à 1.1 volts */
unsigned int analogReadReference(void) {
  
  /* Elimine toutes charges résiduelles */
  ADMUX = 0x4F;
  delayMicroseconds(5);
  
  /* Sélectionne la référence interne à 1.1 volts comme point de mesure, avec comme limite haute VCC */
  ADMUX = 0x4E;
  delayMicroseconds(200);
  
  /* Active le convertisseur analogique -> numérique */
  ADCSRA |= (1 << ADEN);
  
  /* Lance une conversion analogique -> numérique */
  ADCSRA |= (1 << ADSC);
  
  /* Attend la fin de la conversion */
  while(ADCSRA & (1 << ADSC));
  
  /* Récupère le résultat de la conversion */
  return ADCL | (ADCH << 8);
}

/* Fonction loop() */
void loop() {
  
  /* 
   * Idéalement :
   * VCC = 5 volts = 1023
   * Référence interne = 1.1 volts = (1023 * 1.1) / 5 = 225
   * 
   * En mesurant la référence à 1.1 volts, on peut déduire la tension d'alimentation réelle du microcontrôleur
   * VCC = (1023 * 1.1) / analogReadReference()
   */
  float tension_alim = (1023 * 1.1) / analogReadReference();
  Serial.println(tension_alim, 3);
  delay(1000);
}