ラーメンタイマー初号機
マイコンの基本的な機能の勉強のためにラーメンタイマーつくりました。
時間はLED3つで示します。スイッチは2つ用意し1つはスタート用、もう1つはリセット用になっています。まだまだ未完成なところがあり(例えばリセット後勝手にスタートしてしまう)改良の余地はかなり残ってます。進化系としては7セグメントLEDで秒数まで表示することを考えていますが実際に作るかはわかりません。習得したスキルとしては割り込み及びタイマー割り込みです。割り込み制御すばらしいです、強すぎです。
参考にさせていただいたサイトです。
今から始めるAVR
一応コード載せて置きます。
int main(void) { //初期化 //タイマー割り込み TCCR1A = 0b00000000;//CTC動作 タイマー1 TCCR1B = 0b00001011;//64分周動作 TCCR1C = 0b00000000; OCR1AH = 61; OCR1AL = 8;//Ca=15624,1秒で割り込み TIMSK1 = 0b00000010;//タイマー1A割り込み許可 //割り込み スイッチ用 EICRA=0b00000010;//INT0がhighからlowに変わると割り込み EIMSK=0b00000001;//INT0割り込み許可 //ポート設定 DDRD = 0b00000000;//D2を入力にセット PORTD = 0b00000100;//D2をプルアップ DDRB = 0b00000000;//B0をスイッチに使用 PORTB = 0b00000001;//B0をプルアップ DDRC = 0b00001111;//C0~2をLEDに、C3をブザーに PORTC = 0b0000111; //ループ for(;;) { sw = PINB;//スイッチ監視 if(sw & _BV(PB0))//スイッチ1が押された { _delay_ms(10);//10ms待つ sei();//割り込み許可 } if(count<=60)//1分未満 { PORTC = ff; }else if(count<=120&&count>60)//2分未満 { PORTC = 0b00000011^(ff<<1); }else if(count<=180&&count>120)//3分未満 { PORTC = 0b00000111^(ff<<2); }else if(count<=185&&count>180)//3分以上 { PORTC = 0b00001111;//ブザーを5秒鳴らす } sw=PINB; } return 0; }