Forum: Mikrocontroller und Digitale Elektronik Alle 10µs Interrupt


von martin (Gast)


Lesenswert?

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?

von Reinhard R. (reirawb)


Lesenswert?

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

von tobi (Gast)


Lesenswert?

ATmega32 Timer2 (Timer0 ist andersweitig belegt).

Datenblatt seite 127.

von Falk B. (falk)


Lesenswert?

@  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

von Matthias B. (matthias882)


Lesenswert?

5 x 0,5µs = 2,5 µs

MfG

von martin (Gast)


Lesenswert?

Ich möchte für einen Test gucken wie lange ca. eine Berechnung dauert 
ohne den Assembler dafür durchzugehen.

von Er (Gast)


Lesenswert?

>5 x 0,5µs = 2,5 µs

0,5us ist nicht das selbe wie 0,5 * 1/us, Schlauberger.

von Matthias B. (matthias882)


Lesenswert?

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...

von Reinhard R. (reirawb)


Lesenswert?

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

von Bernd O. (bitshifter)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> wie lange ca. eine Berechnung dauert
Mach die Berechnung 10000 mal und nimm eine Stoppuhr ;-)

von martin (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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
Noch kein Account? Hier anmelden.