ATmega328 - タイマ

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要



タイマ1

タイマ1のコンペアマッチA割り込み

以下の例では、1秒間隔でタイマ割り込みを行い、10回のタイマ割り込みでLEDをトグルしている。

 #include <avr/io.h>
 #include <avr/interrupt.h>
 
 #define LED_PIN PB5  // PB5ピンにLEDを接続
 
 volatile uint8_t timer_count = 0;  // 割り込みハンドラ内でカウントアップ
                                    // 10秒ごとにリセット
 
 // タイマ1のコンペアマッチA割り込みハンドラ
 ISR(TIMER1_COMPA_vect)
 {
    timer_count++;  // この変数の値が10に達した場合にLEDの状態を反転
    if (timer_count >= 10) {
       PORTB ^= (1 << LED_PIN); // LEDをトグル
       timer_count = 0;
    }
 }
 
 int main(void)
 {
    DDRB |= (1 << LED_PIN);  // LEDピン(PB5)を出力に設定
 
    // タイマ1の設定
    TCCR1A = 0;
    TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // CTCモード
    OCR1A = 15624;                                     // プリスケーラ(分周)を1024に設定
                                                       // 16[MHz]の場合の1秒間隔の値
    TIMSK1 |= (1 << OCIE1A);                           // タイマ1のコンペアマッチA割り込みを有効化
 
    sei();  // グローバル割り込みを有効化
 
    while (1) {
       // メイン処理
    }
 }


タイマ1のコンペアマッチB割り込み

以下の例では、1秒間隔でタイマ割り込みを行い、10回のタイマ割り込みでLEDをトグルしている。

 #include <avr/io.h>
 #include <avr/interrupt.h>
 
 #define LED_PIN PB5  // PB5ピンにLEDを接続
 
 volatile uint8_t timer_count = 0;  // 割り込みハンドラ内でカウントアップ
                                    // 10秒ごとにリセット
 
 ISR(TIMER1_COMPB_vect)
 {
    timer_count++;  // この変数の値が10に達した場合にLEDの状態を反転
    if (timer_count >= 10) {
       PORTB ^= (1 << LED_PIN); // LEDをトグル
       timer_count = 0;
    }
 }
 
 int main(void)
 {
    DDRB |= (1 << LED_PIN);  // LEDピン(PB5)を出力に設定
 
    // タイマ1の設定
    TCCR1A = 0;
    TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10);  // CTCモード
    OCR1A = 15624;                                      // プリスケーラ(分周)を1024に設定
                                                        // 16[MHz]の場合の1秒間隔の値
    OCR1B = 15624;                                      // OCR1Bレジスタに、OCR1Aと同じ値を設定
    TIMSK1 |= (1 << OCIE1B);                            // タイマのコンペアマッチB割り込みを有効化

    sei();  // グローバル割り込みを有効化

    while (1) {
        // メイン処理
    }
}