www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer1 und Bascom


Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!!

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es da keine Formel für ?

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.