Try the 12f635 or the 12f683.
The 12F629 does not have the OSCCON @ [8F - hex] , register so you can't set the speed it is stuck at 4MHz.
You will need to read the DATA SHEET a bit more closely -- as always it is buried in the fineprint
some hints: * learned from observation, please let me know if I'm wrong : )
0. Set the 2007 Register BIT FIVE [5] to ZERO [0] *****************
----> I currently do this just before programming in the programmer configuration menu.
***** This disables the master reset and allows you a. to ignore it, b. use GPIO.3 as an input. ---> for the pros I have not figured out how to set this in PBasic. more rtf is in order.
1. SLEEP and NAP are not affected by the cpu speed [really helpful]
2. PAUSE will be affected by the timer speed, >> will shift the number
3. To save power turn off the outputs when you are not using them ie. TRISIO = $FF
--- You can use this instead of GPIO = XX to turn off your lamps
I also had trouble with setting PBasic to work on slow CPU
Here's my kludge on the 12f683 : )
This is blinking some lights in a special pattern [code not shown] when off the cpu uses between 40-60 nano Amp!! Yes, NANO amps!
on a cr2016
Code:----------------------------------------------- The circuit is: pin 1 - BATT+ not even a cap to pin.8 [ground] :) 2 - LED1 + 3 - LED2 + 4 - NC 5 - LED3 + 6 - LED4 + 7 - BUZZER.minus ---> *** this PIN is a SINK, shorts to ground so turn it to ZERO in GPIO.0 when you want it to work -- other end of the BUZZER TO to batt+, use GPIO.0 8- BATT - LED1-4 - combined together then 100ohm to pin.8 [ground]
My typical header -- all commented on 12f683 for this program
Code:' ' FOR LOW POWER DISABLE AS MANY FEATURES AS POSSIBLE. ' ** FOR 12F675 un-COMMENT CMCON=7, ANSEL=0, ADCON0=0 ' ** FOR 12F629 COMMENT ALL ' CMCON = $07 'CMCON — COMPARATOR CONTROL REGISTER ALL DIGITAL ' TRISIO = %11111011 ' tristate mode 1=INPUT ' TRISA = %00001000 ' Set PORTA.0 to input A.3 input ONLY 1=in ' TRISA = %00001000 ' Set PORTA.3 input ' ADCON1 = %01100000 ' Set a2d convert at clk/6 [slowest] ' ADCON1 = %00000000 ' Set a2d convert at clk/2 [fastest] ' ANSEL = %00000000 ' AN0/RA0 as analog input 1=ANALOG ' ADCON0 = %00000001 ' .7=10bits left justify result!! / .0 1=a2d ON ' ADCON0 = %00000000 ' .7=10bits left justify result!! / .0 1=a2d ON ' WPUA = %00000000 ' TURN ON WEAK PULLUP 1=ON VALID=.5.4.2.1.0
Code:' lifted right from the data sheet : ) ' 'low speed osccon 31khz ''bit 6-4 IRCF<2:0>: Internal Oscillator Frequency Select bits ' correction ' by shifting ' | ' v ' 111 =8MHz ' 110 =4MHz (default) 0 ' 101 =2MHz 1 2 ' 100 =1MHz 2 4 ' 011 =500kHz 3 8 ' 010 =250kHz 4 16 ' 001 =125kHz 5 32 ' 000 =31kHz (LFINTOSC) 7 128 OSCCON.6 = 0 OSCCON.5 = 0 OSCCON.4 = 0 speed_shift CON 7 ' use 0-7 : oscillator / delay correction by shifting ' BYTES led VAR byte ' lower 6 bits only for GPIO ' WORDS X var word ' TEST ALL LAMPS GPIO.1.2.4 3=INPUT ONLY ' Delay for ~3 seconds X= 3000 ' START UP DELAY TIME ' ' could of done this as a short gosub ' led = $02 TRISIO = $FE - led GPIO = led Pause X >> speed_shift ' Delay for on time in milliseconds led = $04 TRISIO = $FF - led GPIO = led Pause X >> speed_shift ' Delay for on time in milliseconds led = $10 TRISIO = $FE - led GPIO = led Pause X >> speed_shift ' Delay for on time in milliseconds led = $20 TRISIO = $FF - led GPIO = led Pause X >> speed_shift ' Delay for on time in milliseconds .... LED = %00110110 ' GPIO.1.2.4.5 TRISIO = $FF ' TURN OFF OUTPUTS TO SAVE POWER GPIO= led ' Chose which LED to Turn ON ' LED ON fast blink # led TRISIO = $FF - led ' Enable output - fast blink # led Pause 128 >> speed_shift ' LED OFF TRISIO = $FF ' TURN OFF OUTPUTS TO SAVE POWER Pause 256 >> speed_shift 'time in mS end





Bookmarks