motion seconded... back to basics... and pillow
motion seconded... back to basics... and pillow
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
I don't see where you are re-reading the commanded position within the main loop. I only see where you are reading the feedback position in the interrupt routine... Maybe my eyes are going bad...
Dave Purola,
N8NTA
EN82fn
Thank you for the feedback so far.
I am work at the moment so I can not impliment the suggestions until later today,I will give feedback on any results in due course.
Dave - at the moment it only should read the target position at the start of program and only update the target position if the PIC is reset, I intend to write in a routine later in the programs evolution that will allow the target position to be updated while the program is running.
Once again thank you for the help.
I have made the suggested changes to the program. depending on the position of the potentiometers when the power is applied to the circuit, one of the direction LEDs lights up. If both of the Potentiometers have equal resistances, both of the direction LEDs light up. The power LED never seems to light. I have checked the LEDs to ensure they are working as expected. I have also checked that the resistance of the potentiometers functions as expected.
The reading of the ADC appears to work, though the current position does not seem to update. I believe that either the If statements do not work properly or the main loop is not cycling, or the program is stopping as it is turning the LEDs on.
Is there anything that I am missing?
I have copied the latest form of the code bellow:
DEFINE OSC 8
'GP2 (AN2) IS FOR TARGET POSITION (INPUT)
'GP4 DIRECTION SIGNAL CW (OUTPUT)
'GP5 DIRECTION SIGNAL CCW (OUTPUT)
'GP0 POWER (OUTPUT)
'GP1 (AN1) CURRENT POSITION (INPUT)
'REGISTERS
OPTION_REG = %11000000
INTCON = %11000000
PIE1 = %01000000
PIR1 = %00000000
OSCCON = %01110001
TRISIO = %00000111
ANSEL = %01010110
CCP1CON = %00000000
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts
;---------------------------------------------------------------------------
wsave VAR BYTE $20 SYSTEM ' location for W if in bank0
;wsave VAR BYTE $70 SYSTEM ' alternate save location for W
' if using $70, comment wsave1-3
' --- IF any of these three lines cause an error ?? ------------------------
' Comment them out to fix the problem ----
' -- Which variables are needed, depends on the Chip you are using --
wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1
'wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2
'wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3
' --------------------------------------------------------------------------
'OUTPUT PINS
DIRCW VAR GPIO.4
DIRCCW VAR GPIO.5
PWMOUT VAR GPIO.0
'VARIABLES
TARGET VAR WORD bank0
TARGET_L VAR Target.BYTE0
TARGET_H VAR TARGET.byte1
CURRENT VAR WORD bank0
CURRENT_L VAR current.byte0
CURRENT_H VAR current.byte1
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler AD_INT, _CurrentPos, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
'READ TARGET POSITION FROM POT
ADCON0 = %00001011 'TARGET POSITION READ
REPEAT
PAUSE 100
UNTIL ADCON0.1 = 0
TARGET.lowbyte = ADRESL
Target.HighByte = ADRESH
ADCON0 = %00000111 'CURRENT POSITION ADC SETUP
'MAIN PROG
MAIN:
IF CURRENT=TARGET THEN
gosub motorbreak
else
if current > target then
gosub motorcw
else
gosub motorccw
endif
endif
GOTO MAIN
'SUB PROGRAM
MotorBreak:
GPIO = %00110001
return
MotorCW:
GPIO = %00010001
Return
MotorCCW:
GPIO = %00100001
Return
CurrentPos:
current.lowbyte = ADRESL
Current.HighByte = ADRESH
@ INT_RETURN ;RETURN
END
Many thanks
How is the power Led wired?
I can only assume it is wired so that the Pic is sourcing the current to the led. Am I correct?
Dave Purola,
N8NTA
EN82fn
Yes the LED is sourcing the current to the LED, which is exactly the same as the other LEDs. which do light up depending on the position of the potentiometers.
many thanks
well... maybe not a bad idea to read the ADC again once in a while, as it is right now you read it only once![]()
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks