Sleep/wake up PIC

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Sleep/wake up PIC

Inlägg av v-g »

Jag forskade ju i detta i samband med att jag byggde min sensor bla tänkte jag tjyva lite ström med en spole eller nåt runt kabeln in till kåken. I slutändan blev en enkel 2ledare min lösning och i ändan sitter bara en fototrissa och en vanlig trissa som känner av pulsen. PICen sitter inne i värmen och drar full stret hela dagen lång :mrgreen:

De 20mA eller nåt den drar anser jag mig ha råd med årskostnaden torde bli under kronan i vilket fall som helst :vissla:

Varför jag inte vill ha batterier och skit är ju för att de såklart tar slut när det är svinkallt och är som träligast att byta, mitt skåp sitter en 20 meter från kåken och jag skottar normalt inte dit. Batterier kostar ju också en ren förmögenhet iom att kapaciteten i kyla säkert måste tiodubblas i mitt fall. Dessutom är det enklare att avlusa program när µc:n sitter inne ;)


Ska man ha en extern räknare till PIC:en (för att klocka in signaler) gäller det att den är snålare än tex interna klockan och återigen då gäller det att ha järnkoll på databladen så man inte går över ån efter mindre vatten.


Det står iaf i databladet för interupt on change att This interrupt can wake the device from SLEEP. Dvs det är bara till att testa och dra fram multimetern för att verifiera.

Får du inte ner sändaren så stäng av den helt och slå bara på vid sändning mha en trissa eller nåt. Se till att ingen pullup/down ligger i hela tiden och måste de de det så högt motstånd som möjligt, men för knappar exvis skulle jag köra på de interna och bara aktivera precis när jag förväntar mig knapptryck osv.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46965
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Sleep/wake up PIC

Inlägg av TomasL »

Varför skall man ha en extra räknare, det finns ju inbyggda sådana
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sleep/wake up PIC

Inlägg av sodjan »

Vem har sagt att man *ska* ha det ???
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46965
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Sleep/wake up PIC

Inlägg av TomasL »

V_G skrev
Ska man ha en extern räknare till PIC:en (för att klocka in signaler)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sleep/wake up PIC

Inlägg av sodjan »

Men det var inget påstående, utan mer (om man läser hela meningen) ett
sätt att säga att det sannolikt inte alls är en bra idé. Du triggar och går
igång på ganska underliga saker... :-)
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: Sleep/wake up PIC

Inlägg av v-g »

Kollade förresten i databladet för en annan PIC och bläddrade förbi en sida där strömförbrukningen står för olika frekvenser, har TS koll på att detta finns? Det är ju iaf en bra guide till hur mycket det _borde_ dra om inte annat.
magnuscj
Inlägg: 11
Blev medlem: 14 december 2010, 17:08:48

Re: Sleep/wake up PIC

Inlägg av magnuscj »

Jag har nu ett fungerande program som svar på den frågan jag inledde denna tråd med. Jag kommer inte att posta hela programmet utan valda delar. Programmet är en prototyp och hur väl resultatet fungerar med avseende på ström hann bara utvärderas som hastigast innan multimetern lade av... klant... Jag hade tänkt presentera strömmen för varje del samt vad de olika åtgärderna sparade. Jag undrar om sleep verkligen gör så mycket när jag dragit ned klockan till minimum.

Programmet i korthet:
- Initiera WDT med rätt konfiguration
- Stäng av Xbee via dess sleep-funktion
- "dra ned" klockans hastighet
- öka klockan vid "samtal" med Xbee

Kod: Markera allt

void main() {
  TRISA    = 0b00000000;    //
  TRISC    = 0;             // PORTC is output
  ANSEL    = 0;             // Configure AN pins as digital I/O
  ANSELH   = 0;             //
  C1ON_bit = 0;             // Disable comparators
  C2ON_bit = 0;             //
  UART1_Init(9600);         // Initialize UART module at 9600 bps
  Delay_ms(200);            // Wait for UART module to stabilize
  
  OPTION_REG   = 0b11111011;// OPTION REGISTER with some WDT Settings
  WDTCON       = 0b00010001;// WDT Settings
  OSCCON_FAST  = OSCCON;    // UART friendly mode
  OSCCON_SLOW  = 0b00000011;// Low power mode
  PORTC        = 0b00000000;// Diodes OFF
  PORTA        = 0b00000001;// Xbee OFF

  pulseCnt  = 0;
  sendThreshold = 0;
  sendData("Init finished");

  do
  {
     if(sendThreshold > 20)
     {
       sendData("pulses");
       sendThreshold = 0;
       sleep(); //One pulse received. Sleep is a good idea.
      }
      sendThreshold++;

   }while (1);

void sendData(char s2[]  )
{
   OSCCON =   OSCCON_FAST;
   PORTA = 0b00000000;    //Xbee ON
   Delay_ms(15);          //Take it easy, let Xbee start
   UART1_Write_Text(s2);
   Delay_ms(15);          //Take it easy before turning off Xbee
   PORTA = 0b00000001;    //Xbee OFF
   OSCCON = OSCCON_SLOW ;
}

sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sleep/wake up PIC

Inlägg av sodjan »

> Initiera WDT med rätt konfiguration

Behöver du WDT alls nu ? Du har väl skippat att väcka
proceesorn ur sleep via WDT ? Om inte, stäng bara av
WDT i CONFIG.

> OSCCON_FAST = OSCCON; // UART friendly mode
> OSCCON_SLOW = 0b00000011;// Low power mode

Borde inte både "fast" och "slow" vara två olika värden ?
Nu ser det ut som att "fast" bara är adressen till OSCCON.
Varför vill du sätta värdet på OSCCON till *adressen* till OSCCON ??
magnuscj
Inlägg: 11
Blev medlem: 14 december 2010, 17:08:48

Re: Sleep/wake up PIC

Inlägg av magnuscj »

Det ser ut som om OSCCON inte är en pekare. Vanlig variabel-kopiering alltså.
ToPNoTCH
Inlägg: 5147
Blev medlem: 21 december 2009, 17:59:48

Re: Sleep/wake up PIC

Inlägg av ToPNoTCH »

Nu är ju jag lite rudis på C, men hur funkar "delay_ms(X)"

Är det ett kommando eller en egen rutin ?

Om det är ett kommando, tar det då hänsyn till dina växlingar av klockan ?

Om det är din egna rutin tar den då hänsyn till att den övre "delay_ms(200)" går i snabbare klocka än de ndere "delay_ms(15)" ?

Tror du angriper problemet mycket mer rätt nu ...Bra jobbat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sleep/wake up PIC

Inlägg av sodjan »

> Det ser ut som om OSCCON inte är en pekare.

Och vad har "pakere" med någonting alls att göra ?
OSCCON är en symbol som normalt innehåller adressen till registret OSCCON.
(Eller i alla fall så innehåller den *någonting* som får kompilatorn att förstå
att det är registret OSCCON man menar när man använder symbolen).

Längre ner i koden står det:

OSCCON = OSCCON_FAST;
...
OSCCON = OSCCON_SLOW;

Den senare är ju tydlig att den sätter OSCCON till 0b00000011.
Men vad gör den första tilldelningen ?

Include filen för proceesorn har

Kod: Markera allt

volatile       unsigned char	OSCCON		@ 0x08F;
vilket ser ut som adressen till OSCCON.
Med den definitionen av OSCCON, vad gör "OSCCON_FAST = OSCCON;" ?
magnuscj
Inlägg: 11
Blev medlem: 14 december 2010, 17:08:48

Re: Sleep/wake up PIC

Inlägg av magnuscj »

Då skall vi se. Det är naturligtvis så att Oscilatorkontrollen sköts med
registret OSCCON. Det hade jag tidigare räknat ut. Dessvärre så försökte
jag sätta dem på fel sätt. Jag sätter dem i mikroC-miljön nu på följande vis:

OSCCON.B6 = 0;//IRCF<2:0>:Internal Oscillator Frequency Select bits
OSCCON.B5 = 0;//
OSCCON.B4 = 0;// 111 = 8 MHz (8,4,2,1, 0.500, 0.250, 0.125, 0.031)
OSCCON.B0 = 1;//SCS: System Clock Select bit

Jag provar med en delay-rutin som konstrueras vid programmeringen/kompileringen

Delay_ms(1000); skall ta en sekund vid 8MHz, två vid 4Mhz och så vidare.
Se nedan för några prov.Jag mätte även strömmen vid några tillfällen.

8Mhz (7mA)
13:56:45 Start
13:56:46 Stop

4Mhz
14:01:43 start
14:01:45 Stop

2Mhz (6mA)
14:02:25 start
14:02:29 Stop

31kHz (5,25mA) //OSCCON.B6 = 0
14:04:51 start //OSCCON.B5 = 0
14:09:39 Stop //OSCCON.B4 = 0


Sleep tar ca 5,23mA. Sleep ser ut att vara bortkastat.

Jag har mätt strömmen på en PIC som matas av en USB (+5V). Inga dioder var aktiverade
på kortet (ett kort som följer med PICKit 2). Inga andra kopplinga som stör.

Jag är nog förvånad över att det inte var större skillnad när jag gick ned i frekvens.

Xbee:
45mA (som skickar data hela tiden)
3mA (Vid sleep)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Sleep/wake up PIC

Inlägg av sodjan »

Och hur var det med "OSCCON_FAST = OSCCON;" ?

> Jag är nog förvånad över att det inte var större skillnad när jag gick ned i frekvens.

Det finns diagram i databladet som visar typiska värden.
Om du ligger långt från dom värderna så är det inte PIC'en som
förbrukar strömmen utan något annat som kanske är anslutet.

> (ett kort som följer med PICKit 2)

Det finns den del annat på det kortet som kan dra ström.
Hur är JP5 satt t.ex ? Och hur/var mäter du strömmen ?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Sleep/wake up PIC

Inlägg av Icecap »

"Stäng av Xbee via dess sleep-funktion"
Vad säger databladet att den då förbrukar?
Och hur lång tid tar det för den (worst case) att däcka?

PIC'en i sig drar "försumbart" med ström nästan oavsett vilken hastighet den kör med men jagar man marginaler är det rätt väg att gå att låta den ändra hastighet efter behov.

Jag saknar dock lite data för hur mycket XBee drar i sovläget, hur mycket fotosensorkretsloppet drar osv.

Att sänka PIC'ens förbrukning är att skjuta gråsparv med kanoner, det finns helt säkert helt andra strömtjuvar i detta...
magnuscj
Inlägg: 11
Blev medlem: 14 december 2010, 17:08:48

Re: Sleep/wake up PIC

Inlägg av magnuscj »

> - Och hur var det med "OSCCON_FAST = OSCCON;" ?

Jag tog det för givet att det faktisk var fel, med de avsikter jag hade, att göra som ovan. Jag gav upp saken och provade metoden jag visade här innan.

När jag nu kör debuggern för att kolla adresserna och de värden variablerna får så ser jag att det ser ut att fungera så som jag först avsåg.

Name Value Address
OSCCON_FAST 0b0111 0001 0x005C
OSCCON_SLOW 0b0101 0001 0x005F
OSCCON 0b0111 0001 0x008F

Jag provade i verkligheten och ja, det verkar fungera.

> -Hur är JP5 satt t.ex ? Och hur/var mäter du strömmen ?
När jag skruvade på potentiometern så sjönk strömmen...till ca 1,3 mA. Inte rätt miljö att jaga mA i kanske om man inte har full koll.

Jag mäter vid ingången på p2 som matas från en USB-krets.

> -Får du inte ner sändaren så stäng av den helt och slå bara på vid sändning mha en trissa eller nåt.
Ja, nu skall jag bara försöka räkna ut hur en sådan koppling kan se ut. Tips?

För pulsmätningen kör jag en TSL250R som ännu inte är inkopplad.

PS
Era kommentarer uppskattas!
DS


Jag inser vidare att det är dags att sluta jaga sparvar med kanon. Nu ger jag mig på Xbee:n
Skriv svar