Hallo, ich würde gerne den Timer im laufenden Programm ändern. Z.B. gebe ich eine Frequenz zwischen 1 und 200 vor, die bestimmen soll, wie oft ein Interrunpt ausgelöst werden soll. Ist das überhaupt möglich, und wenn ja, wie berechne ich das ? Danke!!!
Bascom kenn' ich nicht, aber was du willst geht mit dem Output-Compare-Interrupt. Das OCR1x - Register ändern lässt den OC-INT auch früher oder später auftreten. Siehe Datenblatt.
Dein Prozessor läuft wie schnell? Der macht x Takte in der Sekunde Über einen Vorteiler gehst du in einen Timer hinein. Das heist der Timer sieht nur noch x / Vorteiler Takte in der Sekunde. Jetzt hängt es davon ab, in welchem Modus du den Timer betreibst. Je nachdem dauert es y Timer-Takte bis ein Interrupt ausgelöst wird. D.h. du kriegst ( x / Vorteiler ) / y Interrupts in der Sekunde das x ist fest (den Quarz kannst du schlecht im Betrieb umlöten). Das einzige was du variieren kannst ist Vorteiler und y. Beim Vorteiler hast du nicht allzuviele Möglichkeiten. Und das y kann je nach Timer Modus entweder fest (normaler Timer Modus, die PWM Modi) oder variabel sein (CTC Modus, Fast PWM - Modus). Also: Such dir einen Vorteiler aus und schau noch ob du bei deinem gewählten Timer Modus ein passendes y erhältst. Wenn sichs nicht ausgeht, dann nimm einen anderen Vorteiler. Wenn man verstanden hat wie Timer arbeiten und wie speziell die verschiedenen Timermodi arbeiten ist es so einfach wie einem Baby den Schnuller wegnehmen.
Könnta das so gehen ? Die Variable Timervorgabe ist im Programm veränderlich. Obwol ich lieber eine Frequenz als veränderliche größe hätte. Config Timer1 = Timer , Prescale = 8 On Timer1 Wobbeln Timervorgabe = 4000 . . . . . . Wobbeln: Timer1 = Timervorgabe If X = 0 Then F1 = F1 + Ftempo If F1 >= Fwobbel(2) Then X = 1 End If Else F1 = F1 - Ftempo If F1 <= Fwobbel(1) Then X = 0 End If End If Gosub Ad9835out Return
> Könnta das so gehen ? Versuch macht kluch > Obwol ich lieber eine Frequenz als veränderliche größe > hätte. Und was hindert dich daran die gewünschte Frequenz in die Vorgabe umzurechnen? f = 1 / t Du weist welche Frequenz du brauchst. Durch umstellen obiger Formel kannst du dir ausrechnen, wie lange also eine Schwingungsperiode ist, wieviele Quarz Ticks also vom Beginn eines Anstiegs bis zum Beginn des nächsten Anstiegs vergehen müssen. Weiters weist du wie oft in dieser Zeit der Timerinterrupt aufgerufen werden soll (das weist du, weil du weist wie gross dein FTempo ist und daraus kann man wiederrum berechnen wieviele Interrupt Aufrufe benötigt werden um F1 einmal von Fwobbel(1) bis Fwobbel(2) und wieder zurück zu treiben. Also: du weist wieviele Quarz Ticks du brauchst, damit genau die Zeit vergeht, die einer Periode der Wobbelfrequenz entspricht. Weiters weist du wieviele Timer Interrupts in diesem Zeitraum auftreten sollen. Also kannst du berechnen, wieviele Quarz Ticks von einem Timer Interrupt zum nächsten vergehen müssen. (Das eine dividiert durch das andere, den Vorteiler des Timers nicht vergessen). Weiters weist du bei welchem Zählerstand der Timer auslöst. D.h. wenn du so und soviele Ticks bis zum Interrupt haben willst, setzt du den Vorgabewert auf die Differenz. Huch. Da haben wir ihn ja: Den Vorgabewert. Sorry: Noch genauer schluessle ich das dir jetzt nicht auf. Ein bischen denken musst du schon selbst.
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.