Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Medição da Tensão Vcc do Arduino ATmega328 - Gustavo Murta 01/ago/2015
- // http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
- // https://code.google.com/p/tinkerit/wiki/SecretVoltmeter
- long readVcc() {
- // Leitura da tensão de Referencia de 1.1V para calcular AVcc
- // Configura Referencia do ADC para Vcc
- ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
- delay(2); // Aguarda estabilização da Tensão Vref
- ADCSRA |= _BV(ADSC); // Inicia a conversão ADC
- while (bit_is_set(ADCSRA,ADSC)); // Comeca a leitura
- uint8_t low = ADCL; // Lê primeiro o registrador ADCL e depois o ADCH
- uint8_t high = ADCH; // destrava os dois registradores
- long result = (high<<8) | low; // Formata o resultado
- result = 1137254L / result; // Cálculo do Vcc (em mV); 1137254 = 1.1106*1024*1000
- return result; // Vcc em millivolts
- }
- // Primeiro readVcc = 4962 mV e medido com multimetro = 5,01 V
- // result = 1126400L / result; // Primeiro cálculo do Vcc (in mV); 1126400 = 1.1*1024*1000
- //
- // 1.1Vrefcalc = 1.1 * Vcc1 (Multimetro) / Vcc2 (funcao readVcc)
- // escala = 1.1Vrefcalc * 1024 * 1000
- // escala = 1137254
- // Após calibração => medido = 5,01 V e readVcc = 5,009 V
- // Despreze sempre a primeira leitura
- void setup() {
- Serial.begin(9600);
- }
- void loop() {
- Serial.print("Vcc = " );
- Serial.print( readVcc(), DEC );
- Serial.println(" mV" );
- delay(1000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement