时代还怪 发表于 2012-12-5 20:13:33

AVR mega8 CTC datasheet上分频计算出错?

按照datasheet上面介绍CTC模式下分频的计算公式
fOCnA = fclk_io/(2 *N* (1+ OCRnA ))------------   公式1
但我实际测试出来的分频值却貌似应该是
fOCnA = fclk_io/(N* (1+ OCRnA ))----------------- 公式2
这样算的。
下面是我的实测代码,8M外部晶振,理论上应该是PB0输出应该是持续40ms的高地电平变化实际上却是20ms的高电平变化。
如果是用公式1,想不通,但用公式2算却是合理的,难道是datasheet上出错?还是我自己算出了,请各位大虾赐教。void TimeCounter1_Init(void)
{
        TCCR1A = 0;
        TCCR1B = (1<<WGM12);
        OCR1A= 156;
        TIFR = 0;                               //clear interrupt flag
        TIMSK = (1<<OCIE1A); //enable compare match interrupt
        DDRB = 0x01;
        TCNT1 = 0;TCCR1B |=(1<<CS10)|(1<<CS12);sei();//enable T/C0;
}

volatile uChar Count = 0;
ISR(TIMER1_COMPA_vect)
{

        PORTB++ ; //Count;
}
int main( void )
{

        TimeCounter1_Init();
       
       
        for(;;)
        {
       
        }
        return 0;
}

时代还怪 发表于 2013-1-12 09:05:59

是我自己算错了,不好意思啊!
页: [1]
查看完整版本: AVR mega8 CTC datasheet上分频计算出错?