Problem in Tension/compression
This is my code for length measurements for fatigue testing machine with PEAK-HOLD.
I use 1000 PPR encoder with CH A and CH B for up/down, code working well when machine working in compression.
but problem is when machine work in tension side, encoder count 65535 below 00
i want this sequence
<<---------- 00 --------->>
Tension Compression
6-5-4-3-2-1-0-1-2-3-4-5-6
chip 16f88
Code:
DEFINE OSC 20
INCLUDE "MODEDEFS.BAS"
INCLUDE "MYLCD.BAS"
ANSEL = 0 'SELECT ANALOG INPUTS 0 = NONE AND ALL DIGITAL
ADCON0 = 0 'AD MODULE OFF & CONSUMES NO CURRENT
CMCON = 7 'COMPARATORS OFF
TRISA = %00000
TRISB = %00000011 ' INT0 = ENCODER CH. A
' PORTB.1 = ENCODER CH. B
W0 VAR WORD
B1 var word
W0 = 0
B1 = 0
PAUSE 500
'-------------------------------------------------------------------------
INCLUDE "DT_INTS-14.bas" ; Base Interrupt System
INCLUDE "ReEnterPBP.bas" ; Include if using PBP interrupts
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler INT_INT, _ToggleLED1, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
OPTION_REG.6 = 0 ; 1 = Interrupt on rising edge of INT pin
; 0 = Interrupt on falling edge of INT pin
@ INT_ENABLE INT_INT ; enable external (INT) interrupts
'-------------------------------------------------------------------------
LOOP:
if W0 > B1 then B1 = W0 ' (Peak-Hold), Hold the last value of W0 in B1
LCDOUT $FE,1
LCDOUT "Length = ", dec5 w0, " mm"
lcdout $FE, $C0
lcdout "Peak- Value ",dec5 B1, " mm"
pause 500
GOTO LOOP
ToggleLED1:
if PORTB.1 = 0 then
W0 = W0+1
else
w0 = w0-1
IF (W0 < 0) THEN
W0 = 65535 + 1
endif
ENDIF
@ INT_RETURN