Karl schrieb:
> Habe hierzu das Bsp programm aus der
> Sleep.h angepasst.
Dieses Beispielprogramm soll nur die Funktion der getrennten
Sleep-Makros erläutern. Die brauchst du für deinen Zweck
gar nicht.
> DDRB = (1 << DDB2);
> DDRC = (1 << DDD2);
DDD2 gehört aber nach DDRD, nicht nach DDRC. ;-)
Ich würde das einfach so schreiben:
1 | #define F_CPU 8000000ul
|
2 | #include <avr/io.h>
|
3 | #include <util/delay.h>
|
4 | #include <avr/interrupt.h>
|
5 | #include <avr/sleep.h>
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | int i = 0;
|
10 | DDRB = (1 << DDB2);
|
11 |
|
12 | for(;;)
|
13 | {
|
14 | PORTB ^= (1<<PB2); //toggel LED
|
15 | _delay_ms(1500);
|
16 | i++;
|
17 | set_sleep_mode(SLEEP_MODE_PWR_DOWN);
|
18 | if (i == 3)
|
19 | sleep_mode();
|
20 | }
|
21 | return 0;
|
22 | }
|
Beachte, dass du derzeit rein gar nichts definiert hast, was den
Prozessor wieder aus dem Schlaf aufweckt. Außerdem wird die
CPU mit PB2 = low angehalten aber mit aktivem Ausgang. Falls
deine LED low-aktiv ist, wird sie also weiterhin Strom ziehen.
Die offenen Eingänge der anderen Pins können u. U. auch recht
viel Stromverbrauch verursachen.