Forum: Mikrocontroller und Digitale Elektronik AVR Power-Down mit USART wakeup


von 2lazy2login (Gast)


Lesenswert?

Hallo,

ist es möglich den AVR (ATMEGA169) in den Power-Down-Modus zu schicken
und ihn vom USART-Received-Interrupt wieder aufzuwecken?

Im Datenblatt steht davon leider nichts explizits drin (vgl
two-wire-interface) ...

Der Controller macht halt im Prinzip nichts anderes als auf die RS232
zu warten und da es sich um ein Batteriebetriebenes Gerät handelt, wäre
schon wünschenswert da Strom zu sparen ...

Weiß da jemand was näheres?

von johnny.m (Gast)


Lesenswert?

Im Datenblatt, Abschnitt "Power Management and Sleep Modes" steht
eigentlich für jeden einzelnen Sleep-Modus, welche Interrupts zum
Aufwecken genutzt werden können. Habe kein Datenblatt vom 169 da, aber
bei anderen AVRs geht das über USART nur im IDLE-Mode und nicht im
Power-Down.

von Stefan K. (_sk_)


Lesenswert?

Um Daten über UART zu empfangen, muss die CPU-Clock am laufen sein. Das
ist nur im Idle-Mode der Fall.

Es ist denbar, die Pegeländerung am RXD-Pin zum Aufwecken aus tieferen
PWDN-Modi zu benutzen, indem man den UART-Eingang sowohl auf RXD als
auch auf einen INT-Pin legt. Dabei ist aber zu beachten, dass der
Oszillator eine Weile braucht, um anzulaufen. Die ersten paar Bytes
einer Übertragung sind also Schrott. Abhilfe z.B. durch ein erstes
Dummy-Byte zum Aufwecken, dann Pause, dann erst Daten.

Bitte auch den Stromverbrauch der RS232-Treiber beachten. Es gibt
mittlerweile sehr gute Treiber mit PWDN-Möglichkeit, die während dem
PWDN den Zeichenempfang erlauben.

Gruß, Stefan

von johnny.m (Gast)


Lesenswert?

@Stefan:
Richtig, im UART-Mode kann das aus genau dem Grunde nicht
funktionieren. Bei USART wäre das aber zumindest theoretisch möglich,
da bei USART-Operation der Schiebetakt von extern mitgeliefert werden
kann...

Aber wie schon weiter oben gesagt: Alle Theorie nützt nix, wenn die
Praxis dafür nicht vorgesehen ist...

von Martin Thomas (Gast)


Lesenswert?

Beim ATmega169 kann der RX-Pin auch als Quelle fuer Pin-Change Interrupt
genutzt werden. Man benoetigt somit keine externe Verbindung RX zu INT0.

von 2lazy2login (Gast)


Lesenswert?

>>>
Beim ATmega169 kann der RX-Pin auch als Quelle fuer Pin-Change
Interrupt
genutzt werden. Man benoetigt somit keine externe Verbindung RX zu
INT0.
<<<

Gut das du das erwähnst ... Pin-Change-Interrupts funktionieren auf
meinem MEGA169 nämlich gleich überhaupt nicht ...

Ich wollte PB1 (anderes Problem) als PCInterrupt verwenden und habe
folgendes gemacht:


void PINC_Init(void)
{
// PCINT9 ist PB1
PCMSK1 |= (1<<PCINT9);
// Interrupt enable setzen
EIMSK |= (1<<PCIE1);
sei();
}

SIGNAL (SIG_PIN_CHANGE1)
{
[...]
}

Ich habs tausend mal mit dem Datenblatt gecheckt, aber ich finde den
Fehler nicht und der Interrupt wird einfach nicht ausgeführt ...

von 2lazy2login (Gast)


Lesenswert?

Die Probleme haben sich jetzt doch endlich in Wohlgefallen aufgelöst
...

Ich verwende jetzt den Idle-Mode und beim anderen PCINT-Problem war der
Fehler natürlich im [...] versteckt ...

Ich glaub ich bin heute schon etwas arg müde und sollte lieber
Feierabend machen :/

Mfg
Thomas

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.