Hybrid View
-
23-02-2010 #1
Cheers Irving, that looks promising :)
-
24-02-2010 #2
Had a bit of time spare today so knocked up this bread board...
and a few tens of lines of C code later...
Many thanks to 'bogstandard' who rummaged in his box'o bits and found me a couple of cables for the scales which saved me some hassle in connecting.
This is running off a remote 1.5V supply generated using a 555 and a -ve charge pump (nit in pic), generating -6v for the RS232 into the VFD display and -1.45v for the scales and the -ve side of the comparators (uing 311 but will replace with a single quad unit) using two diodes as the reference. The PIC is a 16F877 but again will find something smaller for the final box as really dont need a 40pin device - 14 input pins (6 for the scales and 8 for a keypad), 1 UART so probably a 20pin device will do the job.
Bill/Robin, I know you guys have both done something along these lines already, how did you force the scales into fast read mode (currently I do this by hand) and, more importantly, how did you know when they got there and weren't in some 'hold' mode?
-
24-02-2010 #3This is running off a remote 1.5V supply generated using a 555 and a -ve charge pump
and a few tens of lines of C code later...
Bill/Robin, I know you guys have both done something along these lines already, how did you force the scales into fast read mode (currently I do this by hand) and, more importantly, how did you know when they got there and weren't in some 'hold' mode?
Essentially, I measure the data repeat rate from the scale to determine the current mode then apply pulses to change to the desired mode. The clk/data pulse sequence varies from scale to scale so I also test the data type to determine the type of scale.
Hold mode is a PITA because i can see no way to test the scale in in that Mode. In the end, I just used a reliable 'get back to normal' sequence then output the fast mode sequence blindly.
I have a one scale here that requires one extra pulse to get it to fast mode from hold, yet no way to determine the that this is a different type of scale from within the PIC. I will either have to program a special chip just for this scale or change the PIC code so it stores the sequence in EEPROM , that way I can change it from the PC program.
[edit]
Here you go:
Code:;Zero vernier display Zero movf rxbuff+1,w andlw 0xDF xorwf IDbyte,w ;test correct axis btfss status,z return call zeronorm btfss Mode,Fast ;if it was in fast mode then setfast return goto setFast ;set zero normal mode ZeroNorm call measure ;measure checks the clock to determine fast/slow mode btfss Mode,Fflg goto tstslow pdlp call PlsData ;pulse data until slow call measure btfsc Mode,Fflg ;test slow goto pdlp call PlsClk ;pulse clk (zero switch) return ;measure the vernier reading speed (300mS slow,20mS fast) measure bcf CMCON,CIS ;switch comp to clk input call synlp ;wait for clock low >1mS bcf Mode,Fflg ;if clock occurs within ~25mS then Fast flag will be set movlw 25 movwf vdata ;borrow vdata as counter m2lp btfsc CMCON,COUT bsf Mode,Fflg ; decfsz vdata+3,f goto m2lp decfsz vdata,f goto m2lp return Tstslow call PlsClk ;pulse clk call measure btfsc Mode,Fflg ;test slow goto pdlp ;if fast, pulse data until slow return ;normal zero
Last edited by BillTodd; 24-02-2010 at 10:33 PM.
-
24-02-2010 #4
Its easily fast enough in C whan you're running a 20Mhz clock - this scale is running at 74KHz clock rate or 13.5uS.. the actual C routine to sample the clock, determine the falling edge, read the data line and shift it into a 32bit register is 49 assembler instructions (7 lines of C) which takes 9.8uS. It may be that on another scale it will need optimising... although this compiler is pretty good but being C it tends to use temporary variables in RAM (mainly becuase I haven't yet worked out how to force it to use registers as variables)
Code://now in lead up to second data burst unsigned char count=24; long data = 0; while(count>0) { data >>= 1; //prepare for next bit while(CK==1); //wait for clock to go low if(DT==1) //sample data data |= 0x00800000; while(CK==0); //wait for clock to go hi count--; } //do stuff with data...
Thread Information
Users Browsing this Thread
There are currently 1 users browsing this thread. (0 members and 1 guests)
Similar Threads
-
Fixing linear rail - DIY practice
By CharlesJenkinson in forum Rails, Guideways & BearingsReplies: 1Last Post: 10-02-2014, 12:53 PM -
NEW MEMBER: Hi from Reading
By Saracen in forum New Member IntroductionsReplies: 4Last Post: 26-11-2012, 01:50 AM -
wall and floor fixing am I the only one ????????????
By luke11cnc in forum General DiscussionReplies: 15Last Post: 30-12-2011, 11:45 PM -
FOR SALE: DRO + 4 Scales
By Rikk in forum Items For SaleReplies: 0Last Post: 22-10-2011, 09:41 AM -
Mill with digital scales
By Robin Hewitt in forum Milling Machines, Builds & ConversionsReplies: 14Last Post: 22-08-2008, 10:21 AM
Bookmarks