Please help configure 16F616


Results 1 to 16 of 16

Threaded View

  1. #9


    Did you find this post helpful? Yes | No

    Default Re: Please help configure 16F616

    I think I've got it working well now. FWIW, tweaking the CONFIG or registers didn't really help much. Neither did setting the ADC sample rate to ridiculously long times. What seems to have fixed it was adding a "buffer" or tolerance limit. Subroutine movedigipot sets xprevious to the ADC reading that was used to last move the digital pot. Subroutine checkpot checks to see if the current ADC reading is within +/- 2.56% of xprevious. If it is, it doesn't allow the digital pot to move. I made it so that x could never equal zero because that causes trouble further down the road. There's no obvious reason at the moment.

    Now it's time to implement the interrupt.....ugh.

    Code:
    #config 
        __CONFIG _CP_OFF & _WDTE_OFF & _BOREN_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _IOSCFS_8MHZ
    #endconfig
    
    ADCON0 = %00000000
    ADCON1 = %00110000
    ANSEL = %00000110
    define ADC_SAMPLEUS 50
    define ADC_BITS 8
    
    
    CM1CON0 = %00000000
    CM2CON0 = %00000000  
    
    TRISA = %00001111
    TRISC = %00000000
    
        
        '                      
        '    Hardware connection
        '    ===================
        CS          VAR PORTA.5
        SCK         VAR PORTC.2
        SDI          VAR PORTC.1
        tempoLED var PORTC.0
        tempobutton var PORTA.0
        bypassbutton var PORTA.3
        bypassLED var PORTC.4
        fetA var PORTC.5
        fetB var PORTA.4
        fetC var PORTC.3
        
        
        
        '   
        '    Variables definition 
        '    ===================
        w var byte                          ' division toggle switch
        x var byte                          ' delay time knob
        xprevious var byte
        z var byte
        
        ticks var word
        tapcount var word
        LEDcounter var word
        LEDcounterlimit var word
        LEDrate var word
        
        trailsmode var byte
        trailsmodecounter var word 
        LEDon var byte
        LEDoff var byte
        
        LEDon = 1
        LEDoff = 0
                                 
        '
        '    begin in bypass
        '    ===============
        
        tempoLED = 0
        fetA = 0
        fetB = 0
        fetC = 1
        bypassLED = LEDoff
        trailsmode = 0
        gosub readpot
        gosub movepot
        if xprevious <= 0 then
            xprevious = 1
        endif
        
    main: 
            if bypassBUTTON = 0 then
                gosub bypasspress
                gosub bypassbuttonrelease
            ENDif
            gosub potcheck
    goto main
                                                                  ' subroutine that occurs when bypass button is pressed
    bypasspress:
        trailsmodecounter = 0                                      ' waits to see if you want to switch between normal or trails mode
        do until trailsmodecounter = 400
            if bypassbutton = 1 then exit
            pause 10       
            trailsmodecounter = trailsmodecounter + 1
        loop
        
        if trailsmodecounter = 400 then
            goto trailmodechange
        endif 
        
        if trailsmode = 1 then 
            gosub trailsbypass
        elseif trailsmode = 0 then
            gosub normalbypass
        endif
    return
    
    trailmodechange:                                                ' subroutine that occurs when bypass button is held long enough to change between normal or trails mode
        if trailsmode = 1 then
            trailsmode =  0
        elseif trailsmode = 0 then
            trailsmode = 1
        endif
        
        for z = 1 to 5
        tempoLED = 1
            pause 100
        tempoLED = 0
            pause 100
        next z
        
    goto main    
    
    normalbypass:                                                       ' subroutine for normal bypass
        if bypassLED = 0 then
            fetA = 1
            fetB = 1
            fetC = 0
            bypassLED = LEDon
        elseif bypassLED = 1 then
            fetA = 0
            fetB = 0
            fetC = 1
            bypassLED = 0
        endif
    return
    
    trailsbypass:                                                       'subroutine for trails bypass
        if bypassLED = 0 then
            fetA = 1
            fetB = 1
            fetC = 0
            bypassLED = LEDon
        elseif bypassLED = 1 then
            fetA = 0
            fetB = 1
            fetC = 1
            bypassLED = LEDoff
        endif
    return
    
    bypassbuttonrelease:                                               '  debounce subroutine when bypass button is pressed
        do until bypassbutton = 1
            pause 10
        loop
    return    
    potcheck:       
            gosub readpot
            if x <= 0 then
                x = 1
            endif
            if x >= xprevious + 5 or x <= xprevious - 5 then
                gosub movepot
            endif
    return        
    
    movepot:        
            CS = 0
            shiftout SDI, SCK, 1, [00000000,x]
            shiftout SDI, SCK, 1, [00010000,x]
            CS = 1
            xprevious = x
    return
             
    readpot
        adcin 2,x
        pause 100
    return
    
    end
    Last edited by keithv; - 9th September 2016 at 19:46.

Similar Threads

  1. Replies: 11
    Last Post: - 5th March 2012, 20:40
  2. CONFIGURE & OSCCON & meProg configure
    By SUNFLOWER in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 19th February 2011, 21:25
  3. PIC 16F616 Interrupt Enable/Disable?
    By Tobias in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 17th May 2009, 08:17
  4. 16F616 A to D
    By Tobias in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 1st May 2009, 16:37
  5. Configuring 16F616
    By Tobias in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 16th February 2009, 16:28

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