Arduino (ATMEGA4809) wacht nicht mehr auf aus Power Down Sleep Mode

Gast #5669115
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
Angehängte Dateien:
Gast #5669596
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
Angehängte Dateien:
#5669792
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.
Gast #5670551
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
Gast #5670859
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!
#5671164
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren