最近研究了arduino的定时器,可以用pwm作为方波发生器,在9脚上输出方波。代码如下:
void setup()
{
// 下面的等值于 OC1A = 输出用于定时器1的CTC模式
pinMode(9, OUTPUT); // 设置默认关联了D9(查表得知)为输出
TCCR1B=0; // 只是个复位的习惯可以不要
TCCR1A=_BV(COM1A0); // 要是困扰的话你也可以写成 TCCR1A = 0b01000000;
//这里和上一个表示了 = CTC 模式, 开启比较器(默认输出), prescaler = 1
TCCR1B = _BV(WGM12)|_BV(CS10) ; // 这里等值于 TCCR1B = 0b00001001;
// 最有意思的了,16位的玩意来确定要一个怎样的频率
OCR1A = 0; // 计算为:F_CPU/2/Need_HZ-1 来得到你想要的,遗憾的是四舍五入来截取频率
}
void loop(){
//这次啥也没做
}
通过设置OCR1A来改变频率大小,例子上输出方波频率为8M,够高吧!由于OCR1A是16为寄存器,最大也只能设为65535,故频率最低可达到122HZ,arduino晶振为16M,因此这个例子能输出的频率范围为f/(2*65536) 到f/2, 其中f为arduino时钟频率,即16M
下面是生成8M方波的图形,非常精准
|