2017-12-29 47 views
-2

Arduino Timer Interruptで助けてください。ピンコントロールのないArduinoタイマー割り込み

私のカスタム機能を開始するためにピン制御なしでタイマOCR0AまたはOCR2Aを起動するにはoutput1Display()? 1msの間隔。

ATmega328P、8MHz水晶。

+1

どうすればよい質問ができますか? https://stackoverflow.com/help/how-to-ask – dda

+1

最小限で完全で検証可能な例の作成方法https://stackoverflow.com/help/mcve – dda

答えて

0

まず、タイマー設定の詳細をカバーする328Pのデータシートを検索してダウンロードする必要があります。 Timer0はおそらく混乱したくない他のものに使われているので、Timer2だけを使うことをお勧めします。

開始時にデータシートが混乱する可能性があるので、必要なものを次に示します。まず、クロックスケーラを選択する必要があります。 Timer2はメインクロックを直接カウントするか、低速の場合は8,32,64,128,256または1024で割ることができます。 Timer2は8ビットのカウンタを使用しているので、(255の負荷で)最も遅いのはプリスケーラ付きクロックの256ティックです。 8MHzのクロックがあり、タイマーの間隔を1ミリ秒にしたい場合は、プリスケーラを1/32に設定して250000Hzのカウンタクロックを得てから、OCR2Aに249をロードして、1000Hzの割り込みで250を除算しますレート。

TCCR2A = 2;   // Set CTC mode. Same as TCCR2A = _BV(WGM21); 
TCCR2B = 3;   // Prescaler to divide by 32 (CS21 and CS20 only) 
TCNT2 = 0;    // Clear the counter 
OCR2A = 249;   // Set for 1 msec rate 
TIMSK2 = 2;   // Set OCIE2A to begin counting with Compare A 

あなたの割り込みハンドラは、セットアップ後とループの前に現れるはずである、このように宣言されています:タイマーがあなたのメインループに設定することができることを

ISR(TIMER2_COMPA_vect) 
{ 
// Your code goes here 
} 

注セットアップコードは次のようになります他の必要なデータがあるまで割り込みを開始したくない場合など、必要に応じてシリアルからコマンドを実行します。または、最終的なTIMSK2 = 2を除き、すべての設定をそのままにすることができます。あなたのシリアルコマンドで与えることができます

関連する問題