Attiny 2313 Schlafmodus - habe ich was vergessen?

OP #4021925
Lesenswert?
• ▲
▼
Hi,

ich habe (eventuell) ein Problem mit dem Schlafmodus vom Attiny 2313.
Ich bin mir nicht sicher, ob er wirklich im Schlafmodus ist, denn die 
Zielschaltung verbraucht leider eine Knopfzelle innerhalb von 3 Tagen. 
Ich habe kein µAmpermeter um festzustellen, ob der Attiny nun den Strom 
zieht, oder eine andere Komponente (in dem Fall ein Funkmodul, aber das 
sollte auch schlafen).

Zwei Pins, PB3 und PB5 sollen den Controller jeweils wieder kurz 
aufwecken (was auch funktioniert).

Anbei der Code, evtl. kann mir jemand sagen, ob es so geht, oder ob ich 
etwas vergessen habe.
1
#include <avr/interrupt.h>
2
#include <avr/sleep.h>
3
 
4

5
void setup(void) {  
6
    GIMSK |= 1<<INT0 | 1<<INT1;
7
    PCMSK |= (1<<PCINT0);
8
}
9
 
10

11
ISR(INT0_vect)
12
{   
13
   sleep_disable();
14
}
15

16
void go_to_sleep(){  
17
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
18
  sleep_enable();
19
  sei();
20
  sleep_cpu();
21
  cli();
22
}
23

24

25

26
int main(void) {
27
    setup();
28
    for(;;) {
29
    //Do something
30
    go_to_sleep();   
31
  }
32
}


Danke schonmal
OP #4021957
Lesenswert?
• ▲
▼
Okay, werde mal die Fuses schnell ansehen.
Und ich habe gerade mal mit dem Amperemeter gemessen -> 3mA

Hätte nur gedacht, es wäre im µA Bereich... Hätte wohl lieber gleich 
messen sollen.

Ich schaue mal nach, was sich ändert, muss aber erst ein paar Kabel 
anlöten, um den Controller wieder programmieren zu können.
OP #4022033
Lesenswert?
• ▲
▼
Sorry, PB3 und PB0

Da ist einiges durcheinander geraten, bin gerade etwas unkonzentriert.
Also ich habe die Interruptmask auf PCIE gestellt, und bei PCMSK war 
auch ein Fehler, habe die Falschen Pins im Kopf gehabt.
Hier gehörten PCINT0 und PCINT3 im PCMSK gesetzt.

So klappt es, und ich habe nun 0mA (habe leider kein µAmperemeter)
Aber viel besser als 3mA.




So sieht der Code aus, der auch funktioniert:
1
#include <avr/interrupt.h>
2
#include <avr/sleep.h>
3
 
4

5
void setup(void) {  
6
    PORTB |= _BV(PB3) | _BV(PB0);  
7
    PCMSK |= (1<<PCINT0) |(1<<PCINT3);
8
    GIMSK |= 1<<PCIE;
9
}
10
 
11
void go_to_sleep(){  
12
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
13
  sleep_enable();
14
  sei();
15
  sleep_cpu();
16
  cli();
17
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren