Forum: Mikrocontroller und Digitale Elektronik PIC verbraucht im SLEEP Modus zu viel Strom


von hcalex (Gast)


Lesenswert?

Hallo,

ich verwende einen PIC 18F1320, der an einer 4V Quelle hängt. Bevor ich 
den PIC in den Sleep-Modus schicke, setzte ich alle PIN als Ausgang und 
ziehe diese auf Masse. Dennoch verbraucht der PIC ca 130µA im FULL SLEEP 
Modus. Um ganz sicher zu gehen, dass es nicht an anderen Komponenten, 
die am Port hängen liegt, habe ich diese von den Ports abgezogen. Nur 
noch der MCLR hängt auf high. Dennoch bleibt der Stromverbrauch gleich 
hoch nach einem sleep(SLEEP_FULL);.

ADC habe ich mit:
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
auch ausgeschaltet.

Jemand eine Ahnung woran es noch liegen könnte? Gibt es noch irgendwas 
was ich ausschalten muss? Laut Datenblatt soll der Stromverbrauch nur 
bei 0,1µA liegen.

von holger (Gast)


Lesenswert?

>Jemand eine Ahnung woran es noch liegen könnte?

Am Spannungsregler?

von hcalex (Gast)


Lesenswert?

Habe ich nicht, der PIC hängt direkt an einer Batterie.

von inse (Gast)


Lesenswert?

hmm - ich hab auch schon an ein paar PICs rumkonfiguriert um den 
Ruhestromverbrauch zu optimieren.
Die Ports hast Du ja schon richtig gesetzt und den ADC deaktiviert...
Ich glaube ohne BOR kann man auch noch ein paar uA einsparen, schau mal 
ob der power-up timer was bringt.
Das stellst Du mit dem Config-word ein.
Ist mit dem Sleep_Full der watchdog deaktiviert?

von hcalex (Gast)


Lesenswert?

Ja, das sollte alles aus sein. Meine Config sieht so aus:
1
#FUSES NOWDT                   //No Watch Dog Timer
2
#FUSES INTRC_IO                //Internal RC Osc, no CLKOUT
3
#FUSES NOPUT                   //No Power Up Timer
4
#FUSES PROTECT                 //Code protected from reading
5
#FUSES NOPUT                   //No Power Up Timer
6
#FUSES NOBROWNOUT              //No brownout reset
7
#FUSES MCLR                    //Master Clear pin enabled
8
#FUSES NOLVP                   //No low voltage prgming
9
#FUSES NOCPD                   //No EE protection

von inse (Gast)


Lesenswert?

OK...
hast Du schonmal das Datenblatt durchgeackert - da gibts oft so 
Aufschlüsselungen des Stromverbrauchs der "internen Peripherie".
Vielleicht gibts da ja noch was das Du nicht deaktiviert hast.

...sehe gerade im Datenblatt, daß im Sleep Mode alle Peripherie 
abgeschaltet wird.
Ich hab mal mit dem '1220 gearbeitet, allerdings nicht 
verbrauchsorientiert...

130uA hört sich nicht wirklich nach Sleep Mode an, bist Du sicher, daß 
der Befehl so funktioniert?
Du kannst Dir ja mal eine PWM erzeugen oder den Timer so konfigurieren, 
daß ein periodisches Signal ausgegeben wird - dann siehst Du ja ob er 
schlafen geht.
Der Strom kann auch wirklich nicht von der Außenbeschaltung verursacht 
werden?

Mehr fällt mir jetzt auch nicht ein - da ist wohl intensives 
Datenblattstudium oder Experimente fällig...

Viel Erfolg!

von Anja (Gast)


Lesenswert?

hcalex schrieb:
> Dennoch verbraucht der PIC ca 130µA im FULL SLEEP
> Modus.

Hmm, klingt nach pull-up Widerständen vom externen LCD-Modul. (4*33uA).

Gruß Anja

von inse (Gast)


Lesenswert?

Anja schrieb:
> hcalex schrieb:
>> Dennoch verbraucht der PIC ca 130µA im FULL SLEEP
>> Modus.
>
> Hmm, klingt nach pull-up Widerständen vom externen LCD-Modul. (4*33uA).
>
> Gruß Anja

...aber eigentlich hatte er vom Stromverbrauch des PICs geschrieben, 
nicht der ganzen Schaltung...wir werden's (hoffentlich) sehen...

von tigerbar (Gast)


Lesenswert?

interne pullups ausgeschaltet ???

130 µA sind verdammt viel, da läuft noch irgendwas: pri_run, rc_run oder 
so

von Anja (Gast)


Lesenswert?

inse schrieb:
> ...aber eigentlich hatte er vom Stromverbrauch des PICs geschrieben,
> nicht der ganzen Schaltung...wir werden's (hoffentlich) sehen...

