質問編集履歴
1
コード誤記修正、可読性向上
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Attiny13A
|
1
|
+
Attiny13A スリープモードから復帰後にmicros()関数を使う方法
|
test
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
Attiny13Aにて、SLEEP_MODE_PWR_DOWNから復帰した後、micros()関数が意図通り機能しません。
|
1
|
+
Attiny13Aにて、スリープモード(SLEEP_MODE_PWR_DOWN)から復帰した後、micros()関数が意図通り機能しません。
|
2
|
-
|
2
|
+
スリープ後にもmicrosを使う方法を教えていただけないでしょうか?
|
3
3
|
|
4
|
-
|
4
|
+
スリープモードから復帰後、PB0を3秒間HIGHにしたいのですが、スリープ後はPB0が一瞬だけHIGHになり、すぐにLOWになってしまいます。
|
5
|
-
なお、電源投入後から
|
5
|
+
なお、電源投入後からスリープ前の初回のLED()は問題なく動作します。
|
6
6
|
また、"micros"の代わりに"delay"を使うと問題なく動作します。
|
7
7
|
|
8
8
|
タイマー関連のレジスタの設定が原因かと思いましたが、解決方法を見つけることができませんでした。
|
@@ -25,14 +25,13 @@
|
|
25
25
|
void Sleep() {
|
26
26
|
GIMSK |= _BV(PCIE);
|
27
27
|
PCMSK |= _BV(PB4);
|
28
|
-
PCMSK = 0b00010010;
|
29
28
|
sei();
|
30
29
|
sleep_enable();
|
31
30
|
sleep_cpu();
|
32
31
|
cli();
|
33
32
|
sleep_disable();
|
34
|
-
GIMSK =
|
33
|
+
GIMSK &= ~_BV(PCIE);
|
35
|
-
PCMSK =
|
34
|
+
PCMSK &= ~_BV(PB4);
|
36
35
|
}
|
37
36
|
|
38
37
|
ISR(PCINT0_vect) {
|