Re: help in pic Basic Pro "Break statement"
how about:
clear
DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
' Duty cycle value (CCPR1L:CCP1CON<5:4>)
Feedback var word
ADCON1=%00000010
duty VAR WORD ' Duty cycle value (CCPR1L:CCP1CON<5:4>)
TRISA = %11111111
TRISB = %11111111
TRISC = %11111011 ' Set PORTC.2 (CCP1) to output
CCP1CON = %00001100 ' Set CCP1 to PWM
T2CON = %00000101 ' Turn on Timer2, Prescale=4
' Use formula to determine PR2 value for a 1KHz signal,
' 4MHz clock, and prescale=4. (4E6/(4*4*1E3))-1=249
PR2 = 249 ' Set PR2 to get 1KHz out
' Use formula to determine CCPR1L:CCP1CON<5:4> value for
' ends of range 20% to 80%. (249+1)*4*0.2=200 (20% value)
' (249+1)*4*0.8=800 (80% value)
duty = 0 ' Set duty cycle to 0%
gosub Adjust:'adjust pwm duty cycle routine
mainloop:
GoTo mainloop ' Do it forever
Adjust:'adjust pwm duty cycle routine
feedback = 0 'set to 0 for first pass
while feedback < 3
adcin 0, feedback
CCP1CON.4 = duty.0 ' Store duty to registers as
CCP1CON.5 = duty.1 ' a 10-bit word
CCPR1L = DUTY >> 2
duty = duty + 1 ' Increase duty cycle
' Since the total sweep of duty is 1000 (1000-0) and
' we are adding 1 for each loop, that results in 60
' steps min to max. 1 second divided by 1000 = 1mS
Pause 1 ' Pause 1/60 of second
CCP1CON.4 = duty.0 ' Store duty to registers as
CCP1CON.5 = duty.1 ' a 10-bit word
CCPR1L = DUTY >> 2
wend
return
End
Last edited by Dave; - 23rd May 2012 at 21:41.
Dave Purola,
N8NTA
EN82fn
Bookmarks