#define ADMUX *(volatile char*)0x7C
#define ADCSRB *(volatile char*)0x7B // ADC Control and Status Register B
#define ADCSRA *(volatile char*)0x7A
#define ADCL *(volatile short*)0x78
#define ADCH *(volatile char*)0x79
#define DIDR0 *(volatile char*)0x7E //digital input disable register 0
//#define DIDR2 *(volatile char*)0x7D
void adcInit();
short adc_fun();
void ADC_vect(void) __attribute__((signal, used, externally_visible));
volatile long res;
void setup() {
Serial.begin(9600);
adcInit();
}
void loop() {
}
void adcInit(){
ADMUX = 0x00; //AREF, Rigth Adjust, ADC0
ADCSRA = 0x8F; // ADC EN, Prescalar 128
ADCSRB = 0x01; // Analog comparator mode
DIDR0 = 0X01; //Digital Input Disable on ADC channel 0
}
short adc_fun(){
ADCSRA |= 0x40; //Start conversion
while(!(ADCSRA & 0x10));
ADCSRA |= 0x10; //clear ADCIF by writing 1 to it
//return(ADCH<<8);
return(ADCL); //return ADCL itself will be 10-bit...no need to include ADCH
}
void ADC_vect(void) {
res = adc_fun();
Serial.print(res*0.0048875855,3);
Serial.print("V ");
Serial.println(res, BIN);
delay(1000);
}