C言語プログラミングでアトメル社製ATtiny2313マイコンでプログラミングをやってます。
ATtiny2313のパワーダウンモード機能を使って割り込み入力端子、INT0、INT1端子を使って、入力の組み合わせでLEDを数パターンの点滅させるステートを作り、入力がない場合は、パワーダウンモードのステートで消費電流を節約するようにし、次の割り込みを待つようなプログラムを作っています。
ただ、パワーダウンモードのステートに入って、きっかけである”sleep_mode();”関数を使うと、割り込み入力でウェイクアップさせようとしてもLEDの点灯ステートに行っていないようで、完全にマイコンが動作停止してしまいます。
この時の状態をyoutubeに動画投稿しましたので参照をお願いします。
現在このプログラムは
https://sourceforge.jp/projects/midicv/svn/view/ …
このサイトで”Download GNU tarball”をクリックでダウンロードできるようになっております。
この問題の原因がわかるかたいらっしゃいましたら是非ご教授よろしくお願い致します。
ちなみに、このプログラムファイル”LED_FLASHER.c”の224行目のsleep_mode();関数をコメントアウトすると、このステートマシンはちゃんと動作できていることを確認しております。こちらも動画で掲載しております。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
・原因はsleep_mode()関数がコールされる直前に割り込みが発生する為です。
sleep_mode()関数がコールされる前にGIMSKの操作により割り込み許可にしていますが,その直後にINT0/INT1の割り込みが発生して,GIMSKによる割り込み禁止の状態でsleepになる為,割り込みが発生せずsleepしたままになります。(複合要因の可能性もありますが1つの原因です。)
この問題の改善案・・・(すいません実機が無いので実際に動作するか未確認です。)
■修正点その1
case MODESW_LOWPOWER ://ここからINT0/1が発生しても割り込み処理内で処理を行わない。
GIMSK |= (1<<INT0);
GIMSK |= (1<<INT1);
sleep_mode();
MODESWState = MODESW_IDLE;//ここからINT0/1が発生したら既存どおり
break;
■修正点その2
SIGNAL(SIG_INTERRUPT0)
{
if (MODESWState != MODESW_LOWPOWER) { // LOWPOWER以外は既存処理どおり。
GIMSK &= ~(1<<INT0);
GIMSK &= ~(1<<INT1);
MODESWState = MODESW_INPUT_CHK;
}
}
SIGNAL(SIG_INTERRUPT1)
{
if (MODESWState != MODESW_LOWPOWER) {
GIMSK &= ~(1<<INT0);
GIMSK &= ~(1<<INT1);
MODESWState = MODESW_INPUT_CHK;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# プログラム内から、MIDIファイルの一部分だけを再生する方法 1 2023/02/15 11:08
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- スポーツサイクル ロードバイクを先月購入し別売りのヘッドライドを付けたのですが段差を通る度落ちてしまい、1ヶ月で5回も 2 2023/06/06 14:49
- 照明・ライト 21700バッテリーを使用するライトって18650でも使える可能性は高いでしょうか? それとも使用不 4 2022/03/25 15:31
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【組込み】割り込み中のstatic...
-
USB機器からのデータ受信による...
-
マイコン C言語 割り込み処理...
-
ショッピング
-
CPUの処理量を減らすコーデ...
-
割り込みについて
-
割り込み処理から引数を取得す...
-
PICで内部タイマーを使わずカウ...
-
pic 複数の割り込み関数 切り分...
-
コールバック関数について
-
ウォッチドッグタイマ(WDT)の...
-
インバウンドで迷惑している人...
-
PICマイコン 割り込み実行時間...
-
CPUの割込みについて
-
CPU負荷率の安全な上限と計...
-
PICのPIN変化割り込みに...
-
PICのPWMの正しい使い方につい...
-
電車で待機列の割り込みについ...
-
VB6でSendKeyを利用したTab移動...
-
IRQって何ですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ショッピング
-
スーパーのレジで並んでいたら...
-
pic 複数の割り込み関数 切り分...
-
マイコン C言語 割り込み処理...
-
Amazonfireタブレットにわから...
-
CPUの処理量を減らすコーデ...
-
irqbalance って
-
CPU負荷率の安全な上限と計...
-
一定時間操作がなかったら、と...
-
電車で待機列の割り込みについ...
-
VB6でSendKeyを利用したTab移動...
-
駅のトイレでナイチンに邪魔さ...
-
(H8マイコン)タイマ割込で変更...
-
アセンブラのタイマー割り込み
-
PICのPIN変化割り込みに...
-
USJでの割り込み
-
PIC16F84AのRBポート変化割り込...
-
H8マイコンで割り込みが任意の...
-
プリントスクリーンの自動化
-
定周期での割り込み
おすすめ情報