Hi
I'm having a few issues with some code I have written, it compiles with no errors but I am not getting the response that I expect.
All of the outputs are being simulated with LEDs and are wired in with 470ohm resistors. I also have 5k ohm potentiometors for the target and current position inputs.
When I first turn the ciruit on the direction LEDs come on but the power LED never turns on. However much I turn the current position potentiometer I can not seem to get the LEDs to turn on or off as expected.
If anybody can help me with any errors with my code or can point me in the right direction to solve the issues I am getting.
Many thanks in advance.
My current code is below:
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
asm
MOVF ADRESL,W
MOVWF _TARGET_L
MOVF ADRESH,W
MOVWF _TARGET_H
endasm
ADCON0 = %00000111 'CURRENT POSITION ADC SETUP
'MAIN PROG
MAIN:
IF CURRENT=TARGET THEN
goto motorbreak
else
if current > target then
goto motorcw
else
goto motorccw
endif
endif
GOTO MAIN
'SUB PROGRAM
MotorBreak:
GPIO = %00110001
return
MotorCW:
GPIO = %00010001
Return
MotorCCW:
GPIO = %00100001
Return
CurrentPos:
ASM
MOVF ADRESL,W ;COPY LOW BYTE OF ADC TO W
MOVWF _CURRENT_L ;COPY LOW BYTE OF ADC TO CURRENT POS FROM W
MOVF ADRESH,W ;COPY HIGH BYTE OF ADC TO W
MOVWF _CURRENT_H ;COPY HIGH BYTE OF ADC TO CURRENT POS FROM W
ENDASM
@ INT_RETURN ;RETURN
END
I am using a PIC12F683 microchip.
Many thanks
Bookmarks