UPDATE

well i founds some of the current leek during " sleep"
started out at 3ma
1. turning all the peripherals off - mainly the serial port which is connected to a usb module on the pcb , help reduce it by 0.9ma - brought it down to 2.1ma

2. making all ports inputs except where i need the 1 output to be high during the shut down reduced it by 0.3ma help in sleep mode - 1.8ma
3. only leaving on 1 pullups, i need during sleep also helped by 0.35ma -1.45ma


i am not convinced yet i have turned off the internal regulator, or got as low as i should be able to yet for ultra low power mode for sleep ,
i still believe i can get below 1ma

could someone review the config settings to see if i missed anything else
cheers

sheldon

Code:
' config for 18F46K80
 
    #CONFIG

;----- CONFIG1L Options --------------------------------------------------
    CONFIG XINST     = OFF 
    CONFIG SOSCSEL   = DIG        ; Digital (SCLKI) mode; I/O port functionality of RC0 and RC1 is enabled
    CONFIG INTOSCSEL = LOW        ; LF-INTOSC in low-power mode during Sleep
    CONFIG RETEN     = ON        ; Ultra Low power regulator is Enabled  (Controlled by SRETEN bit)when in sleep

;----- CONFIG1H Options --------------------------------------------------
    CONFIG IESO      = OFF 
    CONFIG FCMEN     = OFF
    CONFIG PLLCFG    = ON 
    CONFIG FOSC      = INTIO2     ; Internal RC oscillator  , PORTA.6 , PORTA.7 as I/O
 
;----- CONFIG2L Options --------------------------------------------------
    CONFIG BORPWR    = ZPBORMV    ; ZPBORMV instead of BORMV is selected
    CONFIG BORV      = 2          ; 2V
    CONFIG BOREN     = SBORDIS    ; Enabled in hardware, SBOREN disabled
    CONFIG PWRTEN    = OFF 

;----- CONFIG2H Options --------------------------------------------------
    CONFIG WDTPS     = 512        ; 1:512
    CONFIG WDTEN     = OFF        ; WDT Off
  
;----- CONFIG3L Options --------------------------------------------------
; no register in the device 

;----- CONFIG3H Options --------------------------------------------------
    CONFIG MCLRE     = ON              ; MCLR ENabled FOR DIAG , RG5 DISabled
    CONFIG MSSPMSK   = MSK7            ; 7 Bit address masking mode
    CONFIG CANMX     = PORTB           ; ECAN TX and RX pins are located on RB2 and RB3, respectively

;----- CONFIG4L Options --------------------------------------------------
    CONFIG BBSIZ     = BB1K            ; 1K word Boot Block size
    CONFIG STVREN    = ON 

;----- CONFIG5L Options --------------------------------------------------  
    
    CONFIG CP0       = ON        ;  MEMORY BLOCK 0 CODE PROTECT BIT - 7KW 800h  - 3FFFh ( when 1K BOOT OPTION used )
    CONFIG CP1       = ON        ;  MEMORY BLOCK 1 CODE PROTECT BIT - 8KW 4000h - 7FFFh
    CONFIG CP2       = ON        ;  MEMORY BLOCK 2 CODE PROTECT BIT - 8KW 8000h - BFFFh
    CONFIG CP3       = ON        ;  MEMORY BLOCK 3 CODE PROTECT BIT - 8KW C000h - FFFFh
   
   
;----- CONFIG5H Options --------------------------------------------------  
   CONFIG  CPD       = OFF        ; EEPROM DATA PREOTECT BIT - EXTERNAL R/W
   CONFIG  CPB       = ON        ; BOOT BLOCK CODE PROTECT BIT 

;----- CONFIG6L Options --------------------------------------------------  
    CONFIG WRT0      = OFF       ; MEMORY BLOCK WRITE PROTECT BIT 
    CONFIG WRT1      = OFF
    CONFIG WRT2      = OFF 
    CONFIG WRT3      = OFF
  
  
