Make an acceleration/deceleration ramp : any ideas?


Closed Thread
Results 1 to 14 of 14

Hybrid View

  1. #1


    Did you find this post helpful? Yes | No

    Default Re: Make an acceleration/deceleration ramp : any ideas?

    Quote Originally Posted by Charles Linquis View Post
    stop the incrementing or stop the interrupt when freq >= maxfreq
    I've tried this on my real PIC with a potentiometer :

    Code:
    DEFINE OSC 32      
    DEFINE LCD_DREG PORTC
    DEFINE LCD_EREG PORTD
    DEFINE LCD_RSREG PORTD
    DEFINE LCD_EBIT 0
    DEFINE LCD_RSBIT 1
    DEFINE ADC_BITS 10
    
    ' ADC registers configuration
    ADCON0=%11101
    ADCON1=%10000    
    ADCON2=%10000110  
    ADCHS=%1010101  
    ANSEL0=%11110000 
    
    ' Variable init
    freq var word
    rfreq var word
    maxfreq var word
    minfreq var word
    dum6 var word
    dum7 var word
    accel var word
    decel var word
    frac var word
    oldfrac var word
    potsense var word
    
    ' Variables def
    maxfreq=1200
    minfreq=10
    accel=1000
    decel=1000
    
    ' Start freq
    freq=minfreq
     
    main:
    
    ' Start ADC conversion
    ADCON0.1=1       
    WHILE ADCON0.1=1:WEND
    
    ' Store ADC results   
    potsense.HighByte=ADRESH 
    potsense.LowByte=ADRESL 
    
    ' Convert pot result
    rfreq=(potsense<<6)**maxfreq
    
    ' Acceleration ramp
    if freq<rfreq then
    dum6=(rfreq-minfreq)/accel
    dum7=(rfreq-minfreq)//accel
    freq=freq+dum6
    frac=frac+dum7
    if frac dig 3<>oldfrac then oldfrac=frac:freq=freq+1
    endif 
    
    ' Deceleration ramp
    if freq>rfreq then
    dum6=(maxfreq-rfreq)/decel
    dum7=(maxfreq-rfreq)//decel
    freq=freq-dum6
    frac=frac-dum7
    if frac dig 3<>oldfrac then oldfrac=frac:freq=freq-1
    endif 
    
    ' Display results
    lcdout $fe,$2,"Frequency: ",dec5 freq
    lcdout $fe,$c0,"Ref: ",dec5 rfreq
    
    pause 1
    
    goto main
    And unfortunately the timing is not very accurate, it depends of the "maxfreq" variable defined. I can have a 1 or 2 seconds gap.
    And above 1000, the "accel"/"decel" values doesn't increase the time of the ramp.

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


    Did you find this post helpful? Yes | No

    Default Re: Make an acceleration/deceleration ramp : any ideas?

    If you use an interrupt, the timing is guaranteed.

    Your LCD can't possibly update every millisecond.
    Charles Linquist

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