Gast
#1456635
Hallo Leute, ich bin noch Anfänger, wenn es ums µC-programmieren geht. Deshalb würde ich mich sehr über einige Tipps freuen!;) Mein Ziel ist es gerade ein analoges Signal abzutasten und diese Werte nun in ein Ringpuffer zuspeichern, um das Signale zu analysieren und eventuell den zeitl. Abstand der auftretenden Maxima zu berechnen/auszugeben. Abtasten möchte ich mit 1kHz. (Zwischen dem Samplen und dem "Einlesen" in den Ringspeicher wäre noch ein digitales Tiefpassfilter erforderlich.) Ich hab es mir nun so gedacht, dass ich das Abtasten mit einem entsprechenden TIMER-Interrupt realisieren kann. In dieser ISR wird dann jeweils ein Wert mittels SPI von einem externen Analog-Digital-Wandler geholt. Nun müssen die Werte ja nacheinander in den Ringpuffer geschrieben werden. Mein "Gedanken-Problem" liegt nun daran, dass ich schon öfters gelesen habe, dass man nicht so viel in einer ISR reinschreiben soll. Sie dient u.a. halt nur, wie in meinem Bsp., zum Abholen des ADC-Wertes jede Millisekunde. Ich meine, Werte in ein Array zu schreiben und dabei den Schreibpointer zu inkrementieren stellt nicht das große Problem dar. Nur müsste dies doch auch mit in der Interrupt Service Routine stehen, oder? Eigentlich dachte ich, dass diese Aufgaben dann eher wieder in der Hauptschleife des Programms gehören. Aber der Ringpuffer muss ja nur jede Millisekunde neu gefüttert werden und wenn das Ganze in der Hauptschleife steht, dann wird das Schreiben ja öfters als 1kHz ausgeführt, da der µC mit einem Takt von 48MHz läuft. Folglich wären dann ja mehrere gleiche Werte nacheinander in diesem Ringspeicher vorhanden (bis dann der neue Wert aus der ISR vom ADC bereitgestellt wird)..!? Wie kann man dieses Problemchen lösen und die Aufgabe am klügsten bewerkstelligen? Wie macht man sowas "normalerweise"? Ich hoffe, Ihr könnt mir helfen und hilfreiche Tipps geben!;) Viele Grüße..Martin