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).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.