Muszę powrócić do tematu o którym częściowo już kiedyś pisałem. Piszę aktualnie obsługę przetwornika przez przerwanie, dane z pięciu czujników.
Przetwornik inicjowany w następujący sposób
Gdzie currentadc jest zmienną
.
Przerwanie obsłużone tak:
adcvalue przechowuje aktualnie sczytane dane, które są kopiowane do tablicy sensory po każdej serii.
Wynik jest taki, że dane w tablicy sensory są jakieś dziwne - odczytując sensory[4] otrzymuję sensory[3], reszta też pomieszana lub w ogóle nic nie zapisane.
Gdzie tkwi błąd? Przejrzałem już masę artykułów, postów, próbowałem na różne sposoby i nie działa.
Przetwornik inicjowany w następujący sposób
void adc_init(void)
{
ADMUX = currentadc;
ADCSRA = (_BV(ADEN)|_BV(ADIE)| _BV(ADFR)|_BV(ADSC)|_BV(ADPS1)|_BV(ADPS2));
}Gdzie currentadc jest zmienną
volatile uint8_t currentadc =0;Przerwanie obsłużone tak:
ISR(ADC_vect)
{
adcvalue[currentadc] = ADCW;
if(++currentadc == 5)
{
currentadc = 0;
for(int i=0; i <5; i++)
sensory[i] = adcvalue[i];
}
ADMUX = currentadc;
}
adcvalue przechowuje aktualnie sczytane dane, które są kopiowane do tablicy sensory po każdej serii.
Wynik jest taki, że dane w tablicy sensory są jakieś dziwne - odczytując sensory[4] otrzymuję sensory[3], reszta też pomieszana lub w ogóle nic nie zapisane.
Gdzie tkwi błąd? Przejrzałem już masę artykułów, postów, próbowałem na różne sposoby i nie działa.