1) your code
TCCR1A = (0 << WGM10) | (0 << WGM11);
TCCR1B |= (0 << WGM12); // CTC mode
These 2 lines create a basic CTC mode with maximum count of 0xffff;
which means that the vlaue in OCR1A is ignored. This would not be the
correct CTC mode. set WGM12 to 1.
TCCR1B |= (1 << WGM12); // proper CTC mode max is = to value in OCR1A
2) your code
TCCR1B |= (1 << CS12); // Use system clock CS12 = 1
TCCR1B |= (1 << CS10) | (1 << CS11) | (0 << CS12); // no div, full clock
result is that CS12 = 1 OR 0 = 1, CS11 =0, and CS10 = 1
so then from these two lines CS12..10 = 101 which gives a divide clk by
1024.
dividing clk by 1024 and then counting that to 0xFFFF (65535) and
toggling divides by 2 that should be a few seconds indeed.
change: TCCR1B |= (0 << WGM12); to TCCR1B |= (1 << WGM12);
remove : TCCR1B |= (1 << CS12); // Use system clock now CS12..10
will be 001 or divide by 1
then tweak the compare match value
rep
On 9/27/2011 10:41 PM, Philippe Habib wrote:
>
> As it turned out, I need timer 0 to run PWM on a pin so I have to use
> timer 1 for my timer tick.
>
> Using what I learned from timer 0, I was hoping it would be easy to
> generate a 10ms tick using timer 1.
>
> Here is my setup:
>
> TCCR1A = (0 << WGM10) | (0 << WGM11); // Make sure these are low for CTC
> TCCR1B |= (0 << WGM12); // CTC mode
> TCCR1B |= (1 << CS12); // Use system clock
> TCCR1B |= (1 << CS10) | (0 << CS11) | (0 << CS12); // no div, full clock
> TIMSK1 = (1 << OCIE1A); // Set int for match on A
>
> OCR1A = 64000; // compare value
> // OCR1AH = 0xFF; // MSB
> // OCR1AL = 0x00; // LSB
>
> Here is my ISR
>
> ISR(TIMER1_COMPA_vect)
> {
> PORTD ^= (1 << 6); //Toggle LED
> return;
> }
>
> Using the system clock, I am getting times in the seconds. Am I doing
> something totally wrong with my timebase, or something else?
>
> Thank you for any light you can shed on this.
>
>Message
Re: [AVR-Chat] More timer confusion
2011-09-28 by R E Purcella
Attachments
- No local attachments were found for this message.