Scalerobotics:
This snippet has the capabiltiy to increment the pulse size a little bit at a time.
With this code the car starts out driving very fast backwards, then after five to ten seconds it stops, but never starts up forward.
My theory is that the (PAUSE 20) is what is causing the 50 pulses per second, Is that correct?
Code:duty VAR WORD ' Duty cycle value (CCPR1L:CCP1CON<5:4>) range VAR word segment var word TRISC.2 = 0 ' 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 ' PR2 = 499 ' Set PR2 to get 2KHz 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 = 200 ' Set duty cycle to 20% range = 25 duty = 1650 ' Set duty cycle to 1.65msec segment = 0 mainloop: CCP1CON.4 = duty.0 ' Store duty to registers as CCP1CON.5 = duty.1 ' a 10-bit word CCPR1L = DUTY >> 2 Pause 20 ' Pause 1/50 of second duty = duty + 2 ' Increase duty cycle IF (duty < (1650 + segment + range)) Then mainloop ' Do it again unless 2 msec duty = duty + 2 ' Reset to 20% duty cycle segment = segment + range PAUSE 2000 'Pause 2 seconds GoTo mainloop ' Do it forever




Bookmarks