Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer richtig berechnen
TobiasBlome
05.02.2007, 21:57
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
TobiasBlome
06.02.2007, 15:34
hat denn keiner eine Ahnung wie man den Timer berechnet?! :shock:
Das muss doch jemand wissen... 8-[
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.
TobiasBlome
08.02.2007, 17:59
-> 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
helimike0705
08.02.2007, 19:12
nein. bei dir wären es dann als startwert = 55769
TobiasBlome
08.02.2007, 20:47
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.
TobiasBlome
10.02.2007, 09:09
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 8)
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
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.
Habe mir auch die Seite durchgelesen und wollte das genannte Tool probieren. Leider leitet mich der Link auf die Startseite zurück :/ Ist das Tool verschoben worden, oder garnicht mehr existent?
Grüße
DKM
Peter(TOO)
20.04.2016, 06:54
Hallo Dirk,
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.
Das spielt doch keine Rolle?
Der Timer läuft doch per Hardware automatisch immer rundum.
Bei einem Overrun/CompareMatch wird ein Interrupt ausgelöst. Dabei ist es egal wie lange es nun dauert, bis Bascon nun wirklich in der ISR landet. Wichtig für die Genauigkeit ist nur der Abstand zwischen den Interrupts.
MfG Peter(TOO)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.