Advertisement
jgustavoam

Arduino 1.1 Vref calibração

Aug 1st, 2015
399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. // Medição da Tensão Vcc do Arduino ATmega328 - Gustavo Murta 01/ago/2015
  2. // http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
  3. // https://code.google.com/p/tinkerit/wiki/SecretVoltmeter
  4.  
  5. long readVcc() {
  6.   // Leitura da tensão de Referencia de 1.1V para calcular  AVcc
  7.   // Configura Referencia do ADC para Vcc
  8.      
  9.     ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  10.    
  11.   delay(2);                         // Aguarda estabilização da Tensão Vref
  12.   ADCSRA |= _BV(ADSC);              // Inicia a conversão ADC
  13.   while (bit_is_set(ADCSRA,ADSC));  // Comeca a leitura
  14.  
  15.   uint8_t low  = ADCL;              // Lê primeiro o registrador ADCL e depois o ADCH  
  16.   uint8_t high = ADCH;              // destrava os dois registradores
  17.  
  18.   long result = (high<<8) | low;    // Formata o resultado
  19.  
  20.   result = 1137254L / result;       // Cálculo do Vcc (em mV); 1137254 = 1.1106*1024*1000
  21.   return result;                    // Vcc em millivolts
  22.   }
  23.  
  24.   // Primeiro readVcc = 4962 mV  e medido com multimetro = 5,01 V
  25.   // result = 1126400L / result; // Primeiro cálculo do Vcc (in mV); 1126400 = 1.1*1024*1000
  26.   //
  27.   // 1.1Vrefcalc = 1.1 * Vcc1 (Multimetro) / Vcc2 (funcao readVcc)
  28.   // escala = 1.1Vrefcalc * 1024 * 1000
  29.   // escala = 1137254
  30.   // Após calibração => medido = 5,01 V e readVcc = 5,009 V
  31.   // Despreze sempre a primeira leitura
  32.  
  33.  void setup() {
  34.   Serial.begin(9600);
  35. }
  36. void loop() {
  37.   Serial.print("Vcc = " );
  38.   Serial.print( readVcc(), DEC );
  39.   Serial.println(" mV" );
  40.   delay(1000);
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement