PIC24 F04KA200 Deep sleep

Zdravím všechny,

chtěl bych se zeptat, zda má někdo zkušenosti s programováním procesorů PIC24 FXX a funkce deep sleep? Potřeboval bych aby procesor usnul na 2,1s a pak se vzbudil. Bohužel když usne tak se již nevzbudí a jediné co “pomůže” je reset. DSWDT je povolen a nastavena na 2,1s. Procesor se nevzbudí ani připojením log. 0 nebo log. 1 na vstup INT0. Konfigurační nastavení je v příloze. Díky za rady.

const char LED = 8; // port B

void main() {

  TRISB.LED = 0; // LED Výstup
  ADPCFG = 0xFFFF; //--- PORTB - all digital
  
  LATB.LED = 1;
  delay_ms(1000); // here is power consumption 5.7mA
  LATB.LED = 0;
  delay_ms(1000); // here is power consumption 2.1mA

    DSCONbits.DSEN = 1;
    asm NOP;
    asm NOP;
    asm NOP;
    asm PWRSAV #0; // here is power consumption 4.5 microA

  LATB.LED = 1; // LED is off, power consumption is 4.5 microA
  delay_ms(1500);
  LATB.LED = 0;
  while(1);

}//~!

Fuses configuration.jpg

Nevím, jak je to u PICů (nedělám s nima), ale AVRka, pokud jdou do PowerDown režimu (což bych odhadoval bude totéž, co Deep Sleep), jdou probudit prakticky pouze externím přerušením nebo WatchDog přerušením. To však musí být povoleno. Pokud není, nelze procesor probudit. V kódu nikde nevidím povolení přerušení pro vstup INT0.

Probuzení ze vstupu INT0 bylo pouze na zkoušku, na to jsem měl program trochu upravený. Primárně by se to mělo vzbudit z Deep sleep Watchdogu, který je nastaven na 2.1s (viz pojistky). Jediné co nějak reagovalo bylo, když jsem vynechal ty NOP instrukce, tak se procesor vzbudil po těch 2.1sec, pak byl v normálním módu a asi po 1-2s zase usnul. Takhle to pak bylo v nekonečné smyčce. Ale dioda se už nikdy nerozsvítila.