Der PIC kanns wohl nicht sein. Bei mir braucht ein PIC18F2520 im Mittel 
ca 10uA und wird dabei alle 16 ms aufgeweckt um den LCD-Multiplex für 
eine passive Anzeige durchzuführen. Alle Sekunde wird dabei auch noch 
der ADC für 2 Meßwerte aktiviert.

Er hat ja auch nur geschrieben daß er die Daten-Leitungen zur Peripherie 
unterbrochen hat...

Gruß Anja

von Lehrmann M. (ubimbo)


Lesenswert?

- Schaltplan
- Source-Code
- Bild von der Schaltung

von hcalex (Gast)


Lesenswert?

Meine Schaltung sieht so aus, dass GND an Vss hängt und +4V and VDD. 
Alle anderen Pins sind nicht verbunden. Auch sonst gibt es keine 
weiteren Geräte mehr, die sonst noch dran hängen und Ströme verursachen 
würden. Habe das ganz auf Lochraster gelötet.


Mein momentan minimierter Code sieht so aus:
1
void setupPIC()
2
{
3
   setup_adc_ports(NO_ANALOGS);
4
   setup_adc(ADC_OFF);
5
   setup_wdt(WDT_OFF);
6
   setup_timer_0(T0_INTERNAL|T0_DIV_64|T0_8_BIT);
7
   setup_timer_1(T1_DISABLED);
8
   setup_timer_2(T2_DISABLED,0,1);
9
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
10
   setup_ccp1(CCP_OFF);
11
   ext_int_edge( 0, H_TO_L);
12
   clear_interrupt(INT_EXT);
13
   enable_interrupts(INT_EXT);
14
}
15
16
void goSleep()
17
{  
18
  //prepare for shutdown
19
  disable_interrupts(GLOBAL);
20
  SET_TRIS_B(0b00000000);
21
  SET_TRIS_A(0b00000000);  
22
23
  output_a(0);
24
  output_b(0);
25
  sleep(SLEEP_FULL);
26
}
27
28
29
void main()
30
{
31
32
  setupPIC();
33
  goSleep();
34
  while(TRUE);
35
}

Doch trotz der minimalen Schaltung und des minimalen Codes zeigt mein 
Multimeter exakt 135µA an :(

von holger (Gast)


Lesenswert?

>Doch trotz der minimalen Schaltung und des minimalen Codes zeigt mein
>Multimeter exakt 135µA an :(

Dann nimmst du jetzt deinen Code und entfernst eine Zeile
nach der anderen. Irgendwann wird der Stromverbrauch sinken
oder dein Multimeter spinnt.

von hcalex (Gast)


Lesenswert?

1
void main()
2
{
3
 sleep(SLEEP_FULL);
4
}

So... mehr geht wohl nicht. Mit diesem Code geht der Stromverbrauch 
kurzfristig auf 3mA und regelt sich nach ca. 3 Sekunden wieder auf 135µA 
ein.

von M. J. (manfred-64)


Lesenswert?

Mess doch mal den Strom mit einem Externen-Shunt,
damit kann's Du schon mal etwaige Fehler Deines Messgerätes abschätzen.

Gruß
Manfred

von hans (Gast)


Lesenswert?

Dein LVD-Modul wird noch aktiv sein ;)

hans

von Bianca (Gast)


Lesenswert?

Der 18F1320 braucht laut Datenblatt (Page 240) eine Mindestspannung von 
4.2 Volt, bei 4.1 Volt geht der teilweise schon in den brown-out.

Ich habe das mal mit einem 18F1220 nachgebaut, der zieht im SLEEP bei 
Vdd von 4.9 Volt 114 bis 118 nA (gemessen mit 
http://www.alternatezone.com/electronics/ucurrent/). Da stimmt was mit 
Deinem Equipment nicht.

von hcalex (Gast)


Lesenswert?

Also auf der ersten Seite im Datenblatt steht Wide Operating range: 2.0V 
to 5.5V. Mag ja sein, dass er unter 4.1V schon in brown out geht, aber 
das ist ja in der config ausgeschaltet.

von Bianca (Gast)


Lesenswert?

Die 2.0 bis 5.5 Volt gelten für den 18LF1320 (LF!), schau Dir Datenblatt 
Page 238 bis 240 an.

von tt2t (Gast)


Lesenswert?

Ist die Platine evtl. aus Hartpapier oder evtl. nicht ganz sauber ?

von Paulchen Panther (Gast)


Lesenswert?

...oder auf der Platine etwas mit Bleistift gezeichnet?

von hcalex (Gast)


Lesenswert?

Die Lösung war:

#FUSES NOFCMEN

zur Konfiguration hinzuzufügen.

von hcalex (Gast)


Lesenswert?

Dies deaktiviert den fail-safe clock monitor

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.