Oscillator Setting (swimming through treacle)
Having dabbled with PICs now for long enough now that I probably can't get away with calling myself a n00b, I'm having to face my inner demons & declare that I just don't really understand, exactly which config sets the oscillator!
I'd always thought it was a case of
Code:
@ __CONFIG _CONFIG1, _FOSC_INTOSC
define osc 4
If I'm truthful, I've never worked out what's doing what - it's just worked (& I'm from the school "If it works, if it works"...my head has limited RAM & as I get older, some of it has CRC errors)
Ok, so now I applied that same OSC setting method to a new PIC variant I'm now dabbling with a PIC16F1823, but something went askew. Basically I needed to set my Hypertem for a completely different speed setting to get it to display properly (a big warning sign that the osicllator is wrong), but get this a pause command of 500ms, works out much longer (didn't actually time it, but probably about 4 seconds)
Ok, to cut a long story short.....this setting seems to have solved it....
My 500mS pause now is a 500ms pause, my serial term speed setting is as it should be, blah blah.
But what gives here....it seems I need a config fuse settin.g a define osc command (which appears not to work?) and now an osccon register setting too?
The datasheet says that this PIC defaults to 500kHz clock....so I'm figuring the define command simply tells the compiler what speed the oscillator is going to be running at - hence (until I found the right OSCCON settings) commands like pause taking 8 times longer than they should?
Re: Oscillator Setting (swimming through treacle)
#include <P16F1823.inc>
__CONFIG _CONFIG1, (_FOSC_INTOSC & _WDTE_ON & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF) ;18uA
__CONFIG _CONFIG2, (_WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_ON)
#define OSCCON__16MHz b'01111000'
#define OSCCON___8MHz b'01110000'
#define OSCCON___4MHz b'01101000'
#define OSCCON___2MHz b'01100000'
#define OSCCON___1MHz b'01011000'
#define OSCCON_500KHz b'00111000' ;OSCCON default
#define OSCCON_250KHz b'00110000'
#define OSCCON_125KHz b'00101000'
#define OSCCON__64KHz b'00100000'
#define OSCCON__32KHz b'00011000'
.
.
.
BANKSEL OSCCON ; Switch internal clock speed ...
movlw OSCCON___4MHz ; From settings above
movwf OSCCON
This is with the PLL disabled
Re: Oscillator Setting (swimming through treacle)
sure shot, but BANKSEL and PBP are really poor bedfellow. you want to use CHK?RP instead on the asm side. Still, there's no advantages to define it on the asm side.