|
最近研究了arduino的定時(shí)器,可以用pwm作為方波發(fā)生器,在9腳上輸出方波。代碼如下:
void setup()
{
// 下面的等值于 OC1A = 輸出用于定時(shí)器1的CTC模式
pinMode(9, OUTPUT); // 設(shè)置默認(rèn)關(guān)聯(lián)了D9(查表得知)為輸出
TCCR1B=0; // 只是個(gè)復(fù)位的習(xí)慣可以不要
TCCR1A=_BV(COM1A0); // 要是困擾的話你也可以寫成 TCCR1A = 0b01000000;
//這里和上一個(gè)表示了 = CTC 模式, 開(kāi)啟比較器(默認(rèn)輸出), prescaler = 1
TCCR1B = _BV(WGM12)|_BV(CS10) ; // 這里等值于 TCCR1B = 0b00001001;
// 最有意思的了,16位的玩意來(lái)確定要一個(gè)怎樣的頻率
OCR1A = 0; // 計(jì)算為:F_CPU/2/Need_HZ-1 來(lái)得到你想要的,遺憾的是四舍五入來(lái)截取頻率
}
void loop(){
//這次啥也沒(méi)做
}
通過(guò)設(shè)置OCR1A來(lái)改變頻率大小,例子上輸出方波頻率為8M,夠高吧!由于OCR1A是16為寄存器,最大也只能設(shè)為65535,故頻率最低可達(dá)到122HZ,arduino晶振為16M,因此這個(gè)例子能輸出的頻率范圍為f/(2*65536) 到f/2, 其中f為arduino時(shí)鐘頻率,即16M
下面是生成8M方波的圖形,非常精準(zhǔn)
1.png (94.45 KB, 下載次數(shù): 107)
下載附件
2018-10-20 00:09 上傳
|
|