Hi, mein Ziel ist es, in einem FreeRTOS-Projekt den ADC genau 44100 mal in der Sekunde auszulesen. Mein erster Ansatz, den Systick auf 44,1kHz einzustellen, war wohl nichts - man muss wohl über einer Millisekunde bleiben, sonst funktionieren zumindest die Makros in FreeRTOS nicht mehr. In die anderen Timer muss ich mich noch einlesen, bin jetzt aber davon ausgegangen, dass die sich alle auf den Systick beziehen müssen. Wie realisiert man sowas typischerweise - zusätzliche Taktquelle? Oder ADC mit eigenem Takt, der dann ein Interrupt auslöst? Gruß Henrik
mojn, gibt mehrere moeglichkeiten... aber wenn du dein OS nach dem ADC takten wolltest, nehme ich an, dein ganzes programm macht nichts anderes, als den ADC auszulesen? dann ist es einfacher ohne OS zu arbeiten und in einer main loop einfach zu warten mit ner nop-schleife bis zum nächsten ADC-auslesevorgang. ansonsten nimm einen timer (einen echten und nicht einen OS-timer), der periodisch einen interrupt auslöst. in der interrupt service routine loest du dann das ADC-auslesen aus. guck mal ob der ADC auf deinem uC auch ueber einen event getriggert werden kann. dann kann der timer den ADC-auslesevorgang direkt ausloesen ohne einen interrupt. damit spart man sich die ausfuehrung einer interrupt service routine. lg
Hallo Henrik, Ich habe so etwas ähnliches mit einem STM32F4 gemacht. Zwar keine 44,1kHz aber das Prinzip bleibt gleich. Mein Ansatz war es, einen der Hardware-Timer zu verwenden, und den A/D Wandler per Timer-Interrupt zu triggern. Dazu habe ich außerdem den A/D Wandler so aufgesetzt, dass er die Samples per DMA überträgt. So brauchte ich nur auf den Completion Interrupt des DMA Streams zu reagieren.
ich habe das auch mal mit dem LPC1769 gemacht. Als Übung um mal den LPC und RTOS zu testen, deshalb ist der Code etwas unaufgeräumt und es stimmen nicht alle Kommentare was die Frequenzen angeht. Enthält aber die nötigen Initialisierungen und auch das RTOS Interrupthandling, vielleicht hilft es. Zustätzlich habe ich ein OLED Display dran und die FFT vom Eingangssignal dargestellt, das kann natürlich raus. Für die FFT habe ich die CMSIS Lib verwendet.
Henrik P. schrieb: > In die anderen Timer muss ich mich noch einlesen, bin jetzt aber > davon ausgegangen, dass die sich alle auf den Systick beziehen müssen Nö, müssen sie nich. Die beziehen sich auf den (evtl. via PCLKSELx geteilten) Systemtakt oder haben die Möglichkeit eines externen Eingangs für den Zähler. Übrigens kann man den ADC via Timer auch ohne Interrupt triggern - dazu sollte man aber das Errata-sheet konsultieren, es funktioniert nicht ganz alles was im Handbuch beschrieben wird.
Jim Meba schrieb: [...] > Übrigens kann man den ADC via Timer auch ohne Interrupt triggern - dazu > sollte man aber das Errata-sheet konsultieren, es funktioniert nicht > ganz alles was im Handbuch beschrieben wird. Dass man den ADC via Timer direkt triggern kann, das wusste ich. Nach Deinem Kommentar habe ich auch nochmal in den Errata nachgeschaut, aber nichts gefunden, was ich jetzt direkt dem Thema "ADC via Timer triggern" in Verbindung bringen konnte. War das jetzt ein eher allgemeiner Hinweis oder gibt's da tatsächlich Probleme, die ich evtl. übersehen habe?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.