PIC verbraucht im SLEEP Modus zu viel Strom

Gast #2186709
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.
Gast #2186729
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?
Gast #2186738
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
Gast #2186775
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!
Gast #2186789
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...
Gast #2186797
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
Gast #2188050
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 :(
Gast #2188063
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.