Hallo zusammen, ich habe ein kleines Verständnisproblem mit dem Timer0 des ATtiny24! Ich benutze den internen Taktgenerator mit 8 MHz. Nun benutze ich den Timer0 im Interrupt-Modus und toggele einen Ausgang. Den Prescale habe ich mit 256 definiert. Nun erwarte ich eine Frequenz von: 8000000(Takt) / 256(Prescale) /256(8Bit-Timer) / 2(Toggle) = 61 Hz! Ich messeaber gerade mal 3,... Hz! Also etwas über 3 Hz! Mit einem externen Quarz von 4MHz ist es die Hälfte! Das Messergebnis muß schon stimmen, da eine LED etwa so blinkt! Wo liegt mein Denkfehler??? Anbei noch der kleine Auszug aus dem Prog.! Danke und einen schönen Sonntag noch H.-J.! $regfile = "ATtiny24.DAT" $crystal = 8000000 Ddra = &B00000101 On Timer0 INTTimer0 Config Timer0 = Timer , Prescale = 256 Enable Timer0 Enable Interrupts Do Waitms 1000 Loop INTTimer0: Porta.0 = Not Porta.0 Return
Hallo Uwe, ich stelle im AVR Studio den internen Oszi auf 8MHz. Dann habe ich ca. 3 Hz. Bei einem 4Mhz externen Quarz eben nur ca. 1,4 Hz. Damit sollte der interne Takt schon bei 8 MHz laufen. Trotzdem danke und Gruß aus MD! Hallo Frank, das kann schon sein. Im Netz und der Lit. ist immer nur die eine Berechnung zu finden. Denke aber, daß die neueren ATtinys anders ticken und eben schneller. Ja, hilft schon sehr weiter Deine Antwort. Denke, es ist so!!! Gruß aus MD von H.-Jürgen!!!! Hallo Gast, ich habe doch beschrieben was ich eingestellt habe! Außerdem kann ich bei den Fuses keinen internen Takt von 1 MHz finden. Eben nicht der Mega8!
$regfile = "ATtiny24.DAT" $crystal = 8000000 $hwstack = 48 $swstack = 48 $framesize = 80 Clkpr = 128 Clkpr = 0 'damit läuft er auf 8MHz auch wenn clkdiv8-Fuse gesetzt ist... DDRA = &B00000101 On Timer0 INTTimer0 Config Timer0 = Timer , Prescale = 256 Enable Timer0 Enable Interrupts Do Waitms 1000 Loop INTTimer0: Toggle PORTA.0 Return
Danke Frank! Ich messe jetzt die korrekten 61Hz! Und auch der andere Gast hat recht! Sonntag ist gerettet. Ich möchte nämlich eine Servoansteuerung für meinen Modellbahnfreund bauen! Gruß aus MD!!!
HJH-MD schrieb: > Danke Frank! Ich messe jetzt die korrekten 61Hz! > Und auch der andere Gast hat recht! Sonntag ist gerettet. Geht es etwas genauer? Welcher Gast hat recht und wie hast du jetzt die korrekte Blinkfrequenz hinbekommen?
Hallo Lasse, vor meiner Antwort hat nur ein "Gast" geantwortet oder wollte seinen Beitrag leisten! Korrekte Blinkfrequenz mit: Entweder vorher im Studio CKDIV8 = den Haken bei den Fuses entfernen oder wie Simpel (noch ein Gast) korrekterweise geschrieben hat: CLKPR = 128 CLKPR = 0 setzen. Meist wird auch die letzte Zeile 2 x gesetzt, warum auch immer! Und warum erst das letzte Bit auf 1 und dann wieder auf 0! Keine Ahnung! Dann läuft der Timer mit den inneren 8MHz oder mit dem extenen 4MHz-Quarz, ohne interne Vorteilung! Dann nur noch den Prescale wählen (wie in Formel) und die Welt ist i.O.! Suche gerade mal eine Übersicht aller Register des ATtiny24 und deren Erklärung! Schönen Abend noch - H.-J.!
"Und warum erst das letzte Bit auf 1 und dann wieder auf 0! Keine Ahnung!" Das hat Atmel so festgesetzt, dass man zum Umprogrammieren des Systemvorteilers zuerst das Bit7 setzen muss und unmittelbar danach die Teilerbits ohne Bit7... und wenn die das so designed haben, dann machen wir das auch so... ;-)
Hi >"Und warum erst das letzte Bit auf 1 und dann wieder auf 0! Keine >Ahnung!" Das ist das Clock Prescaler Change Enable (CLKPCE) bit. MfG Spess
Es braucht keinen 1MHz RC, wenn man fabrikneu DIV8-Fuse gesetzt hat! Schade daß ich helfen wollte ;-(
Danke für die viele Hilfe. Es ist eben manchmal simpel, wenn man sich auskennt. ;-) Und nun geht es an das nächste Problem mit dem ADC beim 461! Gruß aus MD von H.-Jürgen
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.