Forum: Mikrocontroller und Digitale Elektronik SAM4E Backup Mode / Low Energie


von Godi S. (godi22)


Lesenswert?

Hallo,

ich bin gerade am herausfinden wie ich den SAM4E richtig in den Backup 
Mode bringe bzw der Stromverbrauch minimal wird. Der RTC soll mit dem 
externen 32kHz Oszillator weiterlaufen, damit die Uhrzeit erhalten 
bleibt.

Prinzipiell funktioniert der Backup Mode mit folgenden Code:
1
  /* Enable the PIO for wake-up */
2
  supc_set_wakeup_inputs(SUPC, SUPC_WUIR_WKUPEN7_ENABLE, SUPC_WUIR_WKUPT7_LOW);
3
4
  supc_set_wakeup_mode(SUPC, SUPC_WUMR_FWUPDBC_512_SCLK);
5
6
  /* Switch MCK to slow clock  */
7
  pmc_switch_mck_to_sclk(PMC_MCKR_PRES_CLK_1);
8
9
  /* Disable unused clock to save power */
10
  pmc_osc_disable_xtal(0);
11
  pmc_disable_pllack();
12
13
  /* Enter into backup mode */
14
  pmc_enable_backupmode();

VDDIN und alle VDDIO werden weiterhin mit 3V3 versorgt wie es im 
Datenblatt bei der Schaltung für die Strommessung ausgeführt ist.

http://ww1.microchip.com/downloads/en/devicedoc/atmel-11157-32-bit-cortex-m4-microcontroller-sam4e16-sam4e8_datasheet.pdf#G36.1531751

Folgend ist noch ein Link zu einer Application Note für Low Power.
http://ww1.microchip.com/downloads/en/AppNotes/Atmel-42142-SAM-AT03258-Using-Low-Power-Mode-in-SAM4E-Microcontroller_Application-Note.pdf

Leider konnte ich aber nirgends herausfinden wie die Pins geschalten 
werden sollen.
Ich habe zwei Arten, für andere µC) gefunden:
1) Pullup-Widerstand deaktivieren, Ausgang aktivieren und auf low 
schalten.
2) Pullup-Widerstand aktivieren, Eingang aktivieren.

Wie macht Ihr dies?
Für alle Pins oder nur für die verwendeten?

Was kann ich noch beachten?

von Adam P. (adamap)


Lesenswert?

Meinst du allgemein, wegen dem Stromverbrauch?

von Adam P. (adamap)


Lesenswert?

Schau dir mal das Beispiel-Projekt für Low-Power an, z.B. für das 
SAM4E-XPRO Board:
Device Family "SAM4E" auswählen und im Suchfeld nur "power" eingeben.

Da findest du in der main() den Aufruf von init_chip() und darin den 
Aufruf von init_specific_board().

Darin ist wohl das was du suchst, wenn ich dich richtig verstanden habe.

: Bearbeitet durch User
von Godi S. (godi22)


Lesenswert?

Adam P. schrieb:
> Da findest du in der main() den Aufruf von init_chip() und darin den
> Aufruf von init_specific_board().

Danke für den Hinweis!

Was ich aber da gar nicht verstehe ist, warum die Einstellungen für low 
power in init_chip() passieren, also bevor das Hauptporgramm ausgeführt 
wird. Im Hauptprogramm wird dann wieder der Clock und die 
dementsprechenden Pins verändert.
Warum wird hier nicht in der Funktion test_backup_mode() pins, clock, 
... so eingestellt dass eine Low-Power consumption erfolgt?

von Adam P. (adamap)


Lesenswert?

Godi S. schrieb:
> Was ich aber da gar nicht verstehe ist, warum die Einstellungen für low
> power in init_chip() passieren, also bevor das Hauptporgramm ausgeführt
> wird.

Die setzen wohl am Anfang erstmal alles auf Low-Power (default).

In der Funktion init_specific_board(void) siehst du ja dann ganz unten
1
  /* Enable the PMC clocks of push button for wakeup */
2
  pmc_enable_periph_clk(ID_PIOE);
3
  pio_handler_set_priority(PIOE, PIOE_IRQn, IRQ_PRIOR_PIO);

Dort wird der eine Pin wieder aktiviert, sonst würdest dich ja so 
gesehen aussperren.

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.