Hallo,
ich möchte testweise ein 16Mhz Signal an einem triggernden Ausgangspin
eines Atmega8 haben (bestückt mit 16Mhz Quartz, Fuses FF(low) D9(high)).
Bis zum Prescaler 8 abwärts stellen sich die Frequenzen einwandfrei ein,
bei Prescaler 1 bleibt mein maximaler Ausgangstakt bei 2Mhz, es gibt
auch keine Reaktion auf eine Veränderung des Compare Registers (gemessen
mit Oszilloskop, 40Mhz [ich weiß, dass es kein 16Mhz rechteck mehr schön
anzeigt, aber zumindest nicht wie 2Mhz]). Habe ich einen Fehler gemacht?
Adrian Figueroa schrieb:> ISR(TIMER1_COMPA_vect) {> PORTB^=(1<<PB1);> }
Irgendwann ist eine Grenze erreicht, an der der Aufruf einer ISR, das
Sichern der Register, das Umschalten des Portpins und der Retun zur
aufrufenden Stelle die zeitbeherrschenden Dinge sind. Schneller geht
nicht, weil diese Dinge eben Zeit brauchen. Das alles geschieht ja nicht
in 0-Zeit. Dafür braucht es ein paar Takte und die sind es eben, die
dich dann limitieren.
Hallo,
1. solche #define's machen mich nervös, bin mir nicht sicher, ob das so
funktioniert, hab ich so noch nicht gesehen
2. Schau Dir doch mit deinem Scope mal SCK an, ohne irgendwas in der
ISR-Schleife zu haben.
3. OCR1A = 0 macht keinen Sinn, hier mußt Du den Vergleichswert
eintragen
4. Erfahrungsgemäß macht es weniger Schwierigkeiten den Timer mit TIMSK
zu schalten, als mit sei()
Gruß Schorsch
Hi
>ich möchte testweise ein 16Mhz Signal an einem triggernden Ausgangspin>eines Atmega8 haben (bestückt mit 16Mhz Quartz, Fuses FF(low) D9(high)).
Dir fehlen die absoluten Basics.
MfG Spess
Karlheinz hats ja schon geschrieben,
per Software gehts halt nicht so schnell.
Du könntest aber mit dem Timer eine Frequenz an einem Ausgang erzeugen,
da kommst du etwas höher,
und noch höher wenn du einen AVR mit PLL nimmst
Karl Heinz Buchegger schrieb:> Irgendwann ist eine Grenze erreicht, an der der Aufruf einer ISR, das> Sichern der Register, das Umschalten des Portpins und der Retun zur> aufrufenden Stelle die zeitbeherrschenden Dinge sind. Schneller geht> nicht, weil diese Dinge eben Zeit brauchen.
Alles klar, die "verbrauchten" Takte habe ich einfach ignoriert :). Das
ganze braucht wohl acht Takte, wenn ich auf 2Mhz komme.
> 16MHz Ausgang , 40MHz beim Atmega8
40Mhz schafft mein Oszilloskop, ich meinte nur, dass ich weiß, dass ich
damit keine 16Mhz mehr als Rechteck anzeigen kann.
Walter S. schrieb:> Du könntest aber mit dem Timer eine Frequenz an einem Ausgang erzeugen,> da kommst du etwas höher,> und noch höher wenn du einen AVR mit PLL nimmst
ok! an sich brauche ich die frequenzen nicht, ich wollte nur schauen was
möglich ist