Timer 1 Troubles
2006-12-13 by dr_bitbucket
I'm writing some assembly code for an ATtiny24 for a new project. I
need to use timer1 to PWM output PA5 (OC1B) (pin 8, I believe) at
close to 38 kHz and 50% PW, it's for an IR LED being sensed by an
IS1U60. I am using timer0 for PWM motor control (which works just
fine), and I would prefer to use timer1 for this application as it
offers a phase and frequency correct PWM mode, and I think that's
snazzy.
The steps I have taken to initialize my timer1:
My DDR for port A5 has been set to output in a previous
instruction.
I begin by writing my TOP value to 16-bit registers OCR1AH and
OCR1AL, writing high-byte before low.
I write to TCCR1A, disabling OC1A, enabling OC1B with code
0b10, and setting Waveform Gen Mode bits 1 and 0 with code 0b01.
I write to TCCR1B, setting Waveform Gen Mode bits 3 and 2 with
code 0b10 (which completes setting WGM to mode 9) and set my clock
prescaler bits CS1[2:0] to 0b001 for a prescale rate of CLK/1. To
my understanding this is supposed to start the timer.
Here's the problem:
On the instruction cycle immediately following my write to TCCR1B,
Waveform Gen Mode bit 3 is cleared automatically. This appears to
occur while flags OCF1A and OCF1B are simultaneously set, though I
am not sure if this is connected or relevant. And the real kicker
is that the timer doesn't even appear to start: TCNT1x registers
are not incrementing, just remaining clear. Even if I test the
timer1 in a mode other than PFC-PWM, for example fastPWM, the timer
still refuses to start. Has anyone seen this before (Craig???)? It
feels like there is some kind of master control bit I have
neglected.
I am using the AVRstudio simulator config'd for an ATtiny24. Hoping
this is a simulator bug, though it'll be a bugger to debug if it is.
Thanks for any help you can provide,
Evan Haklar