Atmeg88; höhere Auflösung der Frequenz; TIMER

Gast #2604671
Lesenswert?

hallo,

ich stehe vor dem Problem dass ich mittels Timer Interrupt(Atmega88) ein 
Rechtecksignal mit 153kHz ausgeben will.

abhängig von eingelesenen ADC Werten möchte ich in Folge den Takt 
erhöhen bzw verringern und zwar in Schritten < 1 kHz.

Der "Timer Teil" läuft bereits, es ergeben sich jedoch schrittweiten bzw 
Frequenzänderungen von 150,58kHz - 153,48kHz - 156,49kHz dabei wird der 
Wert in OCR0A nur jeweils um 1 erhöht

Oscillator läuft mit 16MHz
Prescaler ist auf 1 gesetz, Fuse Bits: CLK_DIV 8 ist "abgeschaltet"
d.h. timerfrequenz = sysclock = 16MHz

Besteht eine Möglichkeit bei diesem Controller zu bleiben und die 
Frequenzschritte zu verringern ?


danke
#2604719
Lesenswert?

Mit 20 MHz könnte man ihn auch noch takten (bei 5V). Bringt aber nicht 
viel.

Wenn es bei deinem Ausgangssignal nur auf die Frequenz ankommt und es 
ein bischen jittern darf, dann kannst du die Periode laufend um +/-1 
ändern um durchschnittlich die Sollfrequenz sehr genau zu treffen.
Der Algorithmus könnte sowas wie Bresenham sein, im ORC-Interrupt das 
Register abhängig von einem Laufzähler umsetzen.

Jörg
#2604720
Lesenswert?

@  hans (Gast)

>Der "Timer Teil" läuft bereits, es ergeben sich jedoch schrittweiten bzw
>Frequenzänderungen von 150,58kHz - 153,48kHz - 156,49kHz dabei wird der
>Wert in OCR0A nur jeweils um 1 erhöht

Logisch. 16 MHz / 150 kHz = 106. Eine Änderung um +/-1 bringt ca. 1% 
Frequenzänderung, sprich 1,5kHz. Bei dir ist es das Doppelte, 
Messfehler?

>Besteht eine Möglichkeit bei diesem Controller zu bleiben und die
>Frequenzschritte zu verringern ?

Kommt drauf an. Wenn nur IM MITTEL die Frequenz stimmen muss, kann man 
periodisch nach jedem Durchlauf zwischen zwei Frequenzen umschalten und 
erhält IM MITTEL die Frequenz zwischen den beiden.

MfG
Falk
#2604728
Lesenswert?

hans schrieb:
> Der "Timer Teil" läuft bereits, es ergeben sich jedoch schrittweiten bzw
> Frequenzänderungen von 150,58kHz - 153,48kHz - 156,49kHz dabei wird der
> Wert in OCR0A nur jeweils um 1 erhöht
Ich kenne deinen Frequenzzähler ja nicht, aber die Werte sind einfach 
Müll.

Rechnerisch:

OCR +1 = 103 >> 155,34  KHz
OCR +1 = 104 >> 153,846 KHz
OCR +1 = 105 >> 152,381 KHz

Mit 20MHz Takt:

OCR +1 = 129 >> 155,039 KHz
OCR +1 = 130 >> 153,846 KHz
OCR +1 = 131 >> 152,672 KHz

Da bist du doch schon näher dran.

mfg.
Gast #2604848
Lesenswert?

hallo


spess53 schrieb:
> Mit ATTiny261/461/861 oder ATtiny25/45/85 mit eingebauter PLL (64MHz)
> sind feinere Abstufungen möglich.

auf die teile bin ich auch schon gestoßen.
Wenn ich das richtig im Datenblatt verstanden hab, wirkt die PLL aber 
nur auf den Timer(und grob gesagt auf ein zwei andere Peripheriegeräte) 
und nicht als sysclock.
Die PLL erhält den takt über den internen Oscillator, richtig?

kann ich dann trotzdem einen externen Oscillator als sysclk verwenden 
oder bin ich dann an den internen gebunden ?

danke
Gast #2604883
Lesenswert?

hallo

Delta Oschi schrieb:
> Die feinere Frequenzaufloesung erhaelt man mit Subzyklen.  Anstelle den
> Zaehler 256 mal mit 120.5 zu laden kann man 128 mal mit 120 und 128 mal
> mit 121 laden. Einen Zaehler von 120.125 erhaelt man durch 32 mal 120
> und 224 mal 121.
> Alles klar?

meinst du das gleiche wie Falk?
Falk Brunner schrieb:
> Kommt drauf an. Wenn nur IM MITTEL die Frequenz stimmen muss, kann man
> periodisch nach jedem Durchlauf zwischen zwei Frequenzen umschalten und
> erhält IM MITTEL die Frequenz zwischen den beiden.

ansonsten weis ich nicht was Du meinst.


danke
Gast #2606265
Lesenswert?

hallo,

spess53 schrieb:
> Wenn ich im Datenblatt nicht etwas übersehen habe, kann man kann man
> einen externen Takt für das System und den PLL-Clock für den Timer
> benutzen.
>
> MfG Spess

Auf Seite 27(http://www.atmel.com/Images/doc7753.pdf), 7.2 Clock 
sources, Table 7.1, steht aber drinnen dass anhand der Fuse bits 
entschieden wird ob External clock oder PLL clock verwendet wird, also 
das sieht nach entweder oder aus.

Mir fehlt es an Verständnis, mir wäre klar wie ich mit der externen clk 
umgehe um diese als sysclk zu setzen, aber wie aktiviere ich 
gleichzeitig den internen RC Oscillator damit die PLL einen Takt 
bekommt(diese einstellung wird ja durch die gleichen bits im gleichen 
register gemacht)?

Danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren