mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Alle 10µs Interrupt


Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Reinhard R. (reirawb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ATmega32 Timer2 (Timer0 ist andersweitig belegt).

Datenblatt seite 127.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Becher (matthias882)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5 x 0,5µs = 2,5 µs

MfG

Autor: martin (Gast)
Datum:

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

Autor: Er (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>5 x 0,5µs = 2,5 µs

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

Autor: Matthias Becher (matthias882)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Reinhard R. (reirawb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd O. (bitshifter)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.