AVR定时器中断溢出 (2016-07-29 23:06:51)

最近开始学习飞控的PWM信号输入,发现以前的认知不太正确。一年前做的蓝牙信号接收器,直接给了4个PWM信号的输出。而PWM的频率是arduino默认的频率。但是最近才发现,遥控器的PWM信号常用的是50Hz,也就是信号间隔20ms。

因此打算自己弄个定时器来生成中断,然后设置管脚的高低电平来模拟PWM。

以前用的是MEGA328P,现在打算改用TINY24了。

这是个16位的定时器,时钟频率是8M:

void timer1_init(void)

{

 TCCR1A = 0;

 TCCR1B = 0;

 // 这里设置256分频

 TCCR1B |= (_BV(CS12));

 // 其他控制寄存器都设置为空

 TCCR1C = 0;

 //这里设置了一个1.5ms的延时

//值 = 等待的时长(us) * 时钟频率(MHz)/分频

// 46 = 1500 * 8 / 256

 TCNT1 = 65536 - 46;

 // 开启溢出中断

 TIMSK1 = 1;

}

中断响应函数

ISR(TIMER1_OVF_vect)

{

 // 这里重置触发计数器

 TCNT1 = 65536 - 46;

}

看起来还是很简单。在设置寄存器的时候,要把未用的位先置0。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容