;----- CONFIG6H Options --------------------------------------------------  
    CONFIG WRTD      = OFF      ; EEPROM WRITE PROTECT BIT - INTERNAL AND EXTERNAL 
    CONFIG WRTB      = ON       ; BOOT BLOCK WRITE PROTECT 
    CONFIG WRTC      = ON       ; CONFIGURATION REGISTER WRITE PROTECT BIT 
 
;----- CONFIG7L Options --------------------------------------------------  
     CONFIG EBTR0     = OFF     ; MEMORY READ TABLE BLOCK PROTECT 
     CONFIG EBTR1     = OFF
     CONFIG EBTR2     = OFF
     CONFIG EBTR3     = OFF
    
;----- CONFIG7H Options --------------------------------------------------  
    CONFIG EBTRB     = OFF     ; TABLE READ PROTECT BOOT 
 
   #ENDCONFIG
   clear                    ' clear all varables to 0 on startup
Code:
   OSCCON   = %01100000     ' Select 32Mhz - using 8Mhz internal with PPLx4 in Config1H<3:0>  =  IDLEN =0 , 8Mhz , OSTS=0,RFIOFS=1,RC_Run (1x) OSC using PLL  
                            ' Bit 7 IDLEN =0 ( sleep mode when sleep instraction executed)
                            ' Bits 6-4 -  111 = 16Mhz , 110 = 8MHz ,101 = 4 MHz, 100 = 2MHz 011 = 1MHz
                            ' If INTTSRC=0 and MFIOSEL= 0 then 010 = HF-INTOSC/32 (500Khz), 001 = HF-INTOSC/64 (250Khz) ,000 = LF-INTOSC     (31.25Khz)
                            ' If INTTSRC=0 and MFIOSEL= 1 then 010 = MF-INTOSC    (500Khz), 001 = MF-INTOSC/2  (250Khz) ,000 = LF-INTOSC     (31.25Khz)
                            ' If INTTSRC=1 and MFIOSEL= 0 then 010 = HF-INTOSC/32 (500Khz), 001 = HF-INTOSC/64 (250Khz) ,000 = HF-INTOSC/512 (31.25Khz)
                            ' If INTTSRC=1 and MFIOSEL= 1 then 010 = MF-INTOSC    (500Khz), 001 = MF-INTOSC/2  (250Khz) ,000 = MF-INTOSC/16  (31.25Khz)
                            ' Note: INTSRC = OSCTUNE<7> and MFIOSEL = OSCCON2<0>
                            ' Bit 3 - OSTS = 0 - Osc startup time out  is ruinning from internal OSC ( HF, MF or LF-INTOSC) 
                            ' Bit 2 - HFIOFS =1 ( INTOSC Frq stable bit  -  1 = stable , 0 = not stable 
                            ' Bits 1-0 - 00= Dephalt Pri OSc ( OSC1/2 or HF-INTOSC with/without PLL set in FOSC,3:0> config1H <3.0>
                            '            01 = SOSC osc
                            '            1x = Internal osc ( LF, MF,HF-INTOSC)  
   
  ' OSCCON2 = $00            ' Bit 7 n/a , Bit 6 - SOSCRUN - Run status bit , Bit 5-4 n/a, 
                            ' Bit 3 = SOASCGO - Osc Start control bit 1 = OSC running , 0 = OSC shut off if no requests for it 
                            ' Bit 2 n/a , Bit 1 - MFIOFS 1= MFINTOSC stable  0 = Not stable 
                            ' Bit 0 MFIOSEL - 1 = MF-INTOSC replaces HF-ISTOSC Freq for 500Khz,250Khz,31.25KHz) 0 = MF-INTOSC not used 
  
   OSCTUNE = %01000000      ' Bit 7  - INTSRC - internal LF Source Select 1 = 31.25 from 16Mhz Internal /512 HF-INTOSC ) 0 = Internal 31khz OSC 
                            ' Bit 6 - PLLEN - 1 PLL enabled  , 0 = PLL disabled 
                            ' Bits 5-0 Frequancy callibaration 00000 = centre Frq
                            
   WDTCON = %00010000       ' use ultra low power mode when in sleep - disable  regulator in sleep mode  
                            ' Bit7 = REGSLP- Regulator Voltage Sleep Enable - 1= Reg goes into low-power Mode when in sleep mode ,0 = Reg stay in normal mode 
                            ' Bit6= n/a , Bit5 = ULPLVL - Ultra lowpower Wakeup output sel 1= Vout on RA0 0= Vout on RA1 ( no effect if WDTEN in config is set  )
                            ' Bit4= SRETEN = Regulator Volt Sleep Disable bit - 1= goes into Ultra lOwpower mode in sleep ( CONFIG1L.0 =0 MUST BE SET) 
                            ' Bit3=n/a , Bit2 = ULPEN - Ultra Low Power Wakup Module enable 1 = enabled , 0 = disabled 
                            ' Bit1=ULPSINK- Ultra Low-power Wakeup Current Sink Enable  1= Sink enabled 0 = Sink disabled ( Not valid if ULPEN=0 ) 
                            ' Bit0= SWDTEN -Watchdog Timer Enable  = 1= enable watchdog 0 = Disable Watchdog ( no effect if WDTEN in config is set  ) 
  
    
    PSPCON.4 = 0             ' turn off parallel slave port mode - general purpose I/O mode PORTD & PORTE
  
     
    
    INTCON2.6 = 0          ' INTEDG0 - External Interrupt 0 Edge Select - 1= Rising Edge , 0 = Falling Edge  
    INTCON2.5 = 0          ' INTEDG1 - External Interrupt 1 Edge Select - 1= Rising Edge , 0 = Falling Edge 
    INTCON2.4 = 0          ' INTEDG2 - External Interrupt 2 Edge Select - 1= Rising Edge , 0 = Falling Edge 
    INTCON2.3 = 0          ' INTEDG3 - External Interrupt 3 Edge Select - 1= Rising Edge , 0 = Falling Edge 
    
    INTCON3.6 = 0          ' INT1IP  - INT1 External Interupt Priority - 1 = High Priorty , 0 = Low Priority   
    INTCON3.7 = 0          ' INT2IP  - INT2 External Interupt Priority - 1 = High Priorty , 0 = Low Priority   
    INTCON2.1 = 0          ' INT3IP  - INT3 External Interupt Priority - 1 = High Priorty , 0 = Low Priority
