Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13
  1. #1

    Administrator

    Registriert seit
    28.01.2007
    Ort
    Region Giessen
    Beiträge
    2.601
    Blog-Einträge
    6
    Sprachen
    C Assembler Pascal

    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

    [highlight=c]void InitTimer0CompareAInt(void)
    {

    TIFR0 |= (1<<OCF0A); // Interrupt Request loeschen
    TIMSK0 |= (1<<OCIE0A); // Enable Output Compare A Interrupt

    OCR0A = 249; // CompareTime ist 1ms
    TCNT0 = 0;
    TCCR0A |= 1 << WGM01; // CTC Mode 2
    TCCR0B |= (1<<CS01) | (1<<CS00); // 64 prescaler, Timer0 Start

    }

    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.
    Angehängte Dateien Angehängte Dateien
    Theorie ist Wissen, das nicht funktioniert - Praxis ist, wenn alles funktioniert und man weiß nicht warum!
    Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.


  2. #2

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

  3. #3

    Administrator

    Registriert seit
    28.01.2007
    Ort
    Region Giessen
    Beiträge
    2.601
    Blog-Einträge
    6
    Sprachen
    C Assembler Pascal

    Standard

    Zitat Zitat von Markus 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!
    Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.


  4. #4

    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

  5. #5

    Administrator

    Registriert seit
    28.01.2007
    Ort
    Region Giessen
    Beiträge
    2.601
    Blog-Einträge
    6
    Sprachen
    C Assembler Pascal

    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!
    Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.


  6. #6

    Daumen hoch Gut gemacht! Danke!

    Hallo Dirk,

    prima Tool, einfach und doch direkt einsetzbar.

    MFG

    WalMo

  7. #7

    Administrator

    Registriert seit
    28.01.2007
    Ort
    Region Giessen
    Beiträge
    2.601
    Blog-Einträge
    6
    Sprachen
    C Assembler Pascal

    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!
    Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.


  8. #8

    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

  9. #9

    Administrator

    Registriert seit
    28.01.2007
    Ort
    Region Giessen
    Beiträge
    2.601
    Blog-Einträge
    6
    Sprachen
    C Assembler Pascal

    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!
    Mein Kindheitstraum: Die 32bit Farbpalette als Buntstiftsammlung.


  10. #10
    steven444
    Gast

    Standard

    aardige post dank voor het delen

 

 
Seite 1 von 2 12 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Powered by vBulletin® Version 4.2.0 (Deutsch)
Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:58 Uhr.