Originally Posted by irving2008 In that case you might get away with connecting the scale to a parallel port pin and reading it directly in VB on user command since you only need the one reading. You can afford to lock the thread and devote the whole CPU to the reading function for the time it takes to read the next incoming sample...
If I had a scale I'd knock something up for you... |
Irving,
What Proprocess is trying to do is grab digimatic code from a Mitutoyo gage, like calipers, mic's and indicators that have a data output port on the gage itself. This is a formatted code that comes out in a odd packet. This is not a scale encoder. The gage data is output in a 52bit string once the data request line is triggered. When the sequence starts, the CPU needs to be ready to take that stream of bits into a shift register 1 at a time and store it into a data string for restructuring into a usable ascii format for RS-232 output string. I made a typo there previously, as it should be 52bits in 13 bytes or more precisely 26 BCD nibbles.
The crux of the byte structure is in this screen shot.
It would be slick if this could be done direct through a few parallel port pins. I used a Data line, Clock line, Ready line, Request line to link the SX48 to the gage.
Here is an SX snippet of code I used to extract the data from the gage.
;*****THIS SECTION TAKES IN THE DATA STRING FROM THE DIGIMATIC GAGE
ANTI_TIE_DOWN
BANK $10 ;DOUBLE STROKE PREVENTION
JNB P_BUTTON,ANTI_TIE_DOWN
MOV MDELAY, #240
MOV MDELAY+1,#10
DEBOUNCE_SW
decsz MDELAY ; SETUP FOR DELAY OF MECHANICAL CONTACTS
JMP DEBOUNCE_SW ;DEBOUNCE TIME.
mov MDELAY, #240 ;
decsz MDELAY+1
jmp DEBOUNCE_SW
AWAIT_PB
BANK $10
;EXPECT 52 COUNTS FOR 52 BIT STRING
SNB P_BUTTON ;LOOK FOR FALLING REQ EDGE ON P_BUTTON
JMP AWAIT_PB
BANK $10
MOV FSR, #$07
CLEANUP
CLR IND
INCSZ FSR
JMP CLEANUP
clr $10
clr $11
clr $12
clr $13
clr $14
clr $15
clr $16
clr $17
clr $18
clr $19
clr $1a
clr $1b
clr $1c
clr $1d
clr $1e
clr $1f
BANK $10
MOV MDELAY,#$FF
MOV T3,#52
CLRb GAGE_REQ ;TELL GAGE TO SEND
CLKfe
SNB CLK_IN
jmp CLKfe ;LOOK FOR FALLING CLK EDGE OF RB.1
CALL SHIFTIN ;GO SHIFT THIS BIT INTO DATSTR
CJE T3,#0,SPLIT_DAT_STR
CLKre
SB CLK_IN
JMP CLKre ;LOOK FOR RISING CLK EDGE OF RB.1
JMP CLKfe
SHIFTIN
SETB GAGE_REQ ;RESET GAGE REQUEST
;CAPTURE DATA STRING ON DATA_IN AS IT COMES IN.
CLRB C ;CLEAR THE CARRY FLAG
SNB DATA_IN ;SKIP IF THE INCOMING BIT IS NOT HIGH
SETB C ;SET THE CARRY FLAG IF DATA BIT IS HIGH
RR (DATSTR + $00) ;ROTATE MIC BUFFER STRING HIGH/LOW BIT TO THE RIGHT
RR (DATSTR + $01) ;THIS TAKES THE CARRY BIT INTO THE STRING.
RR (DATSTR + $02) ;REGARDLESS OF ITS LEVEL.
RR (DATSTR + $03) ;EACH RR PUTS A BIT INTO THE CARRY FLAG
RR (DATSTR + $04) ;TO BE CONSUMED BY THE NEXT ROTATE RIGHT INSTRUCTION!
RR (DATSTR + $05) ;BASICALLY A SHIFTIN ROUTINE.
RR (DATSTR + $06)
DEC T3 ;COUNT DOWN T3 EACH BIT, SKIP IF T3 IS AT 0
DC