Tegangan Referensi Internal ATmega328

ATmega328 memiliki tegangan referensi internal, 1.1 Volt, sementara ATmega32 memiliki tegangan referensi internal 2.56 Volt. Besaran ini dapat digunakan untuk menghitung hasil konversi ADC, ketika menggunakan tegangan referensi AVCC. Sebagaimana kita ketahui, hasil konversi A/D sangat dipengaruhi oleh besaran tegangan referensi.

ADC = ( Vin * 1024 ) / Vref

Berikut adalah sebuah contoh program untuk membaca tegangan referensi internal, kemudian menggunakannya sebagai koreksi untuk referensi AVCC.

long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1126400L / result; // Back-calculate AVcc in mV
  return result;
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println( readVcc(), DEC );
  delay(1000);
}