Forum: Mikrocontroller und Digitale Elektronik Timer Zeit umrechnen


von Toni (Gast)


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

von Dirk (Gast)


Lesenswert?

Hi,

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

Gruß,

Dirk

von D. W. (dave) Benutzerseite


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.

von D. W. (dave) Benutzerseite


Lesenswert?

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

von Werner B. (Gast)


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

von Toni (Gast)


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;

von Thomas O. (Gast)


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.

von Rolf Magnus (Gast)


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.

von Läubi .. (laeubi) Benutzerseite


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.

von Rolf Magnus (Gast)


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.

von Rolf Magnus (Gast)


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.

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.