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
- Tovább (Atmega8 PWM timer1 - ICR1 figyelmen kívül marad)
- 6463 megtekintés