最近研究了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方波的圖形,非常精準
1.png (94.45 KB, 下載次數: 107)
下載附件
2018-10-20 00:09 上傳
|