Forum: Mikrocontroller und Digitale Elektronik sleep mode bzw. power save mode


von tommi (Gast)


Lesenswert?

hallo zusammen,

ich habe frage über power save mode und habe schon diesem artikel über 
***sleep mode*** gelesen aber noch nicht wirklich verstanden.

Beitrag "Power Down Atmega32"

meine frage lautet:

- wenn ich meinen uc im power-down-mode setzen und durch externe int 
aufwecken, heisst es doch i.A. in aufgewecktem zustand ein active-mode, 
oder nicht?

- und in active mode laufen alle module wie adc uart mit externe 
oszillator wieder, oder nicht?

danke im voraus.

tommi

von ::: (Gast)


Lesenswert?

Was laeuft und was nicht steht im Datenblatt.

von Falk B. (falk)


Lesenswert?

@  tommi (Gast)

>- wenn ich meinen uc im power-down-mode setzen und durch externe int
>aufwecken, heisst es doch i.A. in aufgewecktem zustand ein active-mode,

Komischer Satzbau. Aber ja, der AVr ist nach dem Aufwecken im Active 
Mode.

>- und in active mode laufen alle module wie adc uart mit externe
>oszillator wieder,

Ja, siehe Sleep Mode.

MFG
Falk

von tommi (Gast)


Lesenswert?

vielen dank an euch beide

nun ich habe ein testprogram wie folgt geschrieben
1
/********************************************************************************/
2
3
#define F_CPU 1843200UL
4
#define BAUD 9600
5
#define MYUBRR F_CPU/16/BAUD-1
6
7
#include <avr/io.h>
8
#include <avr/interrupt.h>
9
#include <avr/sleep.h>
10
11
/********************************************************************************/
12
13
void timer0_aktivieren (void)
14
{
15
  ASSR |= (1 << AS0);
16
  TCCR0 |= (1 << CS02) | (1 << CS00);
17
  TIMSK |= (1 << TOIE0);
18
}
19
20
void USART_Init1 (void)
21
{
22
  uint8_t ubrr = MYUBRR;
23
  UBRR1H = (unsigned char) (ubrr >> 8);
24
  UBRR1L = (unsigned char) ubrr;
25
  UCSR1B = (1 << RXEN1) | (1 << TXEN1);
26
}
27
28
void USART_Transmit1 (char data)
29
{
30
  while (! (UCSR1A & (1 << UDRE1)));
31
  UDR1 = data;
32
}
33
34
void USART_Transmit_String1 (char *s)
35
{
36
  while (*s)
37
    USART_Transmit1 (*s++);
38
}
39
40
/********************************************************************************/
41
42
ISR (TIMER0_OVF_vect)
43
{
44
  USART_Transmit_String1 ("0\n\r");
45
}
46
47
ISR (INT1_vect)
48
{
49
  timer0_aktivieren ();
50
}
51
52
/********************************************************************************/
53
54
int main (void)
55
{
56
  USART_Init1 ();
57
58
  MCUCR |= (1 << SE) | (1 << SM1) | (1 << SM0);
59
60
  EIMSK |= (1 << INT1);
61
  EICRA |= (1 << ISC11);
62
63
  sei ();
64
65
  while (1)
66
  {
67
    sleep_mode ();
68
  }
69
70
  return 0;
71
}

und es soll wie folgt arbeiten.

- beim einschalten geht der uc in sleep mode ein.
- nach dem int-eingang soll der uc wieder aufwecken und zeichenkette 
ausgeben. danach wieder in power save mode gehen und wiederholt bei 
timeroverflow sich diese aktion jeder sekunde.

und habe es getestet aber irgendwas stimmt noch nicht. statt "0\n\r" 
auszugeben, gibt es vollig andere zeichenkette aus und diese zeichen 
sind nicht mal auf dem ascii-tabelle.

weisst jenmand wie so?

oh my test platine hat ein 1,84 Mhz externe quartz und ein rtc 32 khz am 
tosc-eingänge

vg

tommi

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.