Setting up a 12F683 to run at 20 Mhz


Closed Thread
Results 1 to 14 of 14
  1. #1
    Join Date
    Jan 2009
    Posts
    34

    Default Setting up a 12F683 to run at 20 Mhz

    I'm trying to get the 12F683 to run on an external crystal at 20 mhz...with no luck.

    I've played with the OSCON and had it run at 1, 2, 4 and 8 Mhz. The Define command doesn't seem to do this though.

    How do I setup the 12F683 for 20 mhz??????

    Here is some code I'm playing with.

    [HTML]'config_wdt_on
    'config_fosc2_off
    'config_fosc1_on
    'config_fosc0_off
    'config_ircf2_on
    'config_ircf1_off
    'config_ircf0_off
    'define osc 20


    'cfg %111111111111010
    'osccon = %01001000 ' Osc set to 1 MHz
    'osccon = %01100000 ' Osc set to 4 MHz
    osccon = %01110000 ' Osc set to 8 MHz


    trisio = %00011000 '
    wpu = %00011000
    CMCON0 = 7 ' Analog comparators off
    ANSEL = 0 ' Analog select set to digital, pg 69 data
    ADCON0 = 0 ' A/D turned OFF, pg 68 of data



    pausetime var word
    Out0 var gpio.0
    Out1 var gpio.1
    Out2 var gpio.2
    B0 var byte

    'input gpio.4

    ' SET VARIABLES
    pausetime = 100
    B0 = 0
    low 0
    low 1
    low 2


    start:

    'button gpio.3,1,10,5,B0,1,notp
    if gpio.3 = 1 then goto start

    call blink0
    call blink2
    call blink1


    goto start


    blink0:
    high out0
    pause pausetime
    low out0
    'pause pausetime
    return

    blink1:
    high out1
    pause pausetime
    low out1
    'pause pausetime
    return

    blink2:
    high out2
    pause pausetime
    low out2
    'pause pausetime
    return

    notp:
    goto start

    end
    [/HTML]

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    _HS_OSC
    Needs to be used in the configs.
    Then
    DEFINE OSC 20
    needs to be near the top of your code.

    Have you read this thread?
    http://www.picbasic.co.uk/forum/showthread.php?t=543
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    _HS_OSC
    Needs to be used in the configs.
    Then
    DEFINE OSC 20
    needs to be near the top of your code.

    Have you read this thread?
    http://www.picbasic.co.uk/forum/showthread.php?t=543
    I just looked at the link...Great information! Thanks for that.

    I'll try your suggestions above today, really appreciate that too.

    Do you know if the crystal and capacitor setup is 'touchy'? I'm trying to paste an image of the setup here...but not sure if you'll see it...
    Attached Images Attached Images  
    Last edited by johnnylynx; - 1st March 2009 at 18:28. Reason: no picture

  4. #4
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    _HS_OSC
    Needs to be used in the configs.
    Then
    DEFINE OSC 20
    needs to be near the top of your code.

    Have you read this thread?
    http://www.picbasic.co.uk/forum/showthread.php?t=543
    OK, I tried the above but didn't work.

    Trial 1:
    - using the default setting of 4 mhz, the LED's flashed at rate 'X'

    Trial 2:
    - using the osccon = %01110000 (8 mhz)
    - The LED's flashed at a rate of '2X'

    Trial 3:
    - Using the
    _hs_osc
    Define OSC 20
    - the LED flashing rate went back to 'X'

    It doesn't seem that the 20 Mhz is working??? Should it not flash at '5X' rate?

    Here is what the top end of the code looks like now:

    [HTML]

    '*************************************
    'Configuration Bits

    _hs_osc

    define osc 20

    'osccon = %01001000 ' Osc set to 1 MHz
    'osccon = %01100000 ' Osc set to 4 MHz
    'osccon = %01110000 ' Osc set to 8 MHz


    trisio = %00011000 '
    ' GPIO.5 output
    ' GPIO.4 input
    ' GPIO.3 input
    ' GPIO.2 output
    ' GPIO.1 output
    ' GPIO.0 output

    wpu = %00010000
    ' GPIO.5 Weak pullup disabled
    ' GPIO.4 Weak pullup enabled
    ' GPIO.3 Weak pullup disabled
    ' GPIO.2 Weak pullup disabled
    ' GPIO.1 Weak pullup disabled
    ' GPIO.0 Weak pullup disabled

    CMCON0 = 7 ' Analog comparators off
    ANSEL = 0 ' Analog select set to digital, pg 69 data
    ADCON0 = 0 ' A/D turned OFF, pg 68 of data


    '***************************************
    'Define Variables

    pausetime var word
    Out0 var gpio.0
    Out1 var gpio.1
    Out2 var gpio.2
    B0 var byte

    '***************************************
    'Set Variables

    pausetime = 100
    B0 = 0
    low 0
    low 1
    low 2
    [/HTML]

  5. #5
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default

    When you set

    'DEFINE OSC 20'

    You are not "telling" the chip to run at 20MHz, you are telling PBP that
    the chip is running at 20MHz (rather than 4MHz), and to adjust all pertinent
    timing accordingly.

    If the chip is actually running at 4MHz and you have DEFINE OSC 20, all the PBP PAUSES (and a lot of other timing, such as SERIN) will be off by a factor of 5. PBP uses a default define of 4MHz, so if you are actually running at 4MHz, you don't have to change this define. PAUSE 1000 will give a 1 second delay. If the PIC is actually running at 20MHz, then a PAUSE 1000 will give a 200 millisecond delay.
    If you are running at any speed other than 4MHz, then you change the define accordingly.
    Charles Linquist

  6. #6
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Unhappy

    Quote Originally Posted by Charles Linquis View Post
    When you set

    'DEFINE OSC 20'

    You are not "telling" the chip to run at 20MHz, you are telling PBP that
    the chip is running at 20MHz (rather than 4MHz), and to adjust all pertinent
    timing accordingly.

    If the chip is actually running at 4MHz and you have DEFINE OSC 20, all the PBP PAUSES (and a lot of other timing, such as SERIN) will be off by a factor of 5. PBP uses a default define of 4MHz, so if you are actually running at 4MHz, you don't have to change this define. PAUSE 1000 will give a 1 second delay. If the PIC is actually running at 20MHz, then a PAUSE 1000 will give a 200 millisecond delay.
    If you are running at any speed other than 4MHz, then you change the define accordingly.
    Ah, makes sense.

    So in theory, if I use CFG_HS_OSC to get the 12F683 to use the external oscillator on pins 2&3 and use the DEFINE OSC 4 command...then the LED's should blink at the rate of 5X...right?

    If so, I just tried that and the rate is still X???

    What am I doing wrong?

    Better yet...How do I confirm that the chip is running at 20Mhz??

    John.

  7. #7
    Join Date
    Aug 2006
    Location
    Look, behind you.
    Posts
    2,818


    Did you find this post helpful? Yes | No

    Default

    Read this link: http://www.picbasic.co.uk/forum/showthread.php?t=543
    Setting the config statement to HS controls the power supplied to the oscillator to "enable" it to run at high speed. The crystal determines that speed, The Define statement as Charles explained Syncs up the chips internal timing to the supplied crystal and Oscon allows you to alter the oscillator's prescaler in code (more or less ).
    If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
    .
    Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
    .
    There simply is no "Happy Spam" If you do it you will disappear from this forum.

  8. #8
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Joe S. View Post
    Read this link: http://www.picbasic.co.uk/forum/showthread.php?t=543
    Setting the config statement to HS controls the power supplied to the oscillator to "enable" it to run at high speed. The crystal determines that speed, The Define statement as Charles explained Syncs up the chips internal timing to the supplied crystal and Oscon allows you to alter the oscillator's prescaler in code (more or less ).
    I'm not sure if you saw the photo I posted above...I'm using 2-27pF capacitors with the crystal. How can I confirm that the chip is running at 20Mhz?

    John.

  9. #9
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default

    Run the program below -

    Set the port to output

    TOPP:
    Toggle LED
    PAUSE 1000
    GOTO TOPP

    If the LED stays on for one second and off for one second, then
    you are running the frequency you have set in your DEFINE

    For example:

    IF have DEFINE OSC 4 -

    and the above program turns the LED one second ON and one second OFF
    Then you are running at 4MHz

    If it is on for 200milliseconds at off for 200 milliseconds. Then you are running
    at 20MHz.
    Charles Linquist

  10. #10
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Angry

    Quote Originally Posted by Charles Linquis View Post
    Run the program below -

    Set the port to output

    TOPP:
    Toggle LED
    PAUSE 1000
    GOTO TOPP

    If the LED stays on for one second and off for one second, then
    you are running the frequency you have set in your DEFINE

    For example:

    IF have DEFINE OSC 4 -

    and the above program turns the LED one second ON and one second OFF
    Then you are running at 4MHz

    If it is on for 200milliseconds at off for 200 milliseconds. Then you are running
    at 20MHz.


    I kinda thought that's what I had to do...just didn't believe it was that simple!

    So I did that...even though I've 'told' the chip to run the external crystal and defined osc 4...I'm not blinking @ 200ms

    Either the crystal isn't oscillating properly...or I should start flippin' burgers


    BTW: The reason I'm trying to run this 12F683 at 20Mhz is to obtain readings from an accelerometer (aboard an RC aircraft) and control 3 servos all in a relatively smooth way.

    In addition, I've bought XBEE 900 Mhz XSC transceivers and will be passing telemetry information from the aircraft to a ground station. I have more Q's about serial communications from the 12F683 to the XBEE...but that's for another thread. I first have to figure out what I don't know.

    Cheers,

    JOhn.

  11. #11
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    It does not look like you are setting the config correctly.
    The thread that Joe and I pointed you to should have helped.

    For now try going to the inc file for this chip in the PBP directory. Below is part of it.
    If you are using PM for the assembler change
    device pic12F683, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
    to
    device pic12F683, hs_osc, wdt_on, mclr_on, protect_off

    If you are using MPASM then change
    __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF
    to
    __config _HS_OSC & _WDT_ON & _MCLRE_ON & _CP_OFF

    Code:
     device  pic12F683, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
    
            XALL
    
            NOLIST
    
        else
    
            LIST
    
            LIST p = 12F683, r = dec, w = -302
    
            INCLUDE "P12F683.INC"	; MPASM  Header
    
            __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF
    Dave
    Always wear safety glasses while programming.

  12. #12
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    It does not look like you are setting the config correctly.
    The thread that Joe and I pointed you to should have helped.

    For now try going to the inc file for this chip in the PBP directory. Below is part of it.
    If you are using PM for the assembler change
    device pic12F683, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
    to
    device pic12F683, hs_osc, wdt_on, mclr_on, protect_off

    If you are using MPASM then change
    __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF
    to
    __config _HS_OSC & _WDT_ON & _MCLRE_ON & _CP_OFF

    Dave, thanks for your help, really appreciate it. I've been spending too many hours (very unproductive ones at that) trying to learn this thing called picbasic, and, as I'm sure you know, after you hit that frustration level...YOU JUST CAN'T GIVE UP! And, of course its down hill from there...Sleep is good, if you can get your mind off the problem.

    Anyway,

    Here's my Code:

    [HTML]@__config _HS_OSC & _WDT_ON & _MCLRE_ON & _CP_OFF

    DEFINE OSC 20


    CMCON0 = 7 ' Analog comparators off
    ANSEL = 0 ' Analog select set to digital, pg 69 data
    ADCON0 = 0 ' A/D turned OFF, pg 68 of data


    '***************************************
    'Define Variables


    '***************************************
    'Set Variables


    low 0


    start:
    toggle 0

    pause 1000

    goto start

    end[/HTML]

    When I change the DEFINE OSC between 4, 8, 20 it seems to work fine now...but I get compilation errors as follows:

    [HTML]Executing: "C:\PBP\PBPW.EXE" -ampasmwin -oq -z -p12F683 "Blink 12f683 simple.bas"
    PICBASIC PRO(TM) Compiler 2.50b, (c) 1998, 2008 microEngineering Labs, Inc.
    All Rights Reserved.
    Warning[205] E:\USERS\JDROOG\DOCUMENTS\MCS\BLINK 12F683 SIMPLE.ASM 82 : Found directive in column 1. (__config)
    Error[118] E:\USERS\JDROOG\DOCUMENTS\MCS\BLINK 12F683 SIMPLE.ASM 82 : Overwriting previous address contents (2007)
    Error[118] E:\USERS\JDROOG\DOCUMENTS\MCS\BLINK 12F683 SIMPLE.ASM 82 : Overwriting previous address contents (2007)
    Loaded E:\Users\jdroog\Documents\MCS\Blink 12f683 simple.COD.
    BUILD SUCCEEDED: Mon Mar 02 19:14:43 2009[/HTML]

    What exactly does this mean??

    John.

  13. #13
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    For the error go to the *.inc file in the PBP directory for your chip and comment out this line

    __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF

    with a ;

    The warning is just a warning, you can add this near the top of you code
    Code:
    Asm
        ERRORLEVEL -205
    Endasm
    or put a space between
    @ and _
    in the config statement in you code.

    This stuff is addictive
    Dave
    Always wear safety glasses while programming.

  14. #14
    Join Date
    Jan 2009
    Posts
    34


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    For the error go to the *.inc file in the PBP directory for your chip and comment out this line

    __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF

    with a ;

    The warning is just a warning, you can add this near the top of you code
    Code:
    Asm
        ERRORLEVEL -205
    Endasm
    or put a space between
    @ and _
    in the config statement in you code.

    This stuff is addictive

    It worked. Thanks again. I think I'll read some Tom Clancey now...

Similar Threads

  1. PICKit2 - warning about configuration words
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 26
    Last Post: - 4th August 2009, 14:01
  2. Char. LCD and 18F452 on 20 MHz not work
    By samettin in forum General
    Replies: 11
    Last Post: - 28th July 2008, 09:59
  3. PIC18F2685 config settings for 20 MHz
    By wwilson17 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 31st March 2008, 23:13
  4. 20 MHz + PLL vs 48MHz
    By Demon in forum General
    Replies: 14
    Last Post: - 31st July 2006, 12:02
  5. How to use a 20 MHz resonator on a 16F688
    By Thomas Williams in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 21st December 2005, 09:18

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts