SSブログ

新・踏切カンカン ATtiny13A版 [Arduino]

ATtiny13AでPWMを使った踏切カンカンです。

接続は、8-PDIP/SOIC では、
 2 (PB3), 3 (PB4) をLEDに、
 4 (GND) を乾電池のマイナス極に、
 5 (PB0, OC0A) をスピーカーに、
 8 (VCC) を乾電池のプラス極に
つなぎます。

pr_fumikiri2.jpg
ソースは比較的シンプル。(420バイト)
// 踏切音くん (ATtiny13A, 9.2MHz)

void setup() {  
  DDRB   = B11001;                                       // PB0(OC0A)をサウンド出力, PB3,PB4をLED
  TCCR0A = _BV(COM0A1) | _BV(WGM01) | _BV(WGM00);        // 8bit高速PWM
  TCCR0B = _BV(CS00);                                    // 分周なし
  TIMSK0 = 0;                                            // Arduino の割り込みを潰す
  PORTB |= B01000;                                       // LEDを片方だけ点灯する
}

void loop() {
  unsigned int pwmVal, t;
  
  PORTB ^= B11000;                                       // LEDを交互に光らせる
  
  for( t = 0; t < 15000; t++ ) {                         // 音発生のループ
    pwmVal = ( t & B111111 )  * ( 255 - (t>>6) ) >> 6;   // 計算式で音の波形をつくる
    while( !(TIFR0 & _BV(TOV0)) );                       // タイマーがオーバーフローするのを待つ
    TIFR0 |= _BV(TOV0);                                  // Timer/Counter0 Overflow Flag をクリア
    OCR0A = pwmVal;                                      // PWMの値を指定
  }
}

LEDを交互に光らせるのに、PINB (Port B Input Pins Address) に反転させたいビットの論理1を書き込むことでもできるようです。

(10.2.2 Toggling the Pin : Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.)


タグ:踏切 ATtiny13A
nice!(0)  コメント(1)  トラックバック(0) 

nice! 0

コメント 1

NO NAME

はじめまして!
こちらの記事を参考にさせていただいて、踏切カンカンを作っております。ウチのは「カンカン」にはまだまだほど遠いのですが、こちらのカンカンを目標に頑張ろうと思います。
by NO NAME (2013-06-19 19:52) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。