質問編集履歴

1

コード誤記修正、可読性向上

2022/01/18 14:53

投稿

gge
gge

スコア10

test CHANGED
@@ -1 +1 @@
1
- Attiny13A PWR_DOWNから復帰後にmicros()関数を使う方法
1
+ Attiny13A スリープモードから復帰後にmicros()関数を使う方法
test CHANGED
@@ -1,8 +1,8 @@
1
- Attiny13Aにて、SLEEP_MODE_PWR_DOWNから復帰した後、micros()関数が意図通り機能しません。
1
+ Attiny13Aにて、スリープモード(SLEEP_MODE_PWR_DOWN)から復帰した後、micros()関数が意図通り機能しません。
2
- PWR_DOWN後にもmicrosを使う方法を教えていただけないでしょうか?
2
+ スリープ後にもmicrosを使う方法を教えていただけないでしょうか?
3
3
 
4
- PWR_DOWNから復帰後、PB0を3秒間HIGHにしたいのですが、PWR_DOWN後はPB0が一瞬だけHIGHになり、すぐにLOWになってしまいます。
4
+ スリープモードから復帰後、PB0を3秒間HIGHにしたいのですが、スリープ後はPB0が一瞬だけHIGHになり、すぐにLOWになってしまいます。
5
- なお、電源投入後からPWR_DOWN前の初回のLED()は問題なく動作します。
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 = 0b00000000;
33
+ GIMSK &= ~_BV(PCIE);
35
- PCMSK = 0b00000000;
34
+ PCMSK &= ~_BV(PB4);
36
35
  }
37
36
 
38
37
  ISR(PCINT0_vect) {