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
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
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
@ 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
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.
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
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?
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
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
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
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
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).