私は運がないAtmega2560のtimer0でPB7ピンからPWM出力を取得しようとしています。この接続repro.My PWMの設定のためのトーンを生成する必要があります:Atmega2560 PWM on PB7
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);。 3つすべてが設定されている場合は、以下を意味します。** T0ピンの外部クロックソース。立ち上がりエッジでクロック**。 ** T0 **に外部クロックソースがない場合は、プリスケーラなしのソースとしてCPU周波数を得るために 'CS00 'を設定するだけです。 –
これは動作しますが、現在はPB7で出力していますが、周波数が高すぎます。私がSoundOutput(400)を呼び出すと、トーン生成には高すぎる12.5usのOスコープ期間に入ることができます。 –
2560のCPU周波数が16MHzであるため、はいです。したがって、トーン信号の周期は、 't =(1/f_CPU)* uintTone/2'となります。パラメータuintToneを結果の周波数にしますか?私は答えとして時間があるので、後でそれを掲示します。 –