hat denn keiner eine Ahnung wie man den Timer berechnet?!![]()
Das muss doch jemand wissen...![]()
Hallo,
ich habe mir den Artikel "Bascom und Timer" im Wissensbereich kurz durchgelesen. Ganz unten auf der Seite wird auf ein Programm verlinkt: "AvrTimer Windows Berechnungstool / Bascom Codegenerator" Das ist schön einfach - also habe ich damit gearbeitet. Leider ist dort kein 20 MHz Quarz mit drinn und so musste ich den Artikel doch lesen und verstehen.
Jetzt habe ich aber einen Unterschied zwischen Artikel und Programm gefunden! Was ist denn nu richtig?!
8 MHz Quarz
Timer1 16Bit
Prescaler 256
Timer soll jede Sekunde überlaufen
Artikel: 34285
Programm: 34286
Ich will ja nicht spitzfindig sein, aber ich möchte die Rechnung gerne verstehen(und mein Timer soll bei 20MHz alle 0,5sek überlaufen)
vielen Dank schon mal,
Tobias
hat denn keiner eine Ahnung wie man den Timer berechnet?!![]()
Das muss doch jemand wissen...![]()
also nach Rechnung komm ich auf 34285.
Quarzfrequenz 8 MHz => 8.000.000 Takte pro Sekunde
Prescaler 256 => 8.000.000 / 256 = Nur noch 31250 Takte pro Sekunde
Wenn der Überlauf nach jeder Sekunde stattfinden soll sinds dann
((2^16)-1) - 31250 = 34285.
Für ne halbe Sekunde sollte es dann der halbe Wert sein, der abgezogen wird... also
((2^16)-1) - 15625 = 49910
49910 wäre der Wert auch für 16MHz, 16-Bit-Timer und Prescaler von 1024.
Die Werte sind 0-basiert, also man beginnt bei 0 zu zählen. 2^16 ist dann nicht 65536 sondern 65535.
-> Oh mann, die Nachricht war im SPAM <-
Hallo,
vielen Dank für die Antwort!
2^16 ist dann wohl, weil das ein 16Bit Timer ist oder?! Also bei einem 8Bit timer wäre das also 2^8. richtig?
D.h.
für 20MHz und ne´ halbe Sec.:
20.000.000/1024 = 19.531,25 Takte / sek
((2^16)-1) - 9.765,625(hälfte) = 55.769,375!!!!
richtig?
Kann man das Komma mit eingeben?
Tobias
nein. bei dir wären es dann als startwert = 55769
ach so - danke.
Man sollte bedenken, das man bei der interrupt-methode 2 mal toggeln muss um eine periode zu erzeugen. Das berechnungtool hat sich bei mir allerdings als sehr ungenau heruasgestellt. grade wenn es richtung 40khz geht hatte mein MEGA32 mit 16Mhz ziemlich zu kämpfen. Das restliche Programm wurde auch nur sehr träge abgearbeitet.
vielleicht hat der Programmierer ja nur die -1 vergessen.
P.S: Wenn der Programmierer das hier liest und eine neue richtige Version raus bringt: Ich hätte gerne auch einen 20MHz Quarz in der Liste![]()
Tobias
Leute,
habe euren Thread erst heute gelesen:
Leider gibt es bei den Timer-Berechnungs-Tools immer das Problem, ob die Berechnung für die Timer-Werte genau so erfolgt, als ob diese Werte in Assembler verwendet würden, oder ob die Timer-Startwerte für [highlight=red:f0d1da6202]Bascom[/highlight:f0d1da6202] errechnet werden.
In Bascom werden am Anfang der ISR alle Register gesichert. Das kostet insgesamt 53 Zyklen. Für Bascom muss man also die resultierende Timer-Frequenz um diese Zyklen korrigieren.
Manche Berechnungs-Tools machen das nicht und sind damit für Bascom etwas ungenau. Da sich die Timer-Startwerte aber nur gering (z.B. +- 1) unterscheiden, fällt das kaum auf.
Gruß Dirk
Lesezeichen