Tiny85 Aufwecken

Gast #3425429
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
#3425472
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
Gast #3426025
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.