Forum: Mikrocontroller und Digitale Elektronik Atmeg88; höhere Auflösung der Frequenz; TIMER


von hans (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

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

Nein. Dazu müsstest du den Controller maßlos übertakten.

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

MfG Spess

von Jörg H. (idc-dragon)


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

von Falk B. (falk)


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

von Thomas E. (thomase)


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.

von hans (Gast)


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

von Purzel H. (hacky)


Lesenswert?

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?

von spess53 (Gast)


Lesenswert?

Hi

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

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

von Hans (Gast)


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

von Purzel H. (hacky)


Lesenswert?

Aehnlich. Ich wuerd einen subzyklenzaehler mitlaufen lassen. Und dabei 
effektiv N mal den einen wert laden und dann 256-N mal den anderen. Im 
PWM mode mit 16MHz clock bekommt man so eine PWM mit 64kHz und die 
Subzyklen laufen dann auf 256Hz. Alles in Allem hat man dann 16 bit 
Aufloesung. Im Dividermode kriegt man natuerlich auch 16 bit

von hans (Gast)


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

von Purzel H. (hacky)


Lesenswert?

Dir ist aber klar, dass der PLL Clock viermal schneller laeuft, daher 
auch mehr Strom zieht, aber das Problem nicht wirklich loest. Es gibt 
sonst noch einen PIC, der dsPIC 30F2023-30I, der hat einen PLL bis 
480MHz, dafuer zieht er auch Strom wie wild (220mA).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.