Hallo,
derzeit baue ich eine Schaltung auf, die als Low Power und mit einem
32.768 Quarz laufen soll. Ziel ist es, unter 10uA im Powersave-Mode zu
kommen, der Quarz soll dabei weiterlaufen.
Die neueren ATMega 48P/PU und 328P sollen laut Datenblatt im
Powersave-Modus nur ca. 1 Mikroampere (einschliesslich Quarz) benötigen.
Tatsächlich messe ich bei meinem ATMega 48PV-10PU ca. 1 Milliampere (bei
2V Vcc).
Im Programm, das ich mit BASCOM übersetzt habe, habe ich den Befehl
"CONFIG POWERMODE = POWERSAVE"
verwendet, wie in der Bascom-Hilfe angegeben.
Gibt es vielleicht irgendeinen Trick oder ein anderes (neues?) Kommando?
Deine Schaltung und die Programmierung der Pins muss natürlich im
Powersave dafür sorgen, das auch kein Strom in die Ausgänge fliessen
kann. Wenn du z.B. einen Pullup per Controller im Powerdown auf low
ziehst, wird da Strom fliessen.
Hallo,
Dann kann man am Programm bestimmt auch sehen, dass die IO Pins
abgeschaltet sind, sowie auch die unterschiedlichen Hardware Module.
Dann wird das "Problem" am Aufbau liegen.
Sprichwort: "Wer misst misst misst."
Hallo S. Landolt,
S. Landolt schrieb:> Ist es klar, dass "Timer/Counter2 running in asynchronous mode"> für die> gewünschte RTC nötig ist?
Ich habe sein Post so verstanden, dass der 32,768 KHz Quarz als CPU Takt
verwendet wird.
Gern gemachter Fehler: offen gelassene Eingänge.
Also je nach Wunsch
- Als Ausgang programmieren;
- Pullup aktivieren
- digitalen Eingang deaktivieren (DIDR), so möglich
- von aussen auf festes Potential legen
ansonsten zieht ein offener Eingang, der irgendwo zwischen lo und hi
rumfloatet gern mal Milliamperes.
hps schrieb:> Tatsächlich messe ich bei meinem ATMega 48PV-10PU ca. 1 Milliampere (bei> 2V Vcc).
Programmer abgezogen? Du wärest nicht der erste, der daruf reingefallen
ist(mich eingeschlossen).
Falk B. schrieb:> S. Landolt schrieb:>> Wenn ich mich recht erinnere, spielt das bei Power-save und Power-down>> keine Rolle.>> FALSCH!
Sind Sie sicher? Zitat:
In sleep modes where both the I/O clock (clkI/O) and the ADC clock
(clkADC) are stopped, the input buffers of the device will be disabled.
This ensures that no power is consumed by the input logic when not
needed.
Hallo,
S. Landolt schrieb:> In sleep modes where both the I/O clock (clkI/O) and the ADC clock> (clkADC) are stopped, the input buffers of the device will be disabled.> This ensures that no power is consumed by the input logic when not> needed.
Der Abschnitt hat noch weitere Absätze mit wichtigen Infos.
Ich zitiere mal komplett:
Quelle:
https://www.mouser.de/datasheet/2/268/Atmel-8025-8-bit-AVR-Microcontroller-ATmega48P-88P-1315175.pdf
S.68 - 14.11.6. Port Pins
"When entering a sleep mode, all port pins should be configured to use
minimum power. The most important is then to ensure that no pins drive
resistive loads.
In sleep modes where both the I/O clock (clk I/O ) and the ADC clock
(clk ADC ) are stopped, the input buffers of the device will be
disabled. This ensures that no power is consumed by the input logic when
not needed.
In some cases, the input logic is needed for detecting wake-up
conditions, and it will then be enabled.
Refer to the section Digital Input Enable and Sleep Modes for details on
which pins are enabled. If the input buffer is enabled and the input
signal is left floating or have an analog signal level close to V CC /2,
the input buffer will use excessive power. (!!!!)
For analog input pins, the digital input buffer should be disabled at
all times. An analog signal level close to V CC /2 on an input pin can
cause significant current even in active mode. Digital input buffers can
be disabled by writing to the Digital Input Disable Registers (DIDR0 for
ADC, DIDR1 for AC)."
Damit wir uns richtig verstehen, Falk B. und Karl M.: ich bin auch für
'klare Verhältnisse' und lasse nichts undefiniert, aber hier ist doch
die Frage, woher das eine mA bei hps kommt.
Jup, das ist ja das tolle daran. Die Zustände, auch Pullups bleiben im
power-down aktiv.
Neben der offenen Eingänge auch noch den ADC deaktivieren. Waren bei
einem ähnlichen Projekt mit einem ATTiny13 ca. 350µA. Brown Out
Detection (Fuse) braucht auch noch ein paar µA.
hps schrieb:> Die neueren ATMega 48P/PU und 328P sollen laut Datenblatt im> Powersave-Modus nur ca. 1 Mikroampere (einschliesslich Quarz) benötigen.> Tatsächlich messe ich bei meinem ATMega 48PV-10PU ca. 1 Milliampere (bei> 2V Vcc).>> Im Programm, das ich mit BASCOM übersetzt habe, habe ich den Befehl> "CONFIG POWERMODE = POWERSAVE"> verwendet, wie in der Bascom-Hilfe angegeben.>> Gibt es vielleicht irgendeinen Trick oder ein anderes (neues?) Kommando?
Man müßte schon dein ganzes Programm sehen, um dir sagen zu können, was
du falsch gemacht hast. Aber in einem nichttrivialen Programm reicht es
nicht aus, den µC nur einmal schlafen zu schicken. Man muß das jedes Mal
wieder machen, wenn er durch irgendwas aufgeweckt worden ist.
Die gebräuchlichste Methode besteht darin, das Hauptprogramm in eine
Endlosschleife zu packen und immer dann, wenn alles abgearbeitet worden
ist (vulgo: am Ende des Schleifenrumpfes) schlafen zu gehen. Im
Extremfall macht der µC alle Arbeit in der jeweiligen Interrupt-
Serviceroutine und die Hauptschleife enthält dann nichts mehr außer der
Anweisung, schlafen zu gehen.
Siehe das zweite Beispiel hier:
https://avrhelp.mcselec.com/index.html?config_powermode.htm
Vielen Dank erstmal an alle !
Es scheint tatsächlich daran zu liegen, dass der uC im Entwicklungsboard
steckt und ich nur den PIN7 (=VCC) separiert habe und da den Stromfluss
gemessen habe ...
Das Board (Pollin) hat soviel Zeugs drauf, da werde ich morgen erst mal
ein nacktes Board mit einem Prozessorsockel, dem Quarz (12,5pf) und 2x
12pF (nach Masse) bestücken (hat so auf dem Entw.board funktioniert).
Der "nackte" Prozessor zieht tatsächlich nur 0,9 Mikroampere.
An Karl M. noch:
Der Prozessortakt ist bei mir wie der Default, also 1 MHz. Der 32kHz
(Quarz an B.6 und B.7) geht hier nur auf den Timer 2, also nichts !!! in
den Fuses verstellen, das kann bei der niedrigen Frequenz in die Hose
gehen (man kann dann evtl. kein Programm mehr laden !)
Der Timer 2 wird so konfiguriert:
Config Timer2 = Timer , Async = On , Prescale = 1024
Da der Timer2 8bit hat, resultiert daraus eine Periode von 8sec., mit
der die zugehörige Interrupt-Routine beim Ablauf des Timers gestartet
wird. Dadurch wird auch der Prozessor wieder aus dem POWERSAVE
aufgeweckt.
Nach jeweils 8 sec. kommt dann wieder die Main-Loop dran, in der
Diverses erledigt wird. Am Ende hat die Main-Loop das "Config Powermode
= Powersave " Kommando.
Nach 10800 Zyklen ist 1 Tag rum (mit für meine Zwecke hinreichender
Genauigkeit) und es kann wieder von vorne losgehen... So wäre mein
Konzept für eine Steuerung, die jeden Tag dasselbe machen soll.
VG von HPS
S. Landolt schrieb:>> offen gelassene Eingänge>> Wenn ich mich recht erinnere, spielt das bei Power-save und Power-down> keine Rolle.
Offene Eingänge spielen immer eine Rolle, denn das sind Antennen, die
sich quasi automatisch auf maximale Empfindlichkeit optimieren und dann
die digitalen Schaltstufen des Eingangs zum "Wackeln" bringen.
Auch wenn das für die Funktion einer Anwendung unwichtig ist: es ist
nicht unwichtig für den Energiebedarf. Denn Wackeln bedeutet
grundsätzlich erstmal Energiebedarf. Und der ist umso höher, je
schneller das Wackeln ist. Zwar ist die typische EMV-Umgebung von 50Hz
des Energienetzes dominiert, aber zumindest in der Nähe der
Nulldurchgänge der dominierenden Schwingung wird auch gerne noch
wesentlich schneller gewackelt, bis weit in den 10-MHz-Bereich. Das
läppert sich...