我想在Atmega2560上用timer0從PB7引腳獲得PWM輸出,但沒有運氣。它應當能夠連接repro.My PWM設置基調是:PB7上的Atmega2560 PWM
DDRB = 0b11100000;
PORTB = 0b00000000;
OCR0A = 0x04;
TCCR0A = (0 << COM0A1) | (1 << COM0A0) | (1 << WGM01) | (0 << WGM00);
TCCR0B = (0 << WGM02) | (0 << CS02) | (0 << CS01) | (0 << CS00);
,然後我有這個功能,這應該產生的聲音:
void SoundOutput(unsigned int uintTone)
{
if (uintTone != 0)
{
LED_2(1);
OCR0A = uintTone;
TCCR0B |= (1 << CS02) | (1 << CS01) | (1 << CS00);
}
else
{
TCCR0B &= ~((1 << CS02) | (1 << CS01) | (1 << CS00));
}
}
但沒有任何反應,當我與音叫它參數。你能幫我麼?
我認爲這是設置來源的這一行:'TCCR0B | =(1 << CS02)| (1 << CS01)| (1 << CS00);'。如果所有三個都被設置,則意味着:** T0引腳上的外部時鐘源。時鐘在上升沿**。如果在** T0 **上沒有外部時鐘源,只需將'CS00'設置爲例如CPU頻率作爲無預分頻器的信號源。 –
這個工作,我現在在PB7輸出,但現在頻率太高。當我調用SoundOutput(400)時,我可以選擇12.5us的O範圍時間段,這對於音調生成來說太高。 –
是的,因爲2560的CPU頻率是16MHz。所以你的音頻信號的週期將是:'t =(1/f_CPU)* uintTone/2'。你想要參數'uintTone'是最終的頻率?我會稍後發佈,因爲我有時間作爲答案。 –