Atmega8 PWM timer1 - ICR1 figyelmen kívül marad

Sziasztok,

Az a problémám, hogy nem sikerül megfelelő működésre bírnom a timer1-et.
14-es módban (98. oldal a doksiban, 39-es táblázat) elvileg az ICR1 határozza meg, hogy meddig számlál mielőtt nullázódna, de ezt sajnos a szimulátorban (AVR Studio 4.15) futtatás nem támasztja alá. Bármit írok ICR1-be, figyelmen kívül hagyja.Amivel próbálkoztam:
14-es PWM módhoz WGM13:0 -> 1110
ICR1-be a célértéket írtam, jelen esetben 20000 (1 Mhz-en 20ms, szervó vezérléshez kell majd)
Prescalert beállítottam Clock/1-re
A debugolás miatt TOIE1 -> 1, plusz egy megszakításrutin, hogy tudjam hová tenni a breakpointot.
Mi hiányozhat még?

A kód:

.include "m8def.inc"

.def temp = R16
.def tempH = R17
.def tempL = R18

.org 0x000 ; start of code space
rjmp RESET ; reset vector

.org 0x008
rjmp TIMER1_OVF ; Timer1 overflow

.org 0x013
RESET:
ldi temp, HIGH(RAMEND) ; Stack pointer to the end of RAM
out SPH,temp
ldi temp, LOW(RAMEND)
out SPL,temp

ldi tempH, HIGH(20000) ; set PWM cycle length -> 20ms (1Mhz)
ldi tempL, LOW(20000)
out ICR1H, tempH
out ICR1L, tempL

ldi temp, 0b00000010 ; bits 1:0 WGM11:10 -> for fast PWM mode 14
out TCCR1A, temp

ldi temp, 0b00011001 ; bits 2:0 set prescaler for timer1 to clkIO/1 (1 cycle -> 1 count)
out TCCR1B, temp ; bits 4:3 WGM13:12 -> for PWM mode 14

ldi temp, 0b00000100 ; enable Timer/Counter1 Overflow interrupt
out TIMSK, temp

sei ; enable interrupts

LOOP:
rjmp LOOP ; main loop for nothing -> test timer1

TIMER1_OVF:
reti

Hozzászólások

szerintem fuss at meg a doksin a timer1-el kapcsolatson dolgokon es ne feledd h nem csak kozvetlenul a timer1-el kapcsolatos dolgoktol fugg a mukodes.
a watchdog timer is megszivathatja az embnert ha nincs kikapcsolva...

a timer1 tovabbszamol annal ahol megszakitast kene okoznia?

Igen, továbbszámol. Viszont a hiba nem a kódomban volt, úgyhogy az utókornak:
A szimulátor a hibás, a 16 bites PWM funkciókat nem kezeli rendesen. Forrás az AVR Studio helpben, és itt:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=53562…

A megoldás a Simulator 2 használata, ami a linkelt fórum tanulsága szerint már az aktuális chip design fileokat használja, és sokkal jobb szimulációt eredményez. Sajnos az Atmega8 pont hiányzik a támogatott chipek közül, úgyhogy villámgyorsan átportoltam a kódot Atmega48-ra, és tettem egy próbát. Az eredmény teljesen jó volt, így már reagált a rendszer az ICR1 változtatására.
(Gyors ellenőrzés után lábkompatibilisnek is tűnik egyébként a kettő, úgyhogy a chipcsere is megoldás lehet a dev boardon.)