Hallo, irgendwie bin ich grad etwas durcheinander. Ich möchte alle 10µs einen Interrupt erzeugen. Ich habe einen 16 MHz Quarz. Ich nehme einen Prescaler von 32. 16M/32 = 500000 Also 500000 "zähler" pro Sekunde. 500000 * 10^-6 ergibt dann 0,5 Zähler pro µs. Also müsste ein OCR Wert von 5 doch alle 10 µs zum Interrupt führen oder?
Welcher Prozessor? Beim AVR kenne ich nur mögliche Prescaler von 1,8,64,256,1024, aber keine 32. Ich kenne aber nicht alle AVRs :-( Reinhard
@ martin (Gast) >Ich möchte alle 10µs einen Interrupt erzeugen. Willst du das WIRKLICH? Wozu glaubst du das zu brauchen? Damit ist dein AVR ziemlich zugebügelt. >500000 * 10^-6 ergibt dann 0,5 Zähler pro µs. Logisch bei 500kHz. >Also müsste ein OCR Wert von 5 doch alle 10 µs zum Interrupt führen >oder? Nöö, da muss 4 rein, denn der Zähler zählst von 0..4 = 6 Takte. Aber der CTC Modus wäre hier sinnvoll. Wobei 10uS Interrupt alles andere als sinnvoll klingt. Auch bei 16 MHz. MfG Falk
Ich möchte für einen Test gucken wie lange ca. eine Berechnung dauert ohne den Assembler dafür durchzugehen.
Ups, Sorry Denkfehler. Ich war irgendwie bei 0,5µs je Zählen hängengeblieben. Dann sollte 5 natürlich als OCR-Wert stimmen. CTC ist bei der Sache wirklich wichtig und man sollte darauf achten daß in der Interrupt-Routine nicht zu viel passiert. Sind ja nur 160 Takte zwischen den Interrupts...
tobi schrieb: > ATmega32 Timer2 (Timer0 ist andersweitig belegt). > > Datenblatt seite 127. Ah ja, da hat der Timer 2 noch ein paar mehr zur Verfügung, wieder was gelernt :-) Falk Brunner schrieb: >>Ich möchte alle 10µs einen Interrupt erzeugen. >... >>Also müsste ein OCR Wert von 5 doch alle 10 µs zum Interrupt führen >>oder? > > Nöö, da muss 4 rein, denn der Zähler zählst von 0..4 = 6 Takte. Aber der Ähm, ich bin aber auch für 5 :-) Funktion: Zählt los bei 0. Nach 2µs auf 1, nach 4µs auf 2, nach 6µs auf 3, nach 8µs auf 4, nach 10µs auf 5 --> Compareinterrupt nach 10 µs. > CTC Modus wäre hier sinnvoll. Wobei 10uS Interrupt alles andere als > sinnvoll klingt. Auch bei 16 MHz. ACK. Reinhard
martin schrieb: > Ich möchte für einen Test gucken wie lange ca. eine Berechnung dauert > ohne den Assembler dafür durchzugehen. Dann verzichte doch auf die hohe Interruptlast und lies' vor und nach der Berechnung den Wert eines frei laufenden Timers ein und bilde die Differenz zwischen danach und davor - und schon weißt Du, wie lange die Berechnung gedauert hat. Das kannst Du noch beliebig ausbauen mit Max- und Minzeit, gemittelte Zeit, ... Gruß, Bernd
> wie lange ca. eine Berechnung dauert
Mach die Berechnung 10000 mal und nimm eine Stoppuhr ;-)
Freilaufender Timer? Also einfach den Timer starten und den Interrupt augeschaltet lassen und dann vorher und nachher jeweils das TCNT2 Register lesen? Daran hab ich garnicht gedacht.
@ martin (Gast) >Ich möchte für einen Test gucken wie lange ca. eine Berechnung dauert >ohne den Assembler dafür durchzugehen. Was ja auch soooo aufwendig ist. Und vor allem durch die 100kHz Interrupts die Ganze Sache überhaupt nicht verfälscht wird. Eieieiei. Siehe Netiquette. MFG Falk
> Freilaufender Timer?
Das ist überhaupt die beste Betriebsart für einen Timer. Keiner pfuscht
am Zählablauf herum, denn er wird nur 1 mal initialisiert und
anschliessend nur noch gelesen.
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.