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
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.
Oo.. ich dachte, der Thread wär in der Codesammlung.. ich nehm das mit dem Forum zurück. Vielleicht sollte ich mal nachdenken :)
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
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;
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.
>> 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.
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.
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.