So, mir hat es keine Ruhe gelassen...
Der Fehler liegt an "Timer0 = Timervorgabe". Timer0 (TCNT0) ist für Bascom ein 8Bit Timer. Nachdem ich diesen aber als 16Bit schalte kann ich aber nicht mehr auf Timer0-Wert zugreifen/setzen.
Für Timer1 funktioniert das, da Bascom die 2 8Bit Register (TCNT1H und TCNT1L) als ein pseudoregister Timer1 (TCNT0) bereit stellt. Das ist aber für Timer0 nicht vorgesehen.
Eine schöne Beschreibung die mir auf die Sprünge geholfen hat: http://halvar.at/elektronik/kleiner_...timer_counter/
Und das gleiche Thema schonmal diskutiert: http://www.avr-praxis.de/forum/showt...e-f%FCr-Timer0
Da die Timervorgabe ignoriert wurde hatte ich eine Frequenz von 0,47684Hz also 2Sekunden Blinkfrequenz.
Da das Pseudoregister nicht mehr angesprochen werden kann (evtl. gibts eine neuere "attiny861.dat"), muß der Vorgabewert direkt in die beiden 8Bit-Register TCNT1H und TCNT1L (beim attiny861:TCNT0H und TCNT0L) geschrieben werden.
Ich bin mir nur noch nicht ganz sicher wie ich die 16Bit-Timervorgabe auf die beiden 8Bit-Register aufteilen muss, um auf 1Hz Timerfrequenz zu kommen.
Evtl. kann mir das noch jemand erklären? (Mit Timervorgabe*4 sieht es zumindest Augenscheinlich wie 1Hz aus)
Code:
$regfile = "attiny861.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
'Config Timer0 = Timer , Prescale = 256
Tccr0a = &B1000_0000 '16Bit Mode einschalten
Tccr0b = &B0000_0100 'Prescale=256
Config Pinb.4 = Output
Led3 Alias Portb.4
Led3 = 0
Enable Timer0
On Timer0 Timer_irq
Const Timervorgabe = 34286
Enable Interrupts
Do
Loop
Timer_irq:
'Timer0 = Timervorgabe 'Bascom kennt Timer0 nicht als 16Bit Timer
Tcnt0h = Timervorgabe * 4 '
Tcnt0l = Timervorgabe * 4
Toggle Led3
'Wait 1
Return
Danke für Eure Hilfe
mfG
Mario
Lesezeichen