Hallo, ich schaue mir gerade dieses Beispiel an, wie beim STM32 ein einziger Timer verwendet werden kann, um mehrere Ausgänge mit verschiedenen Frequenzen togglen zu lassen: http://www.longlandclan.yi.org/~stuartl/stm32f10x_stdperiph_lib_um/STM32F10x__StdPeriph__Examples_2TIM_2OCToggle_2main_8c_source.html#l00056 Dort wird der Timer eingestellt und wenn der Wert vom Counter der selbe Wert ist wie im Compare-Register (zB. TIM3CCR1), wird der Ausgang getoggelt. So weit, so gut. Nun wird das ganze auch für weitere Compare-Register/Ausgänge gemacht (wie in Zeile 00108). Wenn ich mir das ganze so anschaue (ohne ein STM32 vor mir zu haben), zählt doch der timer immerzu von 0 bis Ende und bei Übereinstimmung der Compare-Register toggeln die Ausgänge. Das würde aber bedeuten, die Frequenz ist bei allen Ausgängen die gleiche (nur eben mit einem delay zwischen den einzelnen Ausgängen). Kann mir jemand sagen wo mein Denkfehler sein muss?
Die verlinkte Datei für sich genommen hast du recht, aber wenn du dir die Interrupt-Dateien noch ansiehtst, mekrst du, dass bei jedem Compare-Interrupt die compare-Register aktualisiert werden. Das hat zur Folge, dass für ein Timer-Durchlauf xy Compare-Interrupts generiert werden und somit auch die Pins getoggelt. Habs gerade ausprobiert: Ohne Interrupt-Dateien hast du nur eine Phasenverschiebung, mit Interrupt-Handler die unterschiedlichen Frequenzen.
Recht herzlichen Dank. Das mit den irq hatte ich nicht gesehen.
Hey, finde das Thema interessant und möchte mich sowieso in die Timer des ST's einarbeiten, habe aber gerade noch ein paar Verständnis Fragen. Mir ist generell bekannt wie die Compare und Capture Unit arbeitet, denk ich mal, allerdings habe ich Probleme dabei wie man auf sinnvolle Werte für Prescaler usw kommt, wenn man andere Frequenzen haben will. Hier mal ein Rechenbeispiel. Ich möchte 500Hz haben (bzw. der Timer soll mit 500 Hz ein Event auslösen)
da passt noch alles. Jetzt möchte ich aber z.b. 75Hz haben:
Der Wert ist doch sicherlich zu groß für das CCR Register, oder? Sprich man müsste den Prescaler(der quasi den Zähltakt verlangsamt?) oder die Period (also den Nachlade Wert des Timers) ändern, sehe ich das richtig? Nur fehlt mir jetzt die Idee wie ich auf entsprechende Werte kommen kann. Danke für die Hilfe.
Nik D. schrieb: > zu groß für das CCR Register, Wie viele bits hat den das CCR laut dem Datenblatt? Wie viele bits braucht den dein 160000? Die Grundlagen sind beim STM32 die gleichen wie bei jedem anderen uC....
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.