Hey all,
I am trying to use all seven analog pins of the arduino nano in interrupt mode but only a few gave me an acceptable value.
A funny thing: If i set the MUX register for A4-7 one bit higher A4-7 are working fine.
What's wrong?
Thank You!
Best regards Luca
void init_analogRead(void) {
ADMUX = 0;
//ADC aktivieren
ADCSRA |= (1 << ADEN);
//Teilungsfaktor auf 128
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
//Kanal A0
//interne 5V Ref
ADMUX |= (1 << REFS0);
//AutoTrigger einschalten
ADCSRA |= (1 << ADATE);
//Triggerbedingung freilaufend
ADCSRB &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0));
//globale Interrupts aktivieren
sei();
//ADC Interrupt einschalten und starten
ADCSRA |= (1 << ADIE) | (1 << ADSC);
}
static uint8_t state = 1;
ISR(ADC_vect) {
switch (state) {
case 1: {//Buck A1
voltage7V = ADC;
state = 2; //Vorbereitung nächster CASE
ADMUX &= 0xf0;
ADMUX |= 0x01;
}break;
case 2:{ //Kl30 A2
voltage30V = ADC;
//Vorbereitung nächster CASE
state = 3;
ADMUX &= 0xf0;
ADMUX |= 0x04;
}break;
case 3:{ //CPU A1
voltageCPU = ADC;
state = 4; //Vorbereitung nächster CASE
ADMUX &= 0xf0;
ADMUX |= 0x05;
}break;
case 4:{ // Adresspin A4
voltageAdress0 = ADC;
state = 5; //Vorbereitung nächster CASE
ADMUX &= 0xf0;
ADMUX |= 0x06;
}break;
case 5:{ // Adresspin A5
voltageAdress1 = ADC;
state = 6; //Vorbereitung nächster CASE
ADMUX &= 0xf0;
ADMUX |= 0x07;
}break;
case 6:{ // Adresspin A6
voltageAdress2 = ADC;
state = 7; //Vorbereitung nächster CASE
ADMUX &= 0xf0;
ADMUX |= 0x08;
}break;
case 7:{ // Adresspin A7
voltageAdress3 = ADC;
state = 1; //Vorbereitung nächster CASE
ADMUX &= 0xf0;
}break;
}
}