Can I ask what the contraints are over the choice of device?
e.g., cost, compatibility etc.
The (L)F1703 doesn't seem to support a crystal oscillator at all. You're limited to the internal oscillators or externally generated oscillators.
Running crystal oscillators are often significantly more efficient uA/MHz than the internal oscillators.
If you're running at 3.3v, you could use a LF part for example, although that on its own may not help much, but see the figures below I've just taken for (L)F1705 which is in the same family as the 1703, same package etc, but with crstal oscillators a a few more features. It is completely backwards compatible with your F1703 as far as I can see. The same would go for the slightly cheaper F1704.
191uA on the F part at 3.3V, VREGPM=1, 1MHz XT (XTAL)
195uA on the F part at 3.3V, VREGPM=1, 500kHz MFINTOSC
195uA on the F part at 3.3V, VREGPM=0, 500kHz MFINTOSC
21uA on the F part at 3.3V, VREGPM=1, 32kHz LP (XTAL)
19uA on the F part at 3.3V, VREGPM=1, 31kHz LFINTOSC
18uA on the F part at 3.3V, VREGPM=1, 32kHz ECL
52uA on the F part at 3.3V, VREGPM=1, 500kHz ECL
13uA on the F part at 3.3V, VREGPM=0, 500kHz MFINTOSC (SLEEP)
180nA on the F part at 3.3V, VREGPM=1, 500kHz MFINTOSC (SLEEP)
180nA on the F part at 3.3V, VREGPM=1, 32kHz ECL (SLEEP)
178nA on the F part at 3.3V, VREGPM=1, 32kHz LP (XTAL, SLEEP)
178nA on the F part at 3.3V, VREGPM=1, 1MHz XT (XTAL, SLEEP)
126uA on the LF part at 3.3V, 1MHz XT
153uA on the LF part at 3.3V, 500kHz MFINTOSC
7.1uA on the LF part at 3.3V, 32kHz LP (XTAL)
5.5uA on the LF part at 3.3V, 31kHz LFINTOSC
5.4uA on the LF part at 3.3V, 32kHz ECL
42uA on the LF part at 3.3V, 500kHz ECL
17nA on the LF part at 3.3V, 500kHz MFINTOSC (SLEEP)
17nA on the LF part at 3.3V, 32kHz ECL (SLEEP)
17nA on the LF part at 3.3V, 1MHz XT (XTAL, SLEEP)
17nA on the LF part at 3.3V, 32kHz LP (XTAL, SLEEP)
// PIC16F1705 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
//#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
//#pragma config FOSC = ECL // Oscillator Selection Bits (ECL, External Clock, Low Power Mode (0-0.5 MHz): device clock supplied to CLKIN pins)
#pragma config FOSC = LP // Oscillator Selection Bits (LP Oscillator, Low-power crystal connected between OSC1 and OSC2 pins)
//#pragma config FOSC = XT // Oscillator Selection Bits (XT Oscillator, Crystal/resonator connected between OSC1 and OSC2 pins)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
//#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config CLKOUTEN = ON // Clock Out Enable (CLKOUT function is enabled on the CLKOUT pin)
#pragma config IESO = OFF // Internal/External Switchover Mode (Internal/External Switchover Mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config PPS1WAY = OFF // Peripheral Pin Select one-way control (The PPSLOCK bit can be set and cleared repeatedly by software)
#pragma config ZCDDIS = ON // Zero-cross detect disable (Zero-cross detect circuit is disabled at POR)
#pragma config PLLEN = OFF // Phase Lock Loop enable (4x PLL is enabled when software sets the SPLLEN bit)
#pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 32768
int main(void)
{
#if defined(_16F1703) || defined(_16F1704) || defined(_16F1705) || defined(_16F1707) || defined(_16F1708) || defined(_16F1709)
VREGCONbits.VREGPM=1;
#endif
OSCCONbits.IRCF=0b0000; // 0b0000 => LFINTOSC
LATA=0;
LATC=0;
TRISA=0;
TRISC=0;
ANSELA=0;
ANSELC=0;
LATCbits.LATC3=1;
__delay_ms(1000);
LATCbits.LATC3=0;
while (1)
{
__delay_ms(1000);
SLEEP();
NOP();
}
return 0;
}