Kleiner Tipp wie man solche Probleme auch ohne Oszi erkennen kann:
Bei diesem Code wird ErrCnt um 1 inkrementiert falls ein Interrupt ausgelöst wird, bevor die Datenverarbeitung abgeschlossen ist.Code:bool bNewData = false; uint8_t ErrCnt = 0; void ISR() { if (!bNewData) bNewData = true; else ErrCnt++; } void main() { while(1) { if (bNewData) { // Hier Daten abholen und auf SD-Karte speichern ... // Dann Flag zurücksetzen bNewData = false; } } }
Auf dem Display könntest du dann z.B. ausgeben lassen wie viele Interrupts pro Sekunde du "verpasst" weil das Speichern zu lange dauert. Ist der Wert größer als 0, könnte ein Ringpuffer (FIFO) eventuell Abhilfe schaffen.
Lesezeichen