Userinfo & Login
Zurück   AVR-PRAXiS-Forum > Projekte > Programme und Tools
Programme und Tools Entwicklungsunterstützende Programme und Tools (Windows, Linux, Mac)
Antwort
 
Themen-Optionen Ansicht

  #1  
Alt 02.03.2008, 15:28
Benutzerbild von Dirk
Dirk Dirk ist offline
Administrator
 
Registriert seit: 28.01.2007
Beiträge: 1.253
Standard Tool: AVR-Timer-Calculator

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.

Beispiel:
8bit Timer, fosc = 16MHz, Interrupt-Periodendauer = 1ms

Overflow-Interrupt:
Prescaler = 128, Reloadwert = 131
1ms = (256-Reloadwert) x Prescaler / fosc
1ms = (256-131) x 128 / 16MHz

Compare-Interurpt:
Prescaler = 128, Comparewert = 124
1ms = (Comparewert+1) x Prescaler / fosc
1ms = (124+1) x 128 / 16MHz

Um den Overflow-Interrupt des Timers zu nutzen, musst du
  • Timer auf Reloadwert setzen
  • Overflow-Interrupt des Timers freigeben, eventuell zuvor Interrupt-Request-Flag löschen
  • Prescaler festlegen (jetzt läuft der Timer)
  • nicht vergessen global die Interrupts freizugeben
  • In der Interrupt-Routine selbst den Timer wieder mit Reloadwert beschreiben (bei 16Bit hier auf die Schreib-Reihenfolge von low und high achten)
Um den Compare-Interrupt des Timers zu nutzen, musst du
  • Compareregister mit Comparewert beschreiben
  • Timer auf 0x00 setzen
  • Compare-Interrupt freigeben, eventuell zuvor Interrupt-Request-Flag löschen
  • Prescaler festlegen (Timer läuft nun)
  • globale Interrupts freigeben.
Beispiel in C:
Compare, fosc = 16MHz, Periodendauer = 1ms

c
  1. void InitTimer0CompareAInt(void)
  2. {
  3.  
  4.    TIFR0 |= (1<<OCF0A);                // Interrupt Request loeschen
  5.    TIMSK0 |= (1<<OCIE0A);              // Enable Output Compare A Interrupt
  6.  
  7.    OCR0A = 249;                        // CompareTime ist 1ms
  8.    TCNT0 = 0;
  9.    TCCR0A   |= 1 << WGM01;             // CTC Mode 2
  10.    TCCR0B   |= (1<<CS01) | (1<<CS00);  // 64 prescaler, Timer0 Start
  11.  
  12. }
  13.  
  14. ISR(TIMER0_COMPA_vect)
  15. {
  16.    // Compare-Interrupt:
  17.    // hier etwas tun, möglichst nur zeitkritische
  18.    // Sachen erledigen
  19.    
  20. }
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.
Angehängte Dateien
Dateityp: txt History.txt (316 Bytes, 72x aufgerufen)
Dateityp: zip AVR-Timer-Calculator.zip (443,9 KB, 956x aufgerufen)
__________________
Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
Sprachen: Assembler, C, Pascal

Mit Zitat antworten
  #2  
Alt 02.03.2008, 21:43
Benutzerbild von Markus
Markus Markus ist offline
Moderator und BASCOM-Experte
 
Registriert seit: 11.01.2008
Ort: Lonsee
Beiträge: 853
Standard

Hi Dirk,

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!!!!
Mit Zitat antworten
  #3  
Alt 03.03.2008, 08:40
Benutzerbild von Dirk
Dirk Dirk ist offline
Administrator
 
Registriert seit: 28.01.2007
Beiträge: 1.253
Standard

Zitat:
Beitrag anzeigen
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!
Sprachen: Assembler, C, Pascal

Mit Zitat antworten
  #4  
Alt 31.03.2008, 12:19
tcg tcg ist offline
Neuer Benutzer
 
Registriert seit: 31.03.2008
Beiträge: 1
Standard cpu-register

hi,

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...

cu, gg
Mit Zitat antworten
  #5  
Alt 31.03.2008, 12:34
Benutzerbild von Dirk
Dirk Dirk ist offline
Administrator
 
Registriert seit: 28.01.2007
Beiträge: 1.253
Standard

Hallo,

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!
Sprachen: Assembler, C, Pascal

Mit Zitat antworten
  #6  
Alt 17.10.2008, 19:43
Walmo Walmo ist offline
Neuer Benutzer
 
Registriert seit: 17.10.2008
Beiträge: 1
Daumen hoch Gut gemacht! Danke!

Hallo Dirk,

prima Tool, einfach und doch direkt einsetzbar.

MFG

WalMo
Mit Zitat antworten
  #7  
Alt 18.10.2008, 06:18
Benutzerbild von Dirk
Dirk Dirk ist offline
Administrator
 
Registriert seit: 28.01.2007
Beiträge: 1.253
Standard

Hallo WalMo,

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!
Sprachen: Assembler, C, Pascal

Mit Zitat antworten
  #8  
Alt 23.04.2009, 07:32
RR4711 RR4711 ist offline
Neuer Benutzer
 
Registriert seit: 22.04.2009
Beiträge: 1
Standard Bug?

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.

http://atmel.com/dyn/resources/prod_...ts/doc2545.pdf

Auf Seite 120 steht die Formel.

Ansonsten praktisches Tool. In welcher Sprache gecodet?

Markus
Mit Zitat antworten
  #9  
Alt 23.04.2009, 07:37
Benutzerbild von Dirk
Dirk Dirk ist offline
Administrator
 
Registriert seit: 28.01.2007
Beiträge: 1.253
Standard

Hallo Markus,

ich schaue mir das später mal an.

Das Programm habe ich in Delphi geschrieben.

Grüße,
Dirk

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!
Sprachen: Assembler, C, Pascal

Mit Zitat antworten
  #10  
Alt 06.04.2010, 09:17
steven444 steven444 ist offline
Neuer Benutzer
 
Registriert seit: 06.04.2010
Beiträge: 1
Standard

aardige post dank voor het delen
__________________
A lot of information here icnd certification
for Study cisco ccna security
for help
a+ notes
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:15 Uhr.

Powered by vBulletin® Version 3.6.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
vBulletin Style by: vbdesigns.de
AVR-PRAXiS V.2007 I © Copyright 2007 by Dirk Rodenhausen