ATTiny461 Timer0 = 16Bit-Timer?

Gast #7320638
Lesenswert?

Abendgruss aus Magdeburg,

wollte mit dem Timer0 beim ATTiny461 einen Takt erzeugen. Interner Oszillator ist 8MHz und Takt ist auch korrekt. Eine LED blinkt im Sekundentakt! Nun toggle ich einen Port beim Interrupt (Überlauf des Timers) und messe nur 62,2 Hz! Das wäre aber bei einem 16Bit-Timer der Fall. Lt. Datenblatt ist der Timer0 aber ein 8Bit-Timer! Stehe ich auf dem Schlauch? Programmiere mit BASCOM Vers. 2.0.7.7! Danke

Gast #7320646
Lesenswert?

Lt. Datenblatt ist der Timer0 aber ein 8Bit-Timer!

? - Unter 'Features' lese ich im Datenblatt:

• 8-bit Mode with Two Independent Output Compare Units • 16-bit Mode with One Independent Output Compare Unit

Man müsste folglich das Programm sehen.

Beitrag #7320655 wurde von einem Moderator gelöscht.
Gast #7320682
Lesenswert?

Sorry!

$regfile = "ATtiny461.dat" $crystal = 8000000 'DivideClock by 1

Ddrb = &B00000011

On Timer0 Ontimer0 'Interrupt-Routine für Timer0 - Überlauf Config Timer0 = Timer , Prescale = 1
Enable Timer0
Enable Interrupts LED Alias Portb.0

Do Toggle LED 'LED blinkt im Sekundentakt Waitms 500 Loop End

Ontimer0: Portb.1 = Not Portb.1 Return

Gast #7320687
Lesenswert?

Schlecht, da hatte ich jetzt gehofft, dass mehr zu sehen ist, speziell das Setzen von TCCR0A.TCW0 - das ist nämlich für die Mode-Umschaltung zuständig. Initial value ist aber 0, d.h. 8-bit-Mode, folglich scheint BASCOM das automatisch zu setzen.

Gast #7320709
Lesenswert?

Also das steht schon auf der ersten Seite des Datenblatts:

1
• Peripheral Features
2
– One 8/16-bit Timer/Counter with Prescaler
3
– One 8/10-bit High Speed Timer/Counter with Prescaler
  1. Zeile Timer0, 2. Zeile Timer1.

Woher kommen Ihre Angaben?

#7320826
Lesenswert?

Hallo,

das notwendige TOP Register für den Takt ist beim Timer 0 nur im 8 Bit CTC Mode einstellbar. Ansonsten ist das TOP Register jeweils fix auf Maximum festgelegt. Die Frequenz ist dann nur noch grob mittels Prescaler einstellbar. 1Hz sind damit nicht möglich.

Der 10 Bit Timer 1 mit seinen vielen und größeren Prescalern ist für 1Hz und weit darunter verwendbar.

Eine andere Möglichkeit mittels ISR wäre den Timer 0 im 8 Bit CTC Mode auf eine höhere Frequenz einzustellen, passendes Vielfaches, und dann einen Zähler inkrementieren lassen der bei Vergleich auf Zielfrequenz irgendwas auslöst. In deinem Fall einen Pin umschalten. Nachteil höhere Interrupt Last. Vorteil es ist variabel und möglich. :-)

Du müßtest den passenden Prescaler und passenden Wert für das TOP Register einstellen.

Gast #7320946
Lesenswert?

Morning! Habe mal nicht die BASCOM-Befehle genommen sondern direkt die Register. Und auch mal direkt die hex-Datei mit dem ATmel-Studio 4.19 auf einem anderen PC übertragen. Jetzt funktioniert es problemlos und die LED fühlt sich erwartungsgemäß nicht mehr so gut mit über 15T Interrupts pro s. Denke das Problem liegt an der Übertragung meines alten Prog.-Adapter unter Win7. Danke noch mal für die Hinweise!

Gast #7321296
Lesenswert?

Juergen schrieb:

??? Sind die Standardwerte für Bascom wenn nicht angegeben. Habe damit noch nie Probleme bekommen und sogar mit einigen Unterprogrammen und Funktionen. Daran liegt es sicher nicht!

Wenn HWSTACK = 0 kriegt der Interrupt Probleme. Es schadet nicht, trotzdem einen Blick auf die Standartwerte zu werfen. Die sind nicht in Stein gemeißelt und veränderbar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren