It's ok mackrackit any help is better than none. Here's where I'm at as of now. I have encorperated the rest of the code back into the main now. I've left out the section where I figure out the seeking value and hard coded it. I've also given position a hard coded value as with nothing attached to the pin I will get garbage on the pin. I still have a pot tied to AN5 which does change the DC as I move it up and down. If you look below there are 6 lines in the "timeTomove" sub, if I uncomment the first four only I get no output. If I uncomment out the bottom two I get a couple of pulses on the output (Maybe 2 of 3) but after that the signal drops out. Any ideas? I will continue to work on this, and thank you for the help so far.
Code:
'-------------------------------------------------------------------------'
' PIC Defines Specific to PIC Basic Pro '
'-------------------------------------------------------------------------'
' 1. Use internal system clock
@ DEVICE PIC16F684, INTRC_OSC_NOCLKOUT
' 2. Turn watchdog timer on
@ DEVICE PIC16F684, WDT_OFF
' 3. Power on time on
@ DEVICE PIC16F684, PWRT_ON
' 4. Turning off the master clear input
@ DEVICE PIC16F684, MCLR_OFF
' 5. Brown out detect on
@ DEVICE PIC16F684, BOD_ON
' 6. Data EE Read protect is off
@ DEVICE PIC16F684, CPD_OFF
' 7. Code protect is off
@ DEVICE PIC16F684, PROTECT_OFF
'-------------------------------------------------------------------------'
' Hardware Defines Specific to PIC Basic Pro '
'-------------------------------------------------------------------------'
define ADC_BITS 10 'Set A/D coverter to use 10 bits
define ADC_SAMPLEUS 50 'Set A/D sample time as 50us
DEFINE OSC 8 'Change clock speed to 8Mhz
'-------------------------------------------------------------------------'
' Define Program Variables '
'-------------------------------------------------------------------------'
R VAR BYTE
ScaledX VAR BYTE
ScaledY VAR BYTE
ShortX VAR BYTE
ShortY VAR BYTE
Slope VAR WORD
AnalogLow VAR WORD 'Digital value for an analog low signal
AnalogHigh VAR WORD 'Digital value for an analog high signal
CurrentSpeed VAR WORD
DUTY VAR WORD
ExtLimit VAR WORD 'Stored value of the extend limit setting
JoyX VAR WORD
JoyY VAR WORD
RetLimit VAR WORD 'Stored value of the retract limit setting
Position VAR WORD 'Analog value of the internal potentiometer
Seeking VAR WORD
Speed VAR WORD
'-------------------------------------------------------------------------'
' Define I/O and EEPROM Definitions '
'-------------------------------------------------------------------------'
data @0,word 768 'Set default extend limit
data @2,word 256 'Set default retract limit
AnalogHigh = 768 'Set analog high signal level
AnalogLow = 256 'Set analog low signal level
' READ 1, RetLimit.Highbyte
' READ 0, RetLimit.Lowbyte
' READ 3, ExtLimit.Highbyte
' READ 2, ExtLimit.Lowbyte
'-------------------------------------------------------------------------'
' Initialise PIC Hardware '
'-------------------------------------------------------------------------'
CMCON0 = 7 'Turn comparators off
ADCON0.7 = 1 'Set A/D Values to be right justified
ADCON0.0 = 1 'Turn on A/D Converter
ANSEL = %00110111 'Turn on select analog registers
TRISA = %00001111 'Turn on select register inputs
TRISC = %00111111 'Turn on select register inputs
PR2 = 249
CCP1CON = %11001100
CCPR1L = 0
PIR1.1 = 0
T2CON.0 = 0
T2CON.1 = 0
T2CON.2 = 1
WHILE (PIR1.1 = 0)
WEND;
TRISC = %00000011
'-------------------------------------------------------------------------'
' Start of Main Program '
'-------------------------------------------------------------------------'
Main:
ADCIN 1, JoyX
JoyX.LowByte = ADRESL
JoyX.HighByte = ADRESH
ADCIN 0, JoyY
JoyY.LowByte = ADRESL
JoyY.HighByte = ADRESH
ShortX = JoyX / 4
ShortY = JoyY / 4
Seeking = 400
GOTO TimeToMove
TimeToMove:
ADCIN 2, Position
Position.LowByte = ADRESL
Position.HighByte = ADRESH
Position = 300
If (Position < Seeking + 10) OR (Position > Seeking - 10) THEN
' DUTY = 0
' CCP1CON.4 = DUTY.0
' CCP1CON.5 = DUTY.1
' CCPR1L = DUTY >> 2
ELSE
IF (Position > Seeking + 10) THEN
' CCP1CON.7 = 1
GOSUB GETSpeed
ENDIF
IF (Position < Seeking - 10) THEN
' CCP1CON.7 = 0
GOSUB GetSpeed
ENDIF
ENDIF
GOTO Main
GetSpeed:
ADCIN 5, Speed
Speed.lowbyte = ADRESL
Speed.highbyte = ADRESH
IF (Speed > AnalogLow) & (Speed < AnalogHigh) THEN
DUTY = 617
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = DUTY >> 2
ENDIF
IF (Speed < AnalogLow) THEN
DUTY = 400
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = DUTY >> 2
ENDIF
IF (Speed > AnalogHigh) THEN
DUTY = 850
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = DUTY >> 2
ENDIF
RETURN
END
Bookmarks