He podido encontrar el código a continuación, tratando de medir los voltajes de tres canales usando el método de interrupción. Si bien el código se ejecuta sin errores de aby, todavía no puedo mostrar nada en el lcd después de haber medido. No soy un profesional en cosas avr, solo comencé hace unos meses. Cualquier ayuda es muy apreciada '
ISR(ADC_vect) //selecting between multiple adc channels
{
char buffer[10];
uint8_t theLow = ADCL;
uint16_t theTenBitResult = ADCH<<8 | theLow;
switch(ADMUX)
{
case 0x20:
//calculate temperature
temperature = ((theTenBitResult) * 1024/5);
_delay_ms(10);
ADMUX = 0x21;
break;
case 0x21:
//calculate and print voltage
voltage = ((theTenBitResult * 1024/5) * (1324675/324675)); //1M plus 300k voltage divider resistor values
dtostrf(voltage, 5, 2, buffer);
//sprintf(buffer, "%f", voltage); //as lcd library does not include int and float conversion to string is necessary
lcd_gotoxy(11,0);
lcd_puts(buffer);
_delay_ms(10);
ADMUX = 0x22;
break;
case 0x22:
//calculate and print current
current = ((theTenBitResult * 1024/5) * 1.5); //1.5 is the maximum current range expected
lcd_gotoxy(11,1);
sprintf(buffer, "%f", current);
lcd_puts(buffer);
_delay_ms(10);
ADMUX = 0x20;
break;
default:
//don,t expect any value here
break;
} ;
ADCSRA |= 1<<ADSC;
}'