-         

Ergebnis 1 bis 7 von 7

Thema: AVR Prescaler Berechnung?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2006
    Beiträge
    7

    AVR Prescaler Berechnung?

    Anzeige

    Hallo,

    Ein Programm zur Berechnung gibt es hier:
    http://www.roboternetz.de/phpBB2/dlo...le&file_id=169

    FOSC: 7372800hz
    SAMPFREQ:512hz
    =P: 64

    Ich möchte FOSC per Prescaler P in SAMPFREQ übersetzen
    Mit welcher Formel berechnet man P?

    Gruß

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    09.02.2006
    Beiträge
    57
    hm, wie ist die frage genau gemeint: willst du mit einem timer die frequenz sampfreq erzeugen?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2006
    Beiträge
    7
    Ja ,T/C0 soll als Counter arbeiten.
    wie rechnet das Programm?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Da es oft mehrere Lösungen gibt, ist das keine richtige Formel
    Ich häng' da ein Excel sheet rein, guck' mal, vielleicht hilft's
    ("TImer" Tabelle, das andere vergiß)
    Angehängte Dateien Angehängte Dateien
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Das ist so einfach gar nicht zu beantworten.

    Wenn Du einen der 8Bit Timer benutzt läuft dieser alle 256 Timerzyklen über und es wird ein Timer Overflow Interupt ausgelöst.

    ist der Prescaler auf 8 eingestellt Brauchst Du also 256*8 Taktzyklen für diesen Überlauf. Bei der Einstellung auf Prescaler 64 also 256*64 Taktzyklen. Soweit dürfte das noch klar sein.

    Beim 16 Bit Timer dauert das Ganze natürlich 65536*64 Taktzyklen.

    Hast Du aber nun ein Verhältnis von Taktfrequenz zu Timerfrequenz das nicht durch 256 teilbar ist musst Du während des Interrupts das Couterregister mit einem Preload z.B. 11 füttern. Dadurch wird der Timeroverflow nach (256-11)*64 Taktzyklen erreicht.
    Weil die Ausführung der Interruptroutine natürlich auch Zeit benötigt, kann es passieren das es gerade bei kleinen Prescalereinstellungen (/0 und / zu Jitterfehlern und Berechnungsfehlern kommt.
    Die Preloads sollten also möglichst früh in der Interruptroutine angesiedelt sein.
    Ich teste solche Spielchen mit AVR Studio 4 aus, dann kann man schon mal eine Aussage machen ob das so funktionieren kann.

    Wichtig ist dabei, das der benötigte Preload Wert bei einem 8Bit Timer immer unter 255 liegen muß.

    Sinnvoll ist es auch den Prescaler auf möglichst hohe Werte einzustellen, weil dann der Controller weniger Zeit in den Timer Interrupt Routinen rumgurkt.

    Eine weitere Möglichkeit für krumme Teilerwerte sind die Output Compare Matches, den aber nicht alle Timer der ATMEL AVR Controller haben.

    Dabei wird in ein Output Comparematch Register ein Wert vorbelegt.
    Erreicht der Interne Counter diesen Wert kann ein Interrupt ausgelöst werden in dem dann eine von Dir geschriebene Routine ausgeführt wird.
    Der interne Timer kann auch Automatisch bei Erreichen des Comparematchwertes zurückgesetzt werden.

    Die Timer der ATMEGA Reihe bieten sehr, sehr viele Möglichkeiten - zieh Dir halt mal das Datenblatt von einem z.B. ATMEGA 8 rein.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2006
    Beiträge
    7
    es wird doch wohl die formel geben!

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    09.02.2006
    Beiträge
    57
    den beitrag von wkrug kann man in zwei formeln fassen:
    erstmal die frequenz, mit der der overflow interrupt ausgelöst wird:
    f_samp=f_osc/(pre*2^n)
    f_samp: interrupt-frequenz
    f_osc: takt
    pre: prescaler
    n: bit-zahl des timers

    wenn der prescaler jeden wert annehmen könnte, würde das schon genügen. aber im allgemeinen braucht man noch diese formel:
    f_samp=f_osc/(pre*(2^n-preload))
    d.h. der volle wertebereich des timer ,2^n, wird um den preload-wert reduziert, sodass man eine relativ gute auflösung für f_samp erhält.
    das hat aber wkrug schon alles beschrieben, ich hab nur noch mal die formeln explizit aufgeschrieben.
    man mus auf jeden fall ein bisschen dabei denken, nur einsetzen genügt nicht!
    gruß
    jonas

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •