2015年2月12日木曜日

妖怪ウオッチ零式 プログラム編 イントロダクション

AVR2313を使ってプログラムを作っていきます。
基本は追加SWの状態を見て、妖怪ウオッチのメダル識別SWをON/OFFすることです。
まずは回路図を。

召還SWと種族切替えSWを割り込み端子につないで
SW割り込みにより、プログラムが起動されるようにします。
押されたSWが決まれば次は、メダルのパターンを出力ポートに順次出力するだけです。
このときメダル挿入時の出力と、メダル抜き出し時の出力は
出力パターンが真逆になるので、それぞれ処理を用意します。

・プログラム構成
 プログラムは以下のような構成にします。
  ・初期化処理
  ・割り込み処理
    INT0:召還SW割り込み処置
    INT1:種族変更SW割り込み処理
  ・アイドル処理
    召還処理
    種族変更処理
    スリープ処理
・初期化処理
 a)PORTB、PORTDの方向設定とプルアップルの指定を行います。
   DDRB  = 0xff//方向設定レジスタの指定  x1111 1111
  DDRD  = 0xb3//方向設定レジスタの指定  x1011 0011
  PORTD = 0xff;    // データレジスタの指定
 b)スリープモードの指定。
 SWが押されずなにもすることがないときにスリープ状態にして
 電池の消耗を押さえることが目的です。初期化処理で
  #include <avr/sleep.h>
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); と指定することで、
パワーダウンモードのスリープとなり、クロック発信器を停止させ、クロックの供給を停止します。外部割り込みは動作を継続します。WDTを停止させておけば 0.3μAしか電池を消耗しなくなります。 電池で動く物には必須ですね。

・割り込み処理
  #include <avr/interrupt.h>
ISR (INT0_vect,ISR_BLOCK) // 召還 SW 割り込み
{
    //召還 SWが押されたことを記録
    sw_stat = NEXT_SW;
}

ISR (INT1_vect,ISR_BLOCK) // 種族きりかえ SW 割り込み
{
    //種族きりかえ SWが押されたことを記録
    sw_stat = CHANGE_SW;

}

sw_stat変数は、アイドル処理で参照するので、volatile指定にします。
volatile unsigned char sw_stat = 0;//割り込みSW押下状態(族切り替えSW,召還 SW

・アイドル処理
  アイドル処理は、SWの押された状態を判断して、各々の処理を行います
そして最後にスリープします。次にSWが押されるまで停止します。
for (;;)
{
   //SW 状態により各、メダルパターン出力処理を実行
   sleep_mode(); //スリープ開始。

}

戻る

0 件のコメント:

コメントを投稿