www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Stromverbraucher ATMega16 im Sleep Mode


Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin moin,

Ich habe mit einem Mega16 ein kleines Gerät zum Betrieb am KFZ-Netz 
gebastelt. Funktioniert soweit - nur mit dem Stromverbrauch im 
sleep-Mode habe ich noch meine Probleme...

Mit dem folgenden Code komme ich auf ca. 4mA Power-Down-Stromverbrauch 
(delay_ms ist eine selbstgeschriebene delay-Funktion, um über die 
Grenzen aus avr-libc zu kommen)

   wdt_enable(WDTO_2S);

   while(1)
     {
        delay_ms(1000);
        set_sleep_mode(SLEEP_MODE_PWR_DOWN);
        sleep_mode();
        // reset the watchdog timer
        wdt_reset();
     }

Diese 4mA braucht hauptsächlich der 7805*, das LCD hat auch noch ein 
paar uA Ruhestrom, also OK.

Wenn ich das jetzt in mein mehr oder weniger "fertiges" Programm 
einbaue, Wakeup über INT2, ADC, alle drei Timer... braucht die gleiche 
Schaltung ca. 12mA (ohne Sleep-Mode 30mA - also wird der definitiv 
aktiviert)

Nun suche ich die MCU-Teile, die diese 8mA verbrauchen - folgendes habe 
ich schon getan:

- BOD deaktiviert (muss ich aber wieder aktivieren, sonst geht mein 
EEPROM-Inhalt flöten)
- Watchdog ist deaktiviert (will/muss ja über INT2 aufwachen)
- Alle Ports auf Tri-State (DDRx = 0, PORTx = 0)
- ADC aus (mittels ADEN = 0 in ADCSRA)
- LCD abgesteckt (falls es sich nicht wieder 100% ausschalten lässt)

Hilft alles nicht nennenswert. Im Datenblatt habe ich keine genaueren 
Infos dazu gefunden, was im Power-Down-Mode alles noch Strom verbraucht 
- alles was Takt braucht sollte ja aus sein...

Würde einer von euch seine Erfahrung diesbezüglich mit mir teilen und 
mich davon befreien, jeden einzelnen Funktionsblock noch zu 
deaktivieren?

Mein Dank und ein virtuelles Bier wären ihm sicher :) MfG, Heiko

*den ich nebenbei bemerkt genau deswegen gerne ersetzen würde - hab nur 
noch nichts gefunden, was tatsächlich weniger Strom zieht UND ca. 150mA 
für LCD-Hintergrundbeleuchtung liefern kann, OHNE aufwändige Kühlung

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin moin,

ich kapier es mittlerweile nicht mehr - selbst wenn ich alle Hardware 
deaktiviere, inklusive Timer und allem, das "große" Programm zieht 12mA, 
obwohl keine Hardware im AVR genutzt wird.

Nächster Versuch: Vor Eintritt in die while(1)-Schleife in der 
main()-Routine schlafen gehen. Kann ich leider erst Montag testen, bin 
derzeit nicht an der Hardware.

Oder ich lebe damit - 12mA auf 50Ah sind ja durchaus noch tragbar.

MfG, Heiko

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin moin,

so, weiterprobiert. Wenn ich den Code von oben an verschiedenen Stellen 
ins Hauptprogramm eingefügt habe, ging der Stromverbrauch auf die 
normalen 4mA runter.

Also weiterprobiert. Mit folgendem Code im Hauptprogramm funktioniert es 
jetzt.

    else // still no power - really go to sleep
       while(PINB & (1<<PB2))
         {
            delay_ms(10);
            set_sleep_mode(SLEEP_MODE_PWR_DOWN);
            sleep_mode();
         }

Entscheidend dabei: Das Delay. Warum auch immer - aber unter 5ms Delay 
zieht der Prozessor im Sleep 12mA, bei mehr Delay 4mA.

Grund? Keine Ahnung. Vor dem oberen Code deaktiviere ich den Watchdog, 
schalte das LCD ab, deaktiviere die PullUps und schreibe Daten ins 
EEPROM.

MfG, Heiko

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab jetzt nicht nachgelesen, aber wüste Vermutung:
könnte es sein, das der ADC noch im Wandlerzyklus ist und dann nicht 
abgeschaltet wird?

Gruß aus Berlin
Michael

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglich ist es - ich hatte den ADC allerdings probehalber auch mal 
deaktiviert.

Kann natürlich sein, dass auch bei ADEN = 0 noch der Zyklus zu Ende 
läuft, bevor der ADC abgeschaltet wird...

MfG, Heiko

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.