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.