Sida 1 av 2
Göra PIC strömsnål..
Postat: 15 februari 2008, 18:16:58
av squiz3r
Hej. Jag håller på med ett projekt där min PIC ska gå på ett batteri under en lång period. Då är det som ni förstår väldigt viktigt att den tar så lite ström som möjligt, så jag undrar vad jag ska göra för att minska strömförbrukningen. Det är en PIC16F877A, och nu tar den ca. 6mA på 5v, vilket är i mesta lagret..
Jag använder timer1, ADC, EEPROM (och interuppts) samt USART, och kör med en 19,17MHz kristall. Vad finns det mer för saker som tar mycket ström som jag bör stänga av? Jag använder nu en rs232-link (tror jag de heter) från sodjan, och den drog en massa ström (ca. 7mA), så där tänkte jag ta dens matningsspänning från en IO pinne på PIC'en så jag kan stänga av den när jag inte använder den.
Sleep-läge verkar vara smidigt, och det hade fungerat bra här eftersom jag bara ska göra något en ggr per timme. Resten av tiden ligger jag i en tom oändlig loop. Problemet är bara att jag använder timer1 som timer (dvs. kör den från den externa klockan) och det fungerar ju inte om jag lägger den i sleep..
Jag har läst på vissa ställen att de analoga ingångarna ska dras till GND eller VDD när man inte använder dem för att dra mindre ström, så menar de då bara att de inte ska "hänga i luften" eller måste de dras ända ner till GND eller till 5v, de kan inte vara på tex. 2v?
Mvh
Postat: 15 februari 2008, 18:38:09
av thepirateboy
Största skillnaden blir att sänka klockfrekvensen och minska matningsspänningen samt framförallt att försätta den i sleepläge, så är det iaf på AVR och bör vara lika på PIC. Att inte ha flytande ingångar kan göra några uA men börja att kolla om det inte går att få till något sleepläge.
Postat: 15 februari 2008, 18:43:04
av sodjan
Finns app notes om just detta.
Sleep är naturligtsvis rätt väg om man undet vissa tider
inte har behov av processorn. Annars är låg fart och spänning
två andra vägar. Jag har hört mycket gott om 16F88 i strömsnåla
applikationer, men det har kommit många modellerna sedan dess.
En nanowatt modell är självklar.
Re: Göra PIC strömsnål..
Postat: 15 februari 2008, 19:56:03
av bos
squiz3r skrev:Problemet är bara att jag använder timer1 som timer (dvs. kör den från den externa klockan) och det fungerar ju inte om jag lägger den i sleep..
Måste du ha klockan snurrandes under sömnperioden? Jag tänkte mest på att du skrev att du bara ska göra en sak en gång per timme.
Menar du att du använder timer1 för att kolla när en timme gått? Isåfall kanske du kan använda timer0 med en hög prescale och en variabel som du ökar med ett varje gång timer0 ger overflow, och låta det overflow:a lämpligt antal gånger så att det blir en timma.
(10 sek senare)
Fast det kan du inte alls, ser jag nu i databladet, för timer0 stängs av under sleep. Isåfall blir största vinsten att sänka klockhastigheten, som pirateboy skriver. Hög frekvens äter rätt mycket ström.
Postat: 16 februari 2008, 15:13:04
av squiz3r
Okej, Hur stor nytta tror ni det skulle göra om jag sänker klockan till 4Mhz istället för de 19,17Mhz som jag har nu?
Ska leta upp de "app notes" som handlar om det.
Jag funderar på att byta till en 887 istället (den har nanowatt), men det blir rätt mycket arbete, så frågan är om det är värt det.. Hur mycket ström skulle man kunna spara då?
Mvh
Postat: 16 februari 2008, 15:44:54
av sodjan
Du kan grovt räkna med en strömbesparing på 4/19.
Strömförbrukningen är *nästan* linjär mot hastigheten.
> Jag funderar på att byta till en 887 istället
Jämför med en 877A så är det ett riktigt lyft.
> Hur mycket ström skulle man kunna spara då?
Exakt så mycket som databladen säger.
Men den stor skillnaden är att du kan "växla" ner till 32 KHz
under perioder då du inte behöver kraften, sedan direkt upp
till 8 Mhz (i 8 steg) då du behöver det.
> Ska leta upp de "app notes" som handlar om det.
Ett exempel :
http://ww1.microchip.com/downloads/en/D ... er%202.pdf
Postat: 16 februari 2008, 17:40:46
av Tottish
Bara en fråga av nyfikenhet:
Vad är det du bygger? Hemligt?
Eftersom det inte skrivs något om någon RF-modul så utgår jag från att RS232n är trådbunden. Om det nu är så så kan du väl lika gärna dra 5V till enheten? Om man vill bli avancerad så kanske det finns någon parasit-lösning som kan ladda en liten konding (från RS232-anslutningen) under större delen av timmen som sedan används som strömkälla till PICen under den "aktiva fasen"?
Lite tankar bara...
MVH
/Tottish
Postat: 16 februari 2008, 18:31:19
av squiz3r
"Vad är det du bygger?"
Jag håller på att bygga en liten portabel temperaturlogger