Code:
' =========== Power Shutdown routine ==================
Shut_Down:

 pwr_on = 1                              ' PWR ON = 1 = OFF  - turns off power to devices external to cpu 
@ INT_DISABLE  RBC_INT                   ; TURN OFF PortB IOC Interrupts for RX_mode  - RF_IRQ pin  
@ INT_DISABLE  RX2_INT                   ; Turn Off  USART RX Interrupts for RX_mode  - RX input on USART 
@ INT_DISABLE  TMR0_INT                  ; disable  Timer0 interupts 

 TRISA = $FF                             ' reduce power usage by puting port to inputs 
 TRISC = $FF
 TRISD = $F7                             ' make all ports inputs except portd.3 for PWR_ON output
 TRISE = $FF
 
 WPUB  = $01                             ' Port B set to inputs already , turn off all week pullups except Pwr_sw input  

 PMD0 = $FF                              ' TURN OFF ALL PERIPHERALS ON CPU 
 PMD1 = $FF
 PMD2 = $FF
 
 PWR_shutdown = 0                        ' CLEAR shutdown flag 
 INTCON.1 = 0                            ' CLEAR INT0 interupt flag prior to enable  
@ INT_ENABLE INT0_INT                    ; Enable INT0 interupt to allow wakeup from Sleep command  - Triggered by PWR_SW , active Low  
OSCCON.7 =0                              ' clear  IDLEN bit ready for sleep command 
@ sleep                                  ; sleep command 
@ NOP

 return

' ----------------------------------------------------------

 Sleep_Over:
 ' Interupt routine to recover from the sleep command   

@ reset                                     ; just reset device  
@ INT_RETURN
return