Forum: Mikrocontroller und Digitale Elektronik Arduino (ATMEGA4809) wacht nicht mehr auf aus Power Down Sleep Mode


von intInt (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe ein Problem mit dem ATMEGA4809 bei dem ich einfach nicht mehr 
weiterkomme. Nachdem ich den Arduino nämlich in den 
Power-Down-Sleep-Mode versetze bekomme ich ihn nicht mehr wach. Ich habe 
es mit einem Periodic Interrupt Timer versucht (laut Datasheet), jedoch 
scheint es ihn beim "Clock-Switch" aufzuhängen.

Weiß hier jemand weiter bzw. eine Idee wie ich den Atmega4809 wach 
bekomme. Anbei habe ich noch einen Auszug vom Datasheet angehängt.
1
CPU_CCP = 0xD8; //unlock...
2
  CLKCTRL_OSC20MCTRLA = 00000010; //Aktiv bleiben in Standby
3
  CPU_CCP = 0xD8; //unlock...
4
  CLKCTRL_OSC32KCTRLA = 00000010; //Aktiv bleiben in Standby
5
  CPU_CCP = 0xD8; // unlock
6
  CLKCTRL_MCLKCTRLA = 00000001; //Source Clock wechseln -> Hier blinkt die LED und es scheint zu einem Deadlock zu kommen...
7
  
8
  RTC.CLKSEL = RTC.CLKSEL & 11111100;
9
  RTC.PITINTCTRL = RTC.PITINTCTRL | 00000001;
10
  while (!(RTC.STATUS == 0) && !(RTC.PITSTATUS == 0)){
11
      Serial.println("...");
12
  }
13
  RTC.PITCTRLA = 01110001;
14
  delay(500);
15
  Serial.println("PIT active...and going to sleep");
16
  
17
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
18
  sleep_enable();
19
  sleep_mode();
20
  sleep_disable();



Danke schon einmal und LG
Markus

von Timmo H. (masterfx)


Lesenswert?

Nach MCLKCTRLA change auf stable CLKCTRL.MCLKSTATUS warten?
Dann sei()?

: Bearbeitet durch User
von intInt (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Timmo,

danke für deine Antwort!

Er steckt nur leider dennoch bei
1
CLKCTRL_MCLKCTRLA = 00000001;

fest. Es scheint fast so als würde eine Konfiguration fehlen. Ein 
Clock-Wechsel sollte jedoch laut Datasheet auch im normalen Betrieb 
möglich sein:

"All internal oscillators can be used as the main clock source for 
CLK_MAIN. The main clock source is selectable from software, and can be 
safely changed during normal operation."

Nur so wie ich das verstanden habe muss ich einen Main Clock Switch 
machen, da im "Power Down"-Modus nur der "32 KHz ULP Int. Oscillator" 
funktioniert (Anbei das Schaltbild dazu).

Ich bin wirklich für jeden weiteren Hinweis dankbar!

LG

von P. M. (mikro23)


Lesenswert?

intInt schrieb:
> CLKCTRL_OSC32KCTRLA = 00000010;

> RTC.PITCTRLA = 01110001;

Zahlen, die mit 0 beginnen, werden in C üblicherweise als Oktalzahlen 
interpretiert...

von Thomas E. (thomase)


Lesenswert?

intInt schrieb:
> Er steckt nur leider dennoch bei
> CLKCTRL_MCLKCTRLA = 00000001;

Nur weil die Zahl nur aus Nullen und Einsen besteht, wird der Compiler 
sie nicht als Dualzahl ansehen. Oder was soll er davon
CLKCTRL_MCLKCTRLA = 10000000;
halten?

Abgesehen davon, daß, wie schon gesagt wurde, eine führende Null eine 
Oktalzahl kennzeichnet, muß eine Dualzahl auch als solche gekennzeichnet 
sein:
CLKCTRL_MCLKCTRLA = 0b00000001;

Sonst wird das als Oktalzahl gelesen, mit einer Eins vorn als 
Dezimalzahl.

von intInt (Gast)


Lesenswert?

Hallo,

danke euch für die Antworten!

das habe ich auch bereits ausgebessert, nur leider ohne Erfolg...

LG

von intInt (Gast)


Lesenswert?

...ich habe "0b" anfangs weggelassen, weil im Datasheet folgendes steht:
1
'0101' Binary numbers are given without prefix if
2
unambiguous

das habe ich dann etwas falsch interpretiert :-)

von intInt (Gast)


Lesenswert?

Hat noch wer Ideen?

Danke und LG

von intInt (Gast)


Lesenswert?

https://www.avrfreaks.net/forum/tinyavr-1-series-071ua-rtc-running-how

...hier hat offensichtlich wer das gleiche Problem -_-
Nie mehr Atmega 4809...

von void (Gast)


Lesenswert?

intInt schrieb:
> ...hier hat offensichtlich wer das gleiche Problem -_-

Hätte gedacht dort hat jemand die Lösung.
Zitat:
"UPDATE: Test code with periodic wake every 10 sec using RTC:"

von intInt (Gast)


Lesenswert?

Schon versucht, nur leider wacht er immer noch nicht auf...

Danke euch für die Hilfe und Unterstützung. Ich werde den Arduino 
einfach per DC-Anschluss über Strom versorgen.

LG

von c-hater (Gast)


Lesenswert?

intInt schrieb:

> Schon versucht, nur leider wacht er immer noch nicht auf...
>
> Danke euch für die Hilfe und Unterstützung. Ich werde den Arduino
> einfach per DC-Anschluss über Strom versorgen.

Kein weiterer Kommentar erforderlich, die Arduino-Userschaft hat wieder 
mal ihre eigenen, absolut weltbewegenden Standards zum kompetenten 
Umgang mit digitaler Technik der doch (heutzutage) ziemlich untersten 
Komplexitätskategorie gesetzt...

LOL

von Juser (Gast)


Lesenswert?

Leider gibt es hier zu viele Bummler, die wenig Ahnung und viel Zeit für 
unkonstruktive Posts haben...

von M. (Gast)


Lesenswert?

intInt schrieb:
> Nur so wie ich das verstanden habe muss ich einen Main Clock Switch
> machen, da im "Power Down"-Modus nur der "32 KHz ULP Int. Oscillator"
> funktioniert (Anbei das Schaltbild dazu).

Das schon, aber nur für BOD und WDT.
Eine Taktumschaltung ist aber ansonsten nicht erforderlich!

von Peter D. (peda)


Lesenswert?

intInt schrieb:
> Es scheint fast so als würde eine Konfiguration fehlen.

Ich kenne das von den alten ATmega so, daß der T2 mit externem 
Uhrenquarz synchronisiert werden muß. Er hat dazu zusätzliche temporäre 
Register. Der CPU-Takt schreibt ins temporäre Register und die 32kHz 
übernehmen dann in den Timer. D.h. nach Änderungen muß das entsprechende 
Busy-Bit abgefragt werden, bis die Änderung auch wirklich übernommen 
wurde.

: Bearbeitet durch User
von M. (Gast)


Lesenswert?

Es bedarf hier weder einer neuen Taktquelle noch eines Quarzes.

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.