Hallo zusammen, ich brauch eure Hilfe. Ich habe den tiny so programmiert, dass er in den power down modus geht und ich diesen mit einem taster wieder aufwecken kann. Funktioniert auch super! Allerdings habe ich einen Stromverbrauch von 360uA... Das verstehe ich nicht. Im Datenblatt stehen 100nA.... Würde mich ja schon mit 1uA zufrieden geben. Ich messe mit einem Multimeter den Versorgungsstrom des tiny hinter einem linearregler (3,3V). Schalte mit den 7 Ausganspins eine Segmentanzeige. Hier mal mein Code und die Fusebits. Vielleicht geht ja bei dieser Konfiguration nichht weniger....
1 | void init_ports(void) |
2 | {
|
3 | DDRA = (1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA7); |
4 | DDRB = (1<<PB0)|(1<<PB1)|(1<<PB2); |
5 | PORTA = 0x01; |
6 | }
|
7 | |
8 | void init_int (void) |
9 | {
|
10 | //falling edge
|
11 | MCUCR |= (1 << ISC01); |
12 | //Pin change on INT0
|
13 | PCMSK0 |= (1 << PCINT0); |
14 | //configure external interrupt
|
15 | GIMSK |= (1 << PCIE0); |
16 | }
|
17 | |
18 | int main(void) |
19 | {
|
20 | init_ports(); //inizialize the ports |
21 | init_int(); |
22 | |
23 | //Global Interrupts enable
|
24 | sei(); |
25 | |
26 | for(;;) |
27 | {
|
28 | |
29 | //do something
|
30 | PORTA |= (1<<PA2); |
31 | _delay_ms(2000); |
32 | PORTA &= ~(1<<PA2); |
33 | |
34 | |
35 | // Sleep enable
|
36 | MCUCR |= (1<<SE)|(1<<SM1); |
37 | // ADC deactivate
|
38 | ADCSRA &=~ (1<<ADEN); |
39 | |
40 | sei(); |
41 | |
42 | // Set the sleep mode "power down"
|
43 | set_sleep_mode(SLEEP_MODE_PWR_DOWN); |
44 | |
45 | // go to sleep
|
46 | sleep_mode(); |
47 | |
48 | cli(); |
49 | |
50 | // Sleep disable
|
51 | //MCUCR &= ~(1<<SE);
|
52 | |
53 | // ADC activate
|
54 | ADCSRA |= 1<<ADEN; |
55 | |
56 | // Sleep enable
|
57 | MCUCR |= (1<<SE); |
58 | |
59 | }
|
60 | }
|
61 | |
62 | |
63 | ISR(PCINT0_vect) |
64 | {
|
65 | PORTA |= (1<<PA1); |
66 | _delay_ms(2000); |
67 | PORTA &= ~(1<<PA2); |
68 | }
|
-U lfuse:w:0x62:m \ -U hfuse:w:0xDF:m \ Danke für die Tips