Touch Dro Fix For Igaging Absolute Dro Scales (i Hope)

Yes it did.
Don't want to get my hopes up just yet, but opening it up let me verify it was a 3 track scale and ruled out Vee scan type.
Led me back to re-look at a type of system that uses 3 tracks called the Master track, Nonius track, & Incremental track for Absolute scales.
This uses an SSI protocol for a 2's Compliment type binary system. Everything seems to fit just a matter of running the numbers and see if it works.
Might be another unintended plus, if I'm correct. Using the OEM displays, I've noticed the slow (10X/sec) update rate, but also a smooth display with little or no jumping.
Given the noise of the original scale data run, I'm now wondering if the update rate is a function of the diplay and not the scales.
If I'm right, the display averages a few readings before updating the display. If so, might be able to increase the update rate reducing the lag.
 
FINALLY !!!
My friend Brian and I finally hacked the old iGaging Absolute Origin scales. It's been a long road, but managed to finally figure it out.
Brian has written a sketch for the Arduino Uno and successfully tested it with a single scale. I'm in the process of building my Touch DRO controller for testing with 3 scales at once to make sure no issues arise.
Once this is done, Brian plans on finishing the coding for the fourth input (W-axis) and also write one up for use with MSP Lauchpad as well.

As you can see from my last post, it's been a 3 year struggle to finally decode these things. So if any of you that had these scales and were following this thread, you might want to dust off those scales and start looking for parts to build your own Touch DRO controller.
 
BTW, don't start putting together a controller just yet based on the directions given on Yuriy's Touch DRO site. The coding will require specific pins to be used for each axis port.
I'm also dealing with sub-zero temperatures outside at the moment so this will delay my testing somewhat.
I'll keep everyone updated.
 
Nice work, Brian and Jimmy. I know that Brian spent countless hours reverse engineering that protocol and his new sketch is well done. Congrats, gentlemen!
 
UPDATE:
Testing will be delayed a bit.
Brian contacted me about a small issue. He works more with the TI MSP Launchpad platform instead of Arduino. The MSP uses 3.3v as the native voltage vs 5v for the Arduino on the boards. Since the scales are 3.3v, he suggested either building a voltage divider circuit or get a couple LM339 Quad Comparators.
Since it would be necessary to build a voltage divider circuit for each scale, I'm opting for the later and will have to wait until they get delivered.
Although his initial test with the single scale I loaned him worked, but we're worried about scale longevity if it's supplied with 5 volts from the Arduino pin pull up resistors.
Brian hasn't completed the code for the Tach function for the sketch yet or wrote the one for MSP platform. It's on his "To-Do" list, but his work schedule will delay both for a bit. If the testing is successful, I'll post the Arduino sketch "As is" since the Tach/"W" axis code can easily be added later.
Just as a reminder, this project requires specific pins to be used on the Arduino board which is spelled out in the sketch which is why I said not to try getting a jump start on putting the board together.
 
JImmy,
Arduino is able to detect signal from 3.3V scales without any problems, so you really don't need the comparators. If you want to pull up the lines, make a simple voltage divider with two resistors. For example 10K from Vcc and 20K from ground. Where they meet will produce safe voltage. You can either have one of these per input pin or just fan out 20K resistors from the junction point to each input pin. Better yet, get a LM 3117-3.3 LDO voltage regulator to provide the necessary Vcc to scales and pull up the pins to that. The circuit needs 3 parts: the regulator and two capacitors.
You would need the comparators if the MCU wasn't detecting the input level. Comparator circuit would look something like this: http://www.yuriystoys.com/2013/10/voltage-shifter-circuit-for-mixed-scale.html and wouldn't do anything useful.
Regards
Yuriy
 
I know, but according to Brian, the Arduino pins that the Clock signals are assigned to pull the signal to 5 volts. His initial test worked, but he had a concern with the electronics in the readhead handling the higher voltage over a long period.
I'm not sure if you remember, but the original iGaging Absolute Origin scales don't have an external clock, the clock crystal resided in each of readheads and is in a normally high state and pulled low. I believe that's why each scale clock line is assigned its own pin on the Arduino. I think that's why he suggested the comparators, but I'll check into the LM3117's.
Unfortunately, I don't think Brian is on this forum as he could give a much better explanation than I can. You could email him if you'd like. I'm pretty confident with electrical, but much less so with electronics and tend to defer to his expertise.
I also have my own agenda in that it's a good excuse to start playing around with MSP Launchpad. Arduino seems to be easier platform for a beginner like me, but the MSP platform seems to be both cheaper and more flexible a platform. I think I remember Brian telling me you preferred it over Arduino as well.
Yes, I could just build a voltage divider circuit for each of the clock pins, but they do have to be 3 separate circuits in order to detect the clock cycles for each of the scales. Either way, he said the sketch would have to be tweaked depending on which way I decided to go.
 
Jimmy finally talked me into joining this forum, figured it would be best if I answered any questions directly.

