Forum: Mikrocontroller und Digitale Elektronik Tiny85 Aufwecken


von Steffen (Gast)


Lesenswert?

Hallo miteinander,

ich bin auf der Suche nach eine möglichkeit einen PowerDown Tiny 85 
wieder aufzuwecken. Mit Taster am INT0 ist alles kein Problem. Was will 
ich machen? Ich möchte den Tiny85 "schlafen" schicken, damit meine 
Batterie Anwendung auch lange Laufzeiten hat. Alle 60s soll der AVR 
aufwachen und Daten übertragen. So weit so gut, aber wie, wenn im 
PowerDown nur INT0 geht?

Danke & Gruß Steffen

von m.n. (Gast)


Lesenswert?

Steffen schrieb:
> Alle 60s soll der AVR
> aufwachen und Daten übertragen.

Wer/wie/was soll ihn denn aufwecken?

> So weit so gut, aber wie, wenn im
> PowerDown nur INT0 geht?

PCINT ginge u.a. auch.

von Anon Y. (anonymous)


Lesenswert?

Watchdog kann alle 8s aufwecken. Im watchdog Interrupt die wakeups 
zählen. Wenn 60s noch nicht vorbei wieder schlafen.

von Oliver J. (skriptkiddy)


Lesenswert?

Steffen schrieb:
> Hallo miteinander,
>
> ich bin auf der Suche nach eine möglichkeit einen PowerDown Tiny 85
> wieder aufzuwecken. Mit Taster am INT0 ist alles kein Problem. Was will
> ich machen? Ich möchte den Tiny85 "schlafen" schicken, damit meine
> Batterie Anwendung auch lange Laufzeiten hat. Alle 60s soll der AVR
> aufwachen und Daten übertragen. So weit so gut, aber wie, wenn im
> PowerDown nur INT0 geht?
>
> Danke & Gruß Steffen

Der Watchdog kann dafür benutzt werden.
Grüße Oliver

von Steffen (Gast)


Lesenswert?

die Idee mit dem Watchdog ist gut. Geht auch :-) Vielen Dank :-)

von Steffen (Gast)


Lesenswert?

Da ich schon sehr viel aus dem Forum entnehmen konnte, hier für alle die 
auch einen AVR per Watchdog aufwecken wollen. Das ist als Beispiel und 
Test zu sehen. Ich verwende einen ATTiny85. Dieser soll nach gewisser 
Zeit was tun :-) Dabei kann man die Zeit über den WDT einstellen (bis 
8s) oder einfach die ISR zählen und dann bei erreichen einer Vorgabe 
weiteren Code ausführen. Zum Test habe ich eine LED an PB3 
angeschlossen. Zu beachten ist, der WDT darf nicht per Fuse 
eingeschalten werden!
1
/*
2
************************************************************************
3
*
4
* Sleep Mode Demo, PowerDown + WDT weckup
5
* 
6
* WDTON Fuse darf nicht gesetzt sein 
7
*
8
* ATiny 85 intern 8Mhz Takt
9
*
10
* An PB3 eine LED mit 1 kOhm Vorwiderstand gegen +5V 
11
*
12
************************************************************************
13
*/
14
15
16
#include <avr/io.h>
17
#include <avr/sleep.h>
18
#include <avr/interrupt.h>
19
#include <util/delay.h>
20
21
volatile uint16_t wdt_count = 0;
22
23
//Watchdog ISR
24
ISR(WDT_vect) {
25
  wdt_count++;
26
}
27
28
// aus Sleep Demo 
29
void long_delay(uint16_t ms) {
30
    for (; ms>0; ms--) _delay_ms(1);
31
}
32
 
33
int main (void) {
34
 
35
36
  DDRB |= (1 << DDB3); //Ausgang
37
  PORTB |= (1<<PB3);  // LED aus
38
39
  MCUSR |= (1 << WDRF);  // WDT ein
40
41
  WDTCR |= (1 << WDIE) | (1 << WDP3) | (1 << WDP0); //WDT Interrupt ein, Timer Prescaler 1024 8.0s
42
43
  sei(); 
44
 
45
  for(;;)
46
  {
47
 
48
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);  
49
   sleep_mode();                     // in den Schlafmodus wechseln
50
 
51
   // hier wachen wir wieder auf
52
   // nach mehrmaligen WDT Interrupt LED an
53
    if (wdt_count == 2){
54
      wdt_count = 0;
55
      PORTB &= ~(1<<PB3); // LED an
56
      long_delay(1500);
57
      PORTB |= (1 << PB3); // LED aus
58
      long_delay(1500);
59
    }
60
    }
61
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.