Estoy usando una mini placa de XP con Atmega328PB de Atmel. Estoy tratando de usar la interrupción ADC, sin embargo no puedo hacer que se dispare. Aquí está el código con el que tengo un problema:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(ADC_vect){
PORTC ^= (1<<PINC2);
}
int main(void)
{
DDRC |= (1<<PINC2); //pin 2 as output
DDRC &= ~(1<<PINC3); //adc pin as input
sei();
ADMUX |= (1<<REFS0); //reference voltage VCC
ADMUX |= (1<<MUX0);
ADMUX |= (1<<MUX1);// channel 3
ADCSRA |= (1<<ADPS2);//
ADCSRA |= (1<<ADPS1);//
ADCSRA |= (1<<ADPS0);//prescaler to 128
ADCSRA |= (1<<ADATE);//auto trigger enable
ADCSRA |= (1<<ADIE); //adc interrupt enable
ADCSRA |= (1<ADEN); //adc enable
ADCSRA |= (1<< ADSC); //start conversion
while (1)
{
}
}
Según tengo entendido, el código debería permitir una conversión constante en un modo de ejecución libre con una frecuencia de 16MHz / 128, y cada vez que se completa la conversión, ADC_vect debe disparar el PIN2 de alternancia del puerto C. El problema es que no 't Supongo que no estoy inicializando correctamente el ADC, sin embargo no puedo identificar el punto donde el problema es.
EDIT : Después de señalar que el adc no se estaba ejecutando en un modo de ejecución libre, borré los bits ADTS. Sin embargo, todavía no podía cambiar el pin. Creo que algo más tiene la culpa aquí.