新・踏切カンカン ATtiny13A版 [Arduino]
ATtiny13AでPWMを使った踏切カンカンです。
接続は、8-PDIP/SOIC では、
2 (PB3), 3 (PB4) をLEDに、
4 (GND) を乾電池のマイナス極に、
5 (PB0, OC0A) をスピーカーに、
8 (VCC) を乾電池のプラス極に
つなぎます。
ソースは比較的シンプル。(420バイト)
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.)
再生できない場合、ダウンロードは🎥こちら
接続は、8-PDIP/SOIC では、
2 (PB3), 3 (PB4) をLEDに、
4 (GND) を乾電池のマイナス極に、
5 (PB0, OC0A) をスピーカーに、
8 (VCC) を乾電池のプラス極に
つなぎます。
ソースは比較的シンプル。(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.)
再生できない場合、ダウンロードは🎥こちら
2012-11-26 01:06
nice!(0)
コメント(1)
トラックバック(0)
はじめまして!
こちらの記事を参考にさせていただいて、踏切カンカンを作っております。ウチのは「カンカン」にはまだまだほど遠いのですが、こちらのカンカンを目標に頑張ろうと思います。
by NO NAME (2013-06-19 19:52)