Timer1 vom ATTiny461 ein 8Bit-Timer? (Bascom)

Gast #7340286
Lesenswert?

Abendgruß, wollte den Timer1 eines ATTiny461, laut Datenblatt 10Bit_timer, mit ca.400 vorladen und bekomme die Fehlermeldung in Bascom, dass nur Byte-Werte zugelassen sind. Dass heißt bis max. 255! Darauf habe ich ein kleines Programm kreiert, um das mal auszuprobieren.

Also Taktfrequenz 8MHz ohne Teiler (Divide Clock by 1), Prescaler = 1024 und im Interrupt des Timer toggle ich einen Ausgang. Dann bekomme ich eine Frequenz von 15,4Hz angezeigt!

Das wäre bei mir dann ein 8Bit-Timer!?!? Liege ich da falsch? Danke im Vorraus

Gast #7340299
Lesenswert?

Ja, hatten wir so ähnlich: lässt sich umstellen 8 <-> 10 bit (aber keine Ahnung, wie unter Bascom):

Accuracy: The Timer/Counter1 is a 10-bit Timer/Counter module that can alternatively be used as an 8-bit Timer/Counter. The Timer/Counter1 registers are basically 8-bit registers, but on top of that there is a 2-bit High Byte Register (TC1H) that can be used ...

Beitrag "ATTiny461 Timer0 = 16Bit-Timer?"

Gast #7340300
Lesenswert?

Muss man die oberen zwei Bit nicht eh getrennt und vor den unteren acht in ein anderes Register schreiben? Das dürfte doch nicht von der Programmiersprache abhängen. Datenblatt: "To do a 10-bit write, the high byte must be written to the TC1H register before the low byte is written. For a 10-bit read, the low byte must be read before the high byte."

Gast #7340336
Lesenswert?

Ja, K. Hilde hat Recht, für Vergleiche (compare match) etc. muss TC1H geschrieben werden. Für TCNT1 gilt 'The Timer/Counter1 is realized as a 10-bit up/down counter'. Ganz simpel - Systemtakt/1024 /2 auf PB3 (in Assembler):

1
    sbi     DDRB,3                  ; OC1B
2
    puti    TCCR1A,(1<<COM1B0)      ; toggle
3
    puti    TCCR1B,(1<<CS10)        ; /1
Gast #7340360
Lesenswert?

War leider falsch, brachte 15.7 kHz - nochmal, jetzt sind's (die gewünschten) 3.9 kHz:

1
    sbi     DDRB,3                  ; OC1B
2
    puti    TC1H,3
3
    puti    OCR1C,255
4
    puti    TCCR1A,(1<<COM1B0)      ; toggle
5
    puti    TCCR1B,(1<<CS10)        ; /1
Gast #7340380
Lesenswert?

Erläuterung, der Einfachheit halber Normal Mode: 'the counter counts from BOTTOM to TOP (defined as OCR1C) then restarts from BOTTOM'; 'initial value' von OCR1C ist 255 (0xFF), deshalb fehlte im ersten Beispiel der Faktor 4; durch das Setzen von TC1H auf 3 (0x03) wird TOP=1023 (0x3FF), folglich 1024 Zählschritte: 8.0 MHz / 1024 = 7813 kHz. Das 'toggeln' teilt nochmal durch 2, also: 3906 kHz.

Gast #7340410
Lesenswert?

Danke S. Landolt! Habe mir mal den Beitrag angesehen. D.h. der Timer0 könnte sogar ein 16Bit-Timer werden. Bascom schreibt normalerweise bei anderen Chips problemlos auch im Word-Format. Aber hier denke ich, muß man wohl die High- und Low-Bite-Variante verwenden und nur in den Registern.

Gast #7340420
Lesenswert?

K. Hilde meinte:

Das dürfte doch nicht von der Programmiersprache abhängen.

Mag sein, aber wenn ich das hier sehe, frage ich mich, wie dieses TC1H-Verfahren in Bascom abgebildet ist:

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

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