12F683 - how to set it to use external 4 MHz clock?


Closed Thread
Results 1 to 20 of 20

Hybrid View

  1. #1
    Join Date
    Jul 2008
    Location
    TURKIYE-KONYA
    Posts
    51


    Did you find this post helpful? Yes | No

    Default

    OPEN YOUR PBP FOLDER AND FIND 12F683.INC

    YOU WILL SEE

    Code:
    NOLIST
        ifdef PM_USED
            LIST
            include 'M12F683.INC'	; PM header
            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
            NOLIST
        endif
            LIST
    CHANGE THE RED PART AFTER ELSE TO THIS ;

    Code:
    NOLIST
        ifdef PM_USED
            LIST
            include 'M12F683.INC'	; PM header
            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 _XT_OSC & _WDT_ON & _MCLRE_ON & _CP_OFF
            NOLIST
        endif
            LIST
    AND YOU DONT NEED TO WRITE "@ DEVICE" STATEMENT AT THE BEGINNING OF YOUR CODE ANYMORE.

  2. #2
    Join Date
    Sep 2009
    Location
    South Wales (UK)
    Posts
    62


    Did you find this post helpful? Yes | No

    Default

    Excellent!!! I was just reading another persons similar problem and was trying to track it down. Many thanks for that. It does indeed now compile and MPLAB IDE lets me upload the code to the PIC.

    Out of interest, is there any way that I can check if the thing has actually switched to the external oscillator [short of removing the oscillator!] by looking at the assembler file?

    Many thanks all for help with this - has been bugging me for hours!

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


    Did you find this post helpful? Yes | No

    Default

    COOL!!!
    You are using MPLAB!!!!
    Tool bar - configure - configuration bits.
    That shows the current sttings.
    Dave
    Always wear safety glasses while programming.

  4. #4
    Join Date
    Sep 2009
    Location
    South Wales (UK)
    Posts
    62


    Did you find this post helpful? Yes | No

    Default

    Haha, you make it sound soooooooooo easy :P

    'XT' Cheers

    I was hoping that this would help with my serial comm's issue but it hasn't lol. Maybe try another PIC, one with a serial interface built in perhaps?!

    I'll persist with this PIC for now and try to do some error-checking handshaking.

    I can say that I've definitely learned something today

    Best regards to all

    J.

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


    Did you find this post helpful? Yes | No

    Default

    Now that the configs seem to be worked out, post your code and tell what is happening or not happening and we will see what can be done about it.
    Dave
    Always wear safety glasses while programming.

  6. #6
    Join Date
    Sep 2009
    Location
    South Wales (UK)
    Posts
    62


    Did you find this post helpful? Yes | No

    Default

    Hi there,

    I think I was having a Friday moment. It all seems to be working very well now that it's using the external osc'. I've even bumped up the baud rate to 9600 and getting a good response. Just putting together a simple algorithm to take input over the serial but and set the pulse frequency/duty cycle for HPWM via Hyperterminal.

    Many thanks all for all your help. When I get the code done I'll post it on here as a working version. Won't be long.

    Cheers

    J.

  7. #7
    Join Date
    Sep 2009
    Location
    South Wales (UK)
    Posts
    62


    Did you find this post helpful? Yes | No

    Default

    Hi again,

    Ok, not the most elegant piece of code, but it works. Basically this allows you to instruct the 12F683 to output a regular pulse at a desired frequency or duty cycle on pin 5. You can communicate with the chip via a serial com port [I'm using a USB to RS232 converter].

    Personally, I establish a connection with hyperterminal that comes with XP.
    Press 'f' to set frequency [press enter after you type a value in Hz]
    Press 'f' to set the dutycycle (0 - 100%) [+enter] - the program will auto scale it 0 - 255.

    Or alternatively, type 'f?' or 'd?' to determine the current set dutycycle of frequency.

    Note: There is little in the way of error checking on the input. I just wanted to get this back to you guys to show what I'd done and that I was grateful for your help last Friday. Now that I have reliable 2-way com's on the serial bus, I'll set it up with a nice little application in MatLab.

    Best regards, J.

    P.S. One thing I couldn't sort out was clearing the screen at the start in hyperterminal from the serial port. People say to use Esc/[2J or something but I can't get it to work!!!


    Include "modedefs.bas"
    ANSEL=0
    CMCON0 = %00000111
    define osc 4

    Serial_out var gpio.0
    Serial_in var gpio.1
    command var byte
    input_char var byte
    pulse_width var word
    pulse_width_percent var byte
    pulse_width_percent_new var byte
    pulse_frequency var word
    pulse_frequency_new var word
    variable_output var word

    pulse_width = 128
    pulse_width_percent = 50
    pulse_frequency = 20000

    pause 100
    serout Serial_out,T9600,[13]
    pause 100
    serout Serial_out,T9600,[13," "]
    pause 100
    SEROUT Serial_out,T9600,[13,"This is a test",13,10]
    SEROUT Serial_out,T9600,[13,"f for frequency",13,10]
    SEROUT Serial_out,T9600,[13,"d for dutecycle (0-100)",13,10]
    SEROUT Serial_out,T9600,[13,"Press ? after f/d to find current value",13,10]

    mainloop:

    Serin Serial_in,T9600,command

    If (command = 100) then
    SEROUT Serial_out,T9600,["Enter duty cycle : "]
    input_char = 0
    pulse_width_percent_new = 0
    while input_char<10
    pulse_width_percent_new = (pulse_width_percent_new * 10) + input_char
    gosub getchar
    wend
    if input_char <> 15 then
    pulse_width = pulse_width_percent_new * 256 / 100
    hpwm 1,pulse_width,pulse_frequency
    SEROUT Serial_out,T9600,[10,13]
    else
    SEROUT Serial_out,T9600,[#pulse_width_percent,10,13]
    endif
    pulse_width_percent = pulse_width_percent_new
    endif

    If (command = 102) then
    SEROUT Serial_out,T9600,["Enter frequency cycle : "]
    pulse_frequency_new = 0
    input_char = 0
    while input_char<10
    pulse_frequency_new = (pulse_frequency_new * 10) + input_char
    gosub getchar
    wend
    if input_char <> 15 then
    pulse_frequency = pulse_frequency_new
    hpwm 1,pulse_width,pulse_frequency_new
    SEROUT Serial_out,T9600,[10,13]
    else
    SEROUT Serial_out,T9600,[#pulse_frequency,10,13]
    endif
    endif

    Goto mainloop

    getchar:
    serin Serial_in,T9600,input_char
    input_char = input_char - 48
    if input_char < 10 then
    serout Serial_out,T9600,[48+input_char]
    endif
    return

Similar Threads

  1. Interruptus Frustratus
    By Byte_Butcher in forum General
    Replies: 16
    Last Post: - 17th April 2009, 20:36
  2. Using SPI with External Interrupts
    By shaiqbashir in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 29th June 2008, 04:08
  3. Help with sound command in 2 programs
    By hyperboarder in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 5th July 2007, 20:36
  4. error on compiling
    By parker in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 16th June 2005, 14:31
  5. How to set external clock source in PBP
    By TurboLS in forum mel PIC BASIC Pro
    Replies: 28
    Last Post: - 19th February 2005, 15:56

Members who have read this thread : 0

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