mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer Zeit umrechnen


Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe einen Timer auf 1MHZ eingestellt.
Weiviel Zeit ist dann immer vergangen bis der Overflow-Interrupt
ausgelöst wurde.
Möchte diese Zeit dann in Sekunden umrechnen

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

du solltest dir eine formelsammlung zulegen. t = 1/F = 1µs

Gruß,

Dirk

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsches Topic.

Ein Timer zählt Takte. Er kann aber einen Prescaler besitzen, d.h. der
µC-Takt wird durch z.B. 1, 4, 64, 256 ode 1024 geteilt.
Wenn Prescaler 1 ist, dann ist ein "Schritt" im Timer, MC-Takt/1 =
MC-Takt.

t = 1/f
t = 1/1.000.000 = 1us
Wenn es der 8bit timer ist, der ab 256 überläuft, dann 256us.
Wenn du jedoch den 1024-Prescaler drin hast, dann 256*1024us.

Bitte mal das Datenblatt lesen und nachdenken ; vielleicht auch noch
das richtige Forum wählen.

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oo.. ich dachte, der Thread wär in der Codesammlung.. ich nehm das mit
dem Forum zurück.
Vielleicht sollte ich mal nachdenken :)

Autor: Werner B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1*10^-6 * 2^BitBreiteDesTimers Sekunden

 bei 8 Bit Timer = 256 * 10^-6 Sekunden = 0,000265s
 bei 16 Bit Timer => 65536 * 10^-6 Sekunden = 0,065536s

Autor: Toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kapiers einfach nicht. Möchte doch nur wissen wieviel Zeit in
Sekunden vergeht bis mein Interrupt ausgelöst wird:
Hier nochmal meine Einstellungen des ATmega32:

TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x45;

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gar keine Sekunde weil der AVR viel zu schnell ist. Siehe oben. Man kann
das ganze langsamer machen wenn man einen größeren Teiler nimmt dann
zählt er nicht bei jedem Takt eins hoch sondern z.B. nur bei jeden
256ten Takt dann dauert es 256 mal länger bis der Timer überlauft und
einen Interrupt auslöst.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> bei 8 Bit Timer = 256 * 10^-6 Sekunden = 0,000265s
>> bei 16 Bit Timer => 65536 * 10^-6 Sekunden = 0,065536s
>
> Ich kapiers einfach nicht. Möchte doch nur wissen wieviel Zeit in
> Sekunden vergeht bis mein Interrupt ausgelöst wird:

Und was kapierst du jetzt nicht an der Antwort oben? Da steht's doch
in Sekunden.

> Hier nochmal meine Einstellungen des ATmega32:

Wieso "nochmal"? In deinem Ursprungsposting kann ich sie nicht
entdecken, genausowenig wie den Namen des verwendeten
Mikrocontrollers.

> TCCR1A=0x00;
> TCCR1B=0x02;

Ach so, also ist der Prescaler auf 1/64 eingestellt. Diese Information
hattest du auch vergessen anzugeben. Dann wird dein Timer wohl kaum wie
ursprünglich angegeben mit 1Mhz laufen, denn dazu müßte der
Mikrocontroller mit 64Mhz laufen. Vermutlich läuft der Controller mit
1Mhz und der Timer dann mit 1/64Mhz. Dann braucht ein Timer-Takt 64
Mikrosekunden = 0,000064s. Da es ein 16bit-Timer ist, durchläuft er
65536 Takte bis zum Überlauf. Die Zeit ist also 0,000064s * 65536 =
4,194304 Sekunden.

> TCNT1H=0x00;
> TCNT1L=0x00;
> OCR1AH=0x00;
> OCR1AL=0x00;
> OCR1BH=0x00;
> OCR1BL=0x00;
> TIMSK=0x45;

Ist es beabsichtigt, daß du für alle Timer die Overflow-Interrupts
einschaltest, und nicht nur für Timer1?

PS: Du solltest dir angewöhnen, die Bits mit Namen anzusprechen. Das
macht die Sache wesentlich übersichtlicher.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also:

Dein uC hat eine bestimmtem Takt (ich denke mal 1mhz wenn ich das recht
verstanden habe)

Das heißt, dein Microcontroller kriegt 1.000.000 Takte / Sekunde

Dein Timer zählt bei jedem Takt 1 mal weiter.
Da das oft zu shcnell ist für längere Zeitmessungen gibt es die
Möglichkeit einen Prescaller (Vorteiler) einzustellen, üblicherweise
ist der 8, 64, 256, 1024 (steht im Datenblatt) das heißt dass dann nur
alle 8, oder 64 oder 256... Takte der Counter einen höher zählt

Nun kannst du damit ausrechnen:

Wenn der 8 bit timer maximal eineen Wert von 255 annehmen kann, dann
läuft er bei:
255 Taken über und dein Interupt wird ausgelöst.
also ohne Prescaler ca 3921 mal / Sekunde bei 1 mhz.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> PS: Du solltest dir angewöhnen, die Bits mit Namen anzusprechen.
> Das macht die Sache wesentlich übersichtlicher.

Und glatt hab ich mich beim Raussuchen der Bits verguckt. Der Teiler
ist nur 8, also ist die Zeit zwischen zwei Overflows nur 0,524288
Sekunden lang.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, nochmal was. Mir fällt grad auf, daß bei einem Teiler von 8 der
Timer ja doch mit 1MHz laufen würde, falls der Mikrocontroller mit 8MHz
läuft. Du hast mich wirklich völlig verwirrt. :-)
Falls also der Timer doch mit einem Takt von 1MHz läuft, dann gilt der
von Werner für 16bit gepostete Wert von 0,065536s.

Hoffe, dich jetzt nicht auch zu sehr verwirrt zu haben.

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.