タイマー割り込みでLEDを点滅させる

さてと、やりたい事はLEDをチカチカさせること(*1)ではないので、
そそくさと、次のフェーズに移る。

byte val = 0;

ISR ( TIMER0_COMPA_vect ) {
  if ( val == 0 ) {
    digitalWrite( 13, HIGH );
  }
  else if ( val == 128 ) {
    digitalWrite( 13, LOW );
  }

  val++;
}

void setup() {
  TCCR0A = 0b00000010; // CTC
  TCCR0B = 0b00000101; // 1/1024
  OCR0A = 61;
  TIMSK0 = 0b00000010;

  pinMode( 13, OUTPUT );
  digitalWrite( 13, LOW );

  TCNT0 = 0;
  sei();
}

void loop() {
  // nop
}

実際にやりたい事は、シリアル通信なんだけど、
Arduinoで用意されているライブラリを使わないで、
音を出すようなプログラムを実行した際のアイドルタイムに処理したい。
でも、いきなりそれは難しいのでタイマー割り込みの復習から。

Arduino Duemilanoveに載っているマイコンはATmega328で、
クロックは16MHzと分かっているので、
分周を1/1024にして、61回目に割り込みが入って、
256回の割り込みを1周期として点滅するようなプログラムを作った。
(間違ってたら指摘してね!)

つまり、

16,000,000 / 1024 / 61 / 256 = 1.00057633(sec)

となり、約0.5秒ずつ点灯と消灯を繰り返している。(たぶん)

という訳で、今日はここまで。

おしまい。

(*1) 「Lチカ」と呼ばれてるアレ

Leave a Comment