Noch ein kleines Programm, was euch eventuell einmal hilfreich sein könnte:
AVR-Timer-Calculator
Kurzbeschreibung:
Das Programm ermittelt die Reload- und Compare-Werte für eine vorgegebene Zeit bei unterschiedlichen Prescalern. Zur Berechnungen werden Prescaler von 2 bis 4096 zu Grunde gelegt.
Hinweis:
Nicht alle Timer der AVR-Mikrocontroller besitzen alle zur Berechnung genutzten Prescaler. Ihr solltet also prüfen, welche Prescaler das Timermodul eures AVRs besitzt.
Revision 1.2
Dirk
Kurze Erläuterung zu Overflow- und Compare-Interrupts:
Wenn du in bestimmten periodischen Zeitintervallen Programmteile ausführen möchtest, eignet sich zum Beispiel ein Overflow-Interrupt oder ein Compare-Interrupt eines Timers.
Overflow-Interrupt
Bei dem Overflow-Interrupt läuft der Timer ab einem bestimmten Wert los. Erreicht er das Ende (0xFF bei 8bit, 0xFFFF bei 16bit Timer), wird der Overfllow-Interrupt ausgelöst. In der Interruptroutine muss man den Timer wieder selbst auf den Anfangswert (Reloadwert) stellen (das muss möglichst zu Begin der Interruptroutine erfolgen).
Compare-Interrupt
Bei dem Compare-Interrupt läuft der Timer ab 0x00 los. Erreicht er den Wert, der zuvor in einem Compare-Register festgelegt wurde, wird der Compare-Interrupt ausgelöst, der Timer wird automatisch wieder auf 0x00 zurückgesetzt (CTC-Mode = Clear Timer on Compare Event).
Die Periodendauer des Interrupts läßt sich nun bei gegebener Oszillatorfrequenz (fosc) einerseits durch den Prescaler und andererseits durch den Reloadwert oder den Comparewert beeinflussen.
Die Taktzeit für den Timer ergibt sich folgendermaßen: tclk = Prescaler/fosc.
ISR(TIMER0_COMPA_vect)
{
// Compare-Interrupt:
// hier etwas tun, möglichst nur zeitkritische
// Sachen erledigen
}[/highlight]Rechtlicher Hinweis:
Der Autor dieses Programms haftet nicht für Schäden an Soft- oder Hardware oder Vermögensschäden, die durch das Benutzen des Programms entstehen, es sei denn diese beruhen auf einem grob fahrlässigen oder vorsätzlichen Handeln des Autors, seiner Erfüllungsgehilfen oder seiner gesetzlichen Vertreter.
Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.
super Sache das Tool. Werde es gerne sofort installieren und verwenden. Bin immer auf der Suche nach brauchbaren Tools die einem lästiges Standardgeschäft abnehmen.
So, jetzt hätte ich gerne noch einen Knopf bei dem in einem 2. Fenster gleich Code für BASCOM, für Assembler und für C erzeugt wird
Wäre doch ne geile Sache, oder?
Grüße und schönen Abend,
Markus
PS: Übrigens, seit dem Umzug flutscht das Forum richtig gut. So schnell waren die Seiten die letzten Wochen nicht! Danke!!!!
So, jetzt hätte ich gerne noch einen Knopf bei dem in einem 2. Fenster gleich Code für BASCOM, für Assembler und für C erzeugt wird
Hi Markus,
daran habe ich auch schon gedacht, das ist soweit auch recht einfach zu lösen. Allerdings muss man ja berücksichtigen...
welche Timer hat der genutzte AVR,
welche Vorteiler besitzt das Timer-Modul des gewählten Timers und
wie nennen sich die Register des AVR
Ich hätte hier erst einmal alle Datenblätter durchsehen müssen, das hätte den Rahmen für ein kleines Tool gesprengt, deshalb habe ich es etwas allgemein gehalten.
Vielleicht werde ich das aber in einer nächten überarbeiteten Version "einbauen".
Das nächste Tool wird wahrscheinlich ein kleines Programm sein, dass Bitmap-Bilder (.bmp) in Code konvertiert (Data-Zeilen für Assembler, C, Pascal und Bascom), so dass man mit einem bisschen weiteren Programmcode die Bilder auf einem Grafikdisplay ausgeben kann. Ich hatte das schon einmal realisiert und genutzt, muss den Sourcecode nur nochmal suchen
Grüße
Dirk
Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.
ich hab auch einen kleinen calculator geschrieben: http://greschenz.dyndns.org/AvrWizOnline.php
bist du evtl an der cpu-config interessiert ? ich habe angefangen für ein paar
cpus die info aus den datenblätern zusammenzusaugen, und auch mal einen "compiler" gebaut, der (naja, mehr schlecht als recht) die part-description-files
vom avr-studio in ein config-file konvertiert...
danke für dein Angebot, ich wäre schon an der cpu-config interessiert. Ich hatte auch schon mal daran gedacht, die .def Files vom AVR-Studio zu analysieren, es war mir aber dann doch zu viel Arbeit . Wenn ich wieder ein bisschen "Luft" habe, werde ich mir dann das Tool nochmal vornehmen.
Grüße,
Dirk
Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.
dankeschön für den Lob Es freut mich, dass dir das Tool gefällt!
Grüße
Dirk
Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.
Also ich behaupte mal daß die Werte zumindest für den compare Mode um 1 zu groß berechnet werden. Habe hier gerade eine Anwendung mit einem hochgenauen TCXO (+/-2ppm) und die Datenblätter studiert (Mega168). Da muss zur Berechnung der Periodendauer noch 1 abgezogen werden. Ich muss hier 25Hz generieren und mit dem Wert vom Programm ist die Frequenz zu klein gewesen. Ich hab den Timer so programmiert, daß bei Compare Event der Ausgangspin toggelt.
EDIT: Markus, du hast recht. Ich habe den Fehler behoben und die neue Version an den obersten Beitrag angehängt.
Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.
Lesezeichen