Sleep Mode und Uart beim ATmega

16/10/2012 - 10:22 von Stefan | Report spam
Hallo,

laut:

http://www.mikrocontroller.net/articles/Sleep_Mode

kann man, wenn man den Uart verwenden will nur den idle-mode verwenden
und keinen anderen Sleep-Mode. Das deckt sich in etwa mit meinen
Beobachtungen.

Ich würde aber gerne den Power-Down-Mode verwenden, um Strom zu sparen.

Der Ablauf ist in etwa so:

einschalten -> initialisieren ->
While(1) Endlosschleife Anfang -> Sende etas auf Uart -> Sleep-mode

Laut Datenblatt soll man den Uart neu initialisieren, was ich vor dem
Senden gemacht habe, also innerhalb der While(1) Schleife.

Aber nach dem Aufwecken aus dem Sleep per PCINT wacht der Uart offenbar
nicht wieder auf.

Ich hab schon überlegt, den Proz nach den Aufwecken einfach zu reseten.
Dazu wird ein einfacher Sprung nach 0 wohl nicht ausreichen. Alternative
wàre, den Watchdog auszulösen.

Hat da jemand noch weitere Tipps für mich?

Gruß

Stefan
 

Lesen sie die antworten

#1 Heiko Nocon
16/10/2012 - 11:36 | Warnen spam
Stefan wrote:

http://www.mikrocontroller.net/articles/Sleep_Mode

kann man, wenn man den Uart verwenden will nur den idle-mode verwenden
und keinen anderen Sleep-Mode.



Nein, so ist das nicht. Du kannst jeden Sleep-Mode verwenden, die UART
ist nur nicht in der Lage, das Geràt aus den tieferen Schlaf-Modi
aufzuwecken.

Diese Einschrànkung kann man sehr leicht umgehen, indem man beim
Einschlafen die UART deaktiviert und statt dessen den
PinChange-Interrupt für den RxD-Pin aktiviert.

Laut Datenblatt soll man den Uart neu initialisieren, was ich vor dem
Senden gemacht habe, also innerhalb der While(1) Schleife.



1)
Warten bis auch das letzte Bit den Sendepuffer verlassen hat (das kann
bis zu zwei Wortlàngen dauern!).

2)
UART deaktivieren.

3)
PinChange-Interrupt aktivieren

4)
einschlafen.


Nach dem Aufwachen PinChange-Int ausknipsen und UART neu initialisieren.

Das erste Datenwort (dessen Startbit effektiv zum Aufwachen geführt hat)
wird sie allerdings nicht oder zumindest nicht fehlerfrei empfangen
können, allenfalls bei sehr niedrigen Bitraten kann das gelingen. Das
verwendete Kommunikationsprotokoll muß auf diesen Sachverhalt Rücksicht
nehmen.

Ähnliche fragen