Like Yuriy said, the Arduino has no problems whatsoever reading the 3.3V signal coming in from the scales. The problem is the clock line. In actuality, it isn't really a clock at all, it's the "doorbell" the read head uses to tell the display unit that a data bit is being sent. The display unit provides a 3V signal to the read head on the clock line. When the read head is sending a data bit, it pulls that voltage to ground. That signals the display unit to read the data line.
Since I wrote the sketch to have the Arduino supply this voltage, 5V is being supplied. The simplest solution is a voltage divider. I'm attaching a quick schematic of the divider. It's 2 resistors and a connection to ground. Easy stuff.
The sketch uses Arduino pins 6, 8, and A0 as the clock lines, so voltage dividers need to be placed on each of those 3 pins.

If you have any questions, ask! I'll get to them as soon as I can, but I can't promise when that will be.Arduino Voltage Divider to 3V.png
 
I know, but according to Brian, the Arduino pins that the Clock signals are assigned to pull the signal to 5 volts. His initial test worked, but he had a concern with the electronics in the readhead handling the higher voltage over a long period.
I'm not sure if you remember, but the original iGaging Absolute Origin scales don't have an external clock, the clock crystal resided in each of readheads and is in a normally high state and pulled low. I believe that's why each scale clock line is assigned its own pin on the Arduino. I think that's why he suggested the comparators, but I'll check into the LM3117's.
Unfortunately, I don't think Brian is on this forum as he could give a much better explanation than I can. You could email him if you'd like. I'm pretty confident with electrical, but much less so with electronics and tend to defer to his expertise.
I also have my own agenda in that it's a good excuse to start playing around with MSP Launchpad. Arduino seems to be easier platform for a beginner like me, but the MSP platform seems to be both cheaper and more flexible a platform. I think I remember Brian telling me you preferred it over Arduino as well.
Yes, I could just build a voltage divider circuit for each of the clock pins, but they do have to be 3 separate circuits in order to detect the clock cycles for each of the scales. Either way, he said the sketch would have to be tweaked depending on which way I decided to go.


I see... I haven't had a chance to look at his sketch yet (have been busy banging by head agains the wall working on the firmware update for the new Shahe scales).
This is more complicated than it needs to be. I would do the following:
1. Disable pull up resistors in the chip. I.e. leave the pins floating; if needed you can hard-wire unused pins to the round to avoid noise.
2. Add a +3V power supply (you will need this to power the scales). My choice would be the LM1117-3.3, but since the scales draw very little current, a voltage divider with 2K/3K resistors should work.
3. Pull up the lines to the scales Vcc using 20K (or even better, 47K) resistors

This will give you cleaner (more square) pulses. I don't have this scale, but the newer Absolute DRO+ you have to read on the raising edge and the data line goes up right before the clock line and raises very sharply. Comparator with built-in pull-up resistor slows down the raise time, possibly to the point where the data line might not go over the threshold fast enough.
If you *really* want to have an IC between the scales and the inputs, use a non-inverting buffer of some sorts. Those are purpose-built for this sort of thing and 3.3V to 5V ICs are very common.

If you go the comparator route you still have to power the scale and provide "virtual grounds" to the comparators, so you won't be saving any parts. Basically you will be building the circuit I linked in my previous post, except in your case you don't really need it.

As far as MSP430 vs. Arduino, I prefer MSP430 over Arduino because of the tooling. I use Code Composer studio with a proper FET, so I can do debug the code, halt the chip and inspect the registers, look at the memory, etc. MSP430 has more modern perhiperals as well, but the tradeoff is a HUGE learning curve. Unless you really want to invest a LOT of time into learning embedded programming in pretty low-level C, Arduino isn't such a bad option.

Hope this helps
Yuriy
Jimmy finally talked me into joining this forum, figured it would be best if I answered any questions directly.

Like Yuriy said, the Arduino has no problems whatsoever reading the 3.3V signal coming in from the scales. The problem is the clock line. In actuality, it isn't really a clock at all, it's the "doorbell" the read head uses to tell the display unit that a data bit is being sent. The display unit provides a 3V signal to the read head on the clock line. When the read head is sending a data bit, it pulls that voltage to ground. That signals the display unit to read the data line.
Since I wrote the sketch to have the Arduino supply this voltage, 5V is being supplied. The simplest solution is a voltage divider. I'm attaching a quick schematic of the divider. It's 2 resistors and a connection to ground. Easy stuff.
The sketch uses Arduino pins 6, 8, and A0 as the clock lines, so voltage dividers need to be placed on each of those 3 pins.

If you have any questions, ask! I'll get to them as soon as I can, but I can't promise when that will be.View attachment 286226
Hey Brian,
Good to see you here.
this makes sense. The "doorbell" line seems similar to the "Req" line use by Mitutoyo SPC scales, which is used by the host to request reading from the scale. On the newer absolute scales this line can be just pulled to the ground and the scale will send the position at about 50Hz.
Regards
Yuriy
 
Back
Top