.
"kanske det finns någon parasit-lösning som kan ladda en liten konding (från RS232-anslutningen)"
Tyvär går inte det, eftersom den inte kommer vara inkopplad till RS232 under den tiden, man ska bara koppla in den dit sen när man ska lägga in det på datorn.
Tack Sodjan för app note'en, det var intresant läsning!
---
Efter lite läsning har jag kommit fram till att jag skulle kunna ta en PIC16F887 istället. Sen kör jag den på den interna OSC'en och har en extern klockkristall (32,768Khz) inkopplad till TIMER1. Då kan den väll ticka på undertiden som processorn ligger i sleep?
Om jag sen kör prescale 1:2 så kommer jag få ett interuppt var 4'de sekund som väcker PIC'en ur sleep. Vilket betyder att efter 15 interuppt har det gått en timme. Mellan interuppten kommer den då ligga i sleep, och sensorer m.m. kommer jag driva från IO pinnar så att jag kan ha de avstängda resten av timmen.
Nu ska jag bara försöka hitta den tråden om hur man gör för att Wisp628A ska klara av att programmera en 887.
Mvh
Edit: Hmm.. Jag förstår inte riktigt hur det fungerar med BAUD inställningarna på 887, ska man inte ställa in den manuelt?
Edit2: Dum fråga, såg nu att jag på nått sätt hade missat det kappitlet om BAUD RATE generatorn..

Postat: 17 februari 2008, 00:43:44
av sodjan
Du är i princip på rätt väg. Och de modernare processorerna har mer
finesser kring just sleep och andra low-power funktioner.
> Nu ska jag bara försöka hitta den tråden om hur man gör för att Wisp628A ska klara av att programmera en 887.
Har du bara en rimligt aktuell firmware så är det inget problem.
Har du någon extra 648A så du kan uppgradera (om det behövs) ?
Postat: 17 februari 2008, 09:27:50
av Icecap
Jag hade en gång ett projekt som skulle vara mycket strömsnålt och det skulle ändå vara möjlighet att koppla in en RS232 och kommunicera utan att vänta i evigheter.
Jag löste det vid att ta en optokopplare som satt så att när jag tryckte i RS232'an fick den TXD in på LED'n. Då min strömbesparing då var att stänga ner processorn helt (var ej PIC alltså) använde jag opkopplarens "utgång" till att dels slå på processorn och dels att dra ett signal på en portpinne om att det var extern kommunikation.
Fungerade alldeles strålande, det var väldigt strömsnålt + kommunikationen var igång direkt.
En MAX232 drar en del ström ju och om du använder en portpinne på PORTB med "interrupt-on-change"-möjlighet dit du kopplar optokopplaren kan den ju väcka processorn och slå på MAX232'n.
Postat: 17 februari 2008, 11:23:07
av Niklas-k
En ide jag har till mitt projekt men inte provat ännu är att ha en extern RTC(PCF8593) med alarmutgång som väcker upp processorn när man vill så att säga. Dessa drar ju exremt lite ström.
>var 4'de sekund som väcker PIC'en ur sleep. Vilket betyder att efter 15 interuppt har det gått en timme.
Nej, 1 minut

Postat: 17 februari 2008, 17:46:37
av squiz3r
"Nej, 1 minut

"
Oops, jag känner att mina mattekunskaper inte alltid är på topp

.
Icecap: Låter som en smart lösning, men här ska det nog inte vara nödvändigt. Jag tänkte koppla en tryckknapp på en PORTB pinne med interuppt, och sedan låta den väcka PIC'en. Sen ska PIC'en byta till 1Mhz (eller 8Mhz) intOSC istället för 31Khz klockan. På det viset är det bara att sätta i RS232 sladden och trycka på "Skicka till dator" knappen så skickar den iväg det

.
En sak jag inte har förstått är om det är strömsnålare att köra på den interna 8Mhz OSC'en och växla ner det till 1Mhz än att köra den på full hastighet? oscilatorn ska ju ändå klocka i 8Mhz..
"Har du bara en rimligt aktuell firmware så är det inget problem."
Jasså, så det är mjukvaran i PIC'en som är problemet? Jag trode det va mjukvaran på datorn som behövde uppdatteras..

Ska ta en titt på om jag har stöd för den då.
Finns det något strömsnålare sätt för en PIC att signalera att den är på m.m. än LED's? Jag tänkte att om man tar en effektiv LED bör det räcka med 5mA, och sen behöver den bara blinka till en kort stund (ca. 100mS) lite då och då, typ varranann sekund eller så.
Mvh
Postat: 17 februari 2008, 20:31:46
av squiz3r
Min firmware är 1.6.01. Vilken behöver man ha för att kunna programmera dem?
Men om jag i kommandotolken öppnar xwisp så att listan med stödda PIC'ar kommer upp så finns inte 16F88X med i den, ska det gå ändå, eller är det för gammal version?
Mvh
Postat: 17 februari 2008, 22:25:31
av sodjan
Varför *inte* uppgradera ??
Postat: 17 februari 2008, 23:31:45
av dangraf
Vad använder du för spänningsregulator? (om du ens avnäder en) Den kan äta en hel del ström om du väljer fel. Jag har kört applikation med en 16F88, 32khz osc till timer1 och interna oscillatorn. När den låg i sleep så drog den ca 4-6uA vilket inte är så värst mycket. Självurladdningen ur en del dåliga batterier ligger i det området. litium batterier brukar hålla bättre. Det som kan dra lite extra ström är om man t.ex glömmer stänga av brownout, watchdog-timern, eller gör felinställningar för oscillatorn (Om man kör intern oscillator enligt configbitarna och sätter SCS i osccon till 10 istället för 00 så drar den mer ström på det chippet jag använde mig av).
Du kan även göra så att du använder dig av en FET transistor för att stänga av strömförsörjningen till alla perferikretsar och ev pullups som används när den ligger i sleep.
Lycka till!