Forum: Mikrocontroller und Digitale Elektronik sleep modus - zu hoher Strom


von Christian P. (peterfrosta)


Angehängte Dateien:

Lesenswert?

Hallo Männers und Frauen,

ich hab meinem Funkboard das "Sleepen" beigebracht.
Die Stromaufnahme ist aber zu hoch!

Habe alle für mich erkennbaren Einstellungen getätigt, welche den
Sleepstrom beeinflussen.
Trotzdem ist der Strom im Powerdown-Mode 2mA hoch.

Das C-Programm hab ich angehängt. Sieht hier jemand vllt etwas was
fehlt, bzw fehlerhaft ist????
Ich habe im Moment keine Idee mehr!
für andere Controller wird empfohlen den Debugwire zu deaktivieren.
Diese Option finde ich aber nicht für den Atmega8

Mein Board ist beschränkt auf das wesentlichste:
Atmega8, RFM12, Taster an INT1, 10k an !RESET und Tasterentprellung mit
100k und 100nF gegen GND.
Die einzigen beiden Wiederstände haben dann eine Stromaufnahmen von
(3V/10000 Ohm) + (3V/100000 Ohm) = 0,00033 A

Aufgeweckt wird der Atmega mittels Taster an INT1

KEIN Quartz, keine LED

Stromversorgung erfolgt mittels 2 AAA Batterien, also 3 Volt bzw zum
Strommessen aus dem Labornetzteil.

Danke
mfg

von Uwe (Gast)


Lesenswert?

Alle Pullups enablen oder Alle nichbenutzten Eingänge auf Ausgang 
setzen.

von Christian P. (peterfrosta)


Lesenswert?

Stimmt, das laß ich noch db gestern bevor ich schluss machte... danke.

das kann ich doch so machren oder:

ganz zu beginn einfach alle DDRx auf ausgang stellen.
Alle Portx auf Pullup stellen.
anschließen meine bisherige portinitialisierung, feddig!

mehr ist das doch nciht oder?

von bitte löschen (Gast)


Lesenswert?

Außerdem noch, falls nicht schon geschehen:
BODEN deaktivieren.

von Christian P. (peterfrosta)


Lesenswert?

doch der ist schon deaktiviert.. wollte ich auch eigentlich im quellcode 
als kommentar für sichtbar gemacht haben..
danke

von katastrophenheinz (Gast)


Lesenswert?

Hi
Schon mal nachgemessen, wer ist der Stromfresser ist? RFM12 oder uC ?

von Christian P. (peterfrosta)


Lesenswert?

katastrophenheinz schrieb:
> Hi
> Schon mal nachgemessen, wer ist der Stromfresser ist? RFM12 oder uC ?

Ah super einwand!! ne hab ich noch nicht...  bin davon ausgegangen, das 
mein
rfm_of() das dingen complettt auschaltet, aber die 2 mA laß ioch auch 
schon im RFM datenblatt. Das gilt zu überprüfen.

Uwe schrieb:
> Alle Pullups enablen oder Alle nichbenutzten Eingänge auf Ausgang
> setzen.

Dann sind ja alle Ausgänge auch auf HIGH... irgendwie paradox, dass das 
hilft strom zu sparen^^

von bitte löschen (Gast)


Lesenswert?

Christian Peskov schrieb:
>> Alle Pullups enablen oder Alle nichbenutzten Eingänge auf Ausgang
>> setzen.
>
> Dann sind ja alle Ausgänge auch auf HIGH... irgendwie paradox, dass das
> hilft strom zu sparen^^

Nein, weil die Ausgänge frei liegen. Wo soll der Strom den hin fließen?
Anders ist es, wenn ein Eingang frei liegt, dann ist da eine 
Eingangsstufe, deren Halbbrücke aus MOSFETS nicht "weiß", was anliegt, 
so dass beide Transistoren ein wenig leiten, was irre Strom frisst.
Wenn da ein Pullup ist, liegt ein klares Potential vor und die 
Transistoren sind sich einig: Einer leitet, einer sperrt. -> Es fließt 
kein Strom.

von Andree S. (amshh)


Lesenswert?

Moin,
habe mehr oder weniger die gleiche Anordnung. ATTiny84, RFM12.
Wie programmierst du ? Ich programmiere mit dem Dragon. Das bedeutet 
auch, dass er vor dem flashen DebugWire einschaltet.
Und das führt auch zu erhöhtem Stromverbrauch. Wenn man also fertig ist 
mit debuggen usw., mit AVR-Studio DebugWire wieder abschalten.
(Meine Schaltung verbraucht dann wenige Mikro-Amp.)

siehe hier:
Beitrag "Zu hoher Stromverbrauch im Sleep-Mode (Gefunden)"

Gruß
Andree

von Christian P. (peterfrosta)


Lesenswert?

Philipp K. schrieb:
> Nein, weil die Ausgänge frei liegen. Wo soll der Strom den hin fließen?

Ich hatte mir vorstellen können, dass intern auch für den Augang 
irgendwelche "stufen" sind, welche dann intern einen stromfluss 
verursachen aber ok. Jetzt weiß ich wie es sich gehört.

habe gerade mal den Tip mit den Ports versucht umzusetzten und 
anschließend, hatte ich eine vielfach größeren Strom als zuvor fast 40 
mA. und das programm scheint aquch nciht mehr korrekt zu laufen...
Da muss ich doch was falsch gemacht haben!
habe in die main einfach folgendes hinzugefügt:

