www.mikrocontroller.net

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


Autor: tommi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ::: (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was laeuft und was nicht steht im Datenblatt.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tommi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank an euch beide

nun ich habe ein testprogram wie folgt geschrieben
/********************************************************************************/

#define F_CPU 1843200UL
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

/********************************************************************************/

void timer0_aktivieren (void)
{
  ASSR |= (1 << AS0);
  TCCR0 |= (1 << CS02) | (1 << CS00);
  TIMSK |= (1 << TOIE0);
}

void USART_Init1 (void)
{
  uint8_t ubrr = MYUBRR;
  UBRR1H = (unsigned char) (ubrr >> 8);
  UBRR1L = (unsigned char) ubrr;
  UCSR1B = (1 << RXEN1) | (1 << TXEN1);
}

void USART_Transmit1 (char data)
{
  while (! (UCSR1A & (1 << UDRE1)));
  UDR1 = data;
}

void USART_Transmit_String1 (char *s)
{
  while (*s)
    USART_Transmit1 (*s++);
}

/********************************************************************************/

ISR (TIMER0_OVF_vect)
{
  USART_Transmit_String1 ("0\n\r");
}

ISR (INT1_vect)
{
  timer0_aktivieren ();
}

/********************************************************************************/

int main (void)
{
  USART_Init1 ();

  MCUCR |= (1 << SE) | (1 << SM1) | (1 << SM0);

  EIMSK |= (1 << INT1);
  EICRA |= (1 << ISC11);

  sei ();

  while (1)
  {
    sleep_mode ();
  }

  return 0;
}

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.