Forum: Mikrocontroller und Digitale Elektronik Timer1 vom ATTiny461 ein 8Bit-Timer? (Bascom)


von Theo (Gast)


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

von Stefan F. (Gast)


Lesenswert?

Irgendwie kommt mir das bekannt vor. Hatten wir nicht erst vor kurzem 
jemanden, der auf die gleiche Einschränkung von Bascom gestoßen war?

von S. Landolt (Gast)


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?"

von HildeK (Gast)


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

von S. Landolt (Gast)


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

von Theo (Gast)


Lesenswert?

Ok und danke, hatte ich nicht gefunden.
Werde dann mal im Datenblatt mir speziell die Register vornehmen
und es darüber versuchen!
Danke und schönen Abend noch
Theo

von S. Landolt (Gast)


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

von S. Landolt (Gast)


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.

von Theo (Gast)


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.

von S. Landolt (Gast)


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

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.