int main(int args, char * argv[] )
{

  //alle Pins Pullup high und als ausgang
  PORTB = 0xff;
  PORTC = 0xff;
  PORTD = 0xff;

  DDRB = 0xff;
  DDRC = 0xff;
  DDRD = 0xff;

//dann wie gehabt:

  init_usart();
  init_spi();
  init_port();
  init_rfm();

  client_statup();
....
...

von Christian P. (peterfrosta)


Lesenswert?

Andree S, schrieb:
> Moin,
> habe mehr oder weniger die gleiche Anordnung. ATTiny84, RFM12.
> Wie programmierst du ? Ich programmiere mit dem Dragon. Das bedeutet
> auch, dass er vor dem flashen DebugWire einschaltet.
> Und das führt auch zu erhöhtem Stromverbrauch. Wenn man also fertig ist
> mit debuggen usw., mit AVR-Studio DebugWire wieder abschalten.
> (Meine Schaltung verbraucht dann wenige Mikro-Amp.)
>
> siehe hier:
> Beitrag "Zu hoher Stromverbrauch im Sleep-Mode (Gefunden)"
>
> Gruß
> Andree

hi danke... also das mit dem Debugwire ausschaltenhab ich auch gefunden, 
aber im Studio ist der Menueintrag grau/nicht anwählbar :-/

wie bekommt ich das deaktiviert?

von Andree S. (amshh)


Lesenswert?

Im Studio (ich benutze 4.18) oben mit dem grünen Pfeil ("Start 
Debugging") Debug starten. Dann (und nur dann) ist im Menü "Debug" der 
Punkt "AVR Dragon Options" anklickbar. Und dort kannst du dann DW 
anschalten.
A.

von Christian P. (peterfrosta)


Angehängte Dateien:

Lesenswert?

hab das mal versucht auf studio 6 zu übertragen...
klappt leider nicht...
hab sowohl als debugger einmal den simulator als auch meinen AVRISP mkII 
ausgewählt...
und auch jeweil debugging gestartet.. das feld bleibt grau :-(
siehe anhang

mfg

von Andree S. (amshh)


Lesenswert?

Der AVRISP mkII ist, soweit ich weiß, ein reiner Programmer. Dann hast 
du DebugWire auch garnicht eingeschaltet .... ?
Muss da aber jetzt passen.
Mein Hinweis galt für den Einsatz des AVR Dragon und der Nutzung von 
DebugWire (d.h. der "Verbiegung" des Reset-Pins für das DW-Protokoll).
A.

von Thomas E. (thomase)


Lesenswert?

Uwe schrieb:
> Alle Pullups enablen oder Alle nichbenutzten Eingänge auf Ausgang
> setzen.
Nicht ganz.
In den Sleepmodes POWER_DOWN und POWER_SAVE werden die meisten Ports 
sowieso abgeschaltet.
Trotzdem wird im Datenblatt empfohlen, nichtbenutzte Eingänge mit dem 
Pullup auf high zu legen. Auf Ausgang zu setzen ist unnötig.

mfg.

von Thomas E. (thomase)


Lesenswert?

Christian Peskov schrieb:
> Diese Option finde ich aber nicht für den Atmega8
Einen Atmega8 kann man nicht debuggen. Da kannst du lange suchen.

Im Debugwire wird der Sleepmode gar nicht aktiviert. Aber für den 
Atmega8 gilt das sowieso nicht.

mfg.

von bitte löschen (Gast)


Lesenswert?

Christian Peskov schrieb:
> habe gerade mal den Tip mit den Ports versucht umzusetzten und
> anschließend, hatte ich eine vielfach größeren Strom als zuvor fast 40
> mA.
Das ist zu viel. Miss mal alle Pins aus Kurzschluss gegen GND.
Vielleicht machst Du auch ein Bild von Deinem Aufbau, damit man die 
Kurzschluss-Wahrscheinlichkeit abschätzen kann? ;-)

Thomas Eckmann hat Recht, dass unbenutzte Pins Eingänge bleiben können, 
wenn man den Pullup aktiviert, aber letztlich sollten sie als Ausgänge 
auch keinen Strom ziehen. Nur führt die Aussage "In den Sleepmodes 
POWER_DOWN und POWER_SAVE werden die meisten Ports sowieso abgeschaltet" 
ohne die Einschränkung "als Eingang" möglicherweise zu Verwirrung. Die 
Funktion als Ausgang bleibt erhalten.

> und das programm scheint aquch nciht mehr korrekt zu laufen...
> Da muss ich doch was falsch gemacht haben!
Könnte vielleicht auch an kurzgeschlossenen Pins liegen, s.o.

> habe in die main einfach folgendes hinzugefügt:
>
> int main(int args, char * argv[] )
> {
>
>   //alle Pins Pullup high und als ausgang
>   PORTB = 0xff;
>   PORTC = 0xff;
>   PORTD = 0xff;
>
>   DDRB = 0xff;
>   DDRC = 0xff;
>   DDRD = 0xff;
>

Ich würde schon selektiv nur die Pins entsprechend behandeln, die auch 
frei sind. PC7, PB6 und PB7 existieren z.B. gar nicht und PC6 würde ich 
in Ruhe lassen.
Und wie erwähnt, DDRX = .. kannst Du weglassen.

von Christian P. (peterfrosta)


Lesenswert?

danke allen.

danke philipp! hatte mir manches von deinem TEILWEISE gedacht.
aber du hast es sehr veständlich und überschaubar beschrieben! *thumbs 
up*

also das rfm dingen will ich da wirklich nciht ablöten, da warte ich 
vllt noch auf die nun bestellten platinen.
Die Kurzschlussmessung also den Widerstand zwischen den Leiterbahnen, 
werde ich aber vllt heute noch versuchen.

danke noch mal.. wenn ich infos habe, werde ich berichten.

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.