Den Zugriff auf adc_raw in deinem Hauptprogramm hast du atomar?
Wie müsste ein atomarer Zugriff denn aussehen? Da ich mich erst seit kurzem mit der Programmierung beschäftige kann ich damit nicht viel anfangen.
Wenn ich das in einem anderen Beitrag richtig verstanden habe, folgendermaßen:
Code:
volatile uint16_t  ADC_raw;

SIGNAL (SIG_ADC)
{
	ADC_raw = ADC;
}

// Lesen:
...
   uint16_t wert;
   
   wert = adc_wert;
...   
   if (wert >= 512)
...
oder habe ich da was falsch verstanden?

Gruß Matthias