Forum: Mikrocontroller und Digitale Elektronik ATmega48PA stromverbrauch zu hoch


von Johannes (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Zur zeit versuche ich einen ATmega48PA in den Power Down - Sleep Mode zu 
versetzen. Dies scheint mir auch zu gelingen. Jedoch ist der gemessene 
Stromverbrauch viel höher als im Datenblatt angegeben.


Zum testen hab ich ein einfaches Testprogramm geschrieben welches den 
Controller in den Power Down mode bringt.
1
/*
2
 * PicoPowerTest.c
3
 *
4
 * Created: 13.02.2012 09:58:20
5
 */ 
6
7
#ifndef F_CPU
8
#define F_CPU 128000UL
9
#endif
10
11
#include <avr/io.h>
12
#include <avr/sleep.h>
13
#include <avr/power.h>
14
#include <avr/wdt.h>
15
#include <avr/interrupt.h>
16
#include <util/delay.h>
17
18
19
/*! \brief This is the main routine
20
 *
21
 * 
22
 */
23
int main(void)
24
{
25
    wdt_disable();
26
27
    PRR = (1 << PRTWI) | (1 << PRTIM2 ) | (1 << PRTIM1 ) | \
28
          (1 << PRTIM0 ) | (1 << PRSPI ) | (1 << PRUSART0 ) | (1 << PRADC ) ; 
29
  
30
    /* set pin input and pull up */
31
    DDRB = 0x00;
32
    PORTB = 0xFF;
33
    DDRC = 0x00;
34
    PORTC = 0xFF;
35
    DDRD = 0x00;
36
    PORTD = 0xFF;
37
    
38
  /* Disable digital input */
39
    DIDR1 = (1 << AIN1D) | (1 << AIN0D);
40
    DIDR0 = (1 << ADC5D) | (1 << ADC4D) | (1 << ADC3D) | (1 << ADC2D) | (1 << ADC1D) | (1 << ADC0D);
41
   
42
    /* Disable analog comparator */
43
  ACSR = 0x80;  
44
45
    for(;;) 
46
  {
47
          set_sleep_mode(SLEEP_MODE_PWR_DOWN);
48
      cli();
49
            sleep_enable();
50
            sleep_bod_disable();
51
            sei();
52
            sleep_cpu();
53
            sleep_disable();
54
            cli();
55
            /* Wake up from Power-Save mode */     
56
    }
57
}

Der ATmega48PA braucht zwar deutlich weniger Strom aber leider trodem 
noch viel mehr als im Datenblatt angegeben.

Power Down (0.1-0.5uA @1,8V) -> laut Datenblatt
Power Down 49,2uA @1,8V -> gemessen

Active ~27uA -> laut Datenblatt
Active 71,5uA -> gemessen

Hardware:
nur Controller mit keramischen Stützkondensatoren, ohne jegliche 
Peripherie.

Freue mich über alle hinweise und fehler die mich dem angegebenen 
Stromverbrauch näher bringen.

schöne Grüße

von Elko4 (Gast)


Lesenswert?

Hallo,

An welchem Punkt hast du den Strom den gemessen? (Schaltplan?)

Falls du noch einen Spannungsregler in der Schaltung hast, könnte dessen 
Ruhestrom vielleicht der Grund sein!

von Thomas E. (thomase)


Lesenswert?

>PORTB = 0xFF;
>PORTC = 0xFF;
>PORTD = 0xFF;

Die Pullups bekommst du nicht umsonst. Da fliesst auch Strom. Und bei 24 
Pullups läppert sich da so einiges zusammen.

mfg.

von Falk B. (falk)


Lesenswert?

@  Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)

>Die Pullups bekommst du nicht umsonst. Da fliesst auch Strom. Und bei 24
>Pullups läppert sich da so einiges zusammen.

Käskopp. Die Pull-Ups ziehen die IOs hoch und fertig, dann fließt kein 
Strom mehr, wohin denn auch?

@OP

Gibt es da nicht eine AVR-Fuses, die den Watchdaog IMMER aktiv hält? 
Sollte man mal prüfen.

MfG
Falk

von Björn B. (elmo)


Lesenswert?

Vor einiger Zeit hatte ich einmal statt eines ATmega8L einen ATmega8A 
verbaut und meine Schaltung zog statt der vorherigen 1uA plötzlich, mit 
identischer Software, ca 50uA. Da ich den Fehler nicht fand, tauschte 
ich den mega8A wieder gegen den bei mir bewährten mega8L und alles war 
wieder in Ordnung.
Ich bin dem Grund für den erhöhten Verbrauch beim mega8A gegenüber dem 
mega8L nicht weiter auf den Grund gegangen. Womöglich hatte das auch 
nichts mit dem Problem von Johannes zu tun. Trotzdem wollte ich es mal 
loswerden ..

Gruß
Björn

von gäste (Gast)


Lesenswert?

Kurze Zwischenfrage:

Sind die "Systeme" bei PRR beim Neustart nicht standardmäßig 
deaktiviert?

Müsste man nicht nur den Analogkomperator noch abschalten?

von Peter D. (peda)


Lesenswert?

Watchdog und Brown-Out abschalten.

Klingt irgendwie blöd, denn gerade bei Batteriebetrieb will man ja ein 
zuverlässiges Arbeiten.
Und beim Einsetzen einer Batterie kommt es ja zu mehrmaligem Kontakt, 
d.h. die VCC kriegt ordentlich Spikes ab, die den MC schonmal 
durcheinander bringen können oder zumindest den EEPROM verfälschen.
Bei Batteriebetrieb bräuchte mal also einen stromsparenden externen 
Reset + Watchdog.


Peter

von Johannes (Gast)


Lesenswert?

Elko4 schrieb:
> An welchem Punkt hast du den Strom den gemessen? (Schaltplan?)
>
> Falls du noch einen Spannungsregler in der Schaltung hast, könnte dessen
> Ruhestrom vielleicht der Grund sein!

Den Strom hab ich direkt an den  Vcc Pins gemessen.

Ein Spannungsregler ist nicht eingebaut. Ich betreibe den Controller 
direkt an einem KEITHLEY SourceMeter

von Johannes (Gast)


Lesenswert?

Falk Brunner schrieb:
> Gibt es da nicht eine AVR-Fuses, die den Watchdaog IMMER aktiv hält?
> Sollte man mal prüfen.

Ja die gibt es. WDTON - dieses Fuse Bit war aber nicht gesetzt.

von Johannes (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Watchdog und Brown-Out abschalten.

Das habe ich beides gemacht. Sowohl in den Fuse Bits als auch in der 
Software.

Hab mal irgendwo gelesen das interne Spannungreferenz für den Brown Out 
detektor und die analogen Baugruppen einen erhöhten ruhestrom 
verursacht.

Kann man diese Spannungsreferenz irgendwie geziehlt per Software 
abschalten oder ist diese sowieso über das PRADC mitgesteuert.

von Purzel H. (hacky)


Lesenswert?

Als externen Brownout Detector kann ich die Microchip MCP111T-xxx 
empfehlen. die ziehen im Betrieb nur 1uA.

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.