Forum: Mikrocontroller und Digitale Elektronik Timer0 beim ATtiny24


von HJH-MD (Gast)


Lesenswert?

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

von Uwe (de0508)


Lesenswert?

Wie stellst Du sicher, dass der Attiny mit 8MHz läuft ?

von Frank L. (hermastersvoice)


Lesenswert?

den Clockdivider übersehen?

von Bastler (Gast)


Lesenswert?

Ab Werk läuft der mit 1MHz, wegen DIV8 Fuse. Dann passen deine Meßwerte.

von HJH-MD (Gast)


Lesenswert?

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!

von Simpel (Gast)


Lesenswert?

$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

von HJH-MD (Gast)


Lesenswert?

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!!!

von lasse (Gast)


Lesenswert?

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?

von HJH-MD (Gast)


Lesenswert?

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.!

von Simpel (Gast)


Lesenswert?

"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... ;-)

von spess53 (Gast)


Lesenswert?

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

von lasse (Gast)


Lesenswert?

@HJH-MD
Danke und weiterhin viel Erfolg.

von Bastler (Gast)


Lesenswert?

Es braucht keinen 1MHz RC, wenn man fabrikneu DIV8-Fuse gesetzt hat!
Schade daß ich helfen wollte ;-(

von HJH-MD (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.