What's the model number of your HF digital caliper that your working with? I have a HF digital caliper also and have an Aruino Uno board on the way from Digi-Key. I'll hook it up to my oscilloscope and see what's going on.
(03-08-2015, 07:40 AM)chucketn Wrote: I'm using a HF cheap scale and an Arduino Uno. I am trying to get a display on the Serial Monitor of the Arduino IDE.
I am using the hookup and schematic from here: http://www.instructables.com/id/Reading-...duino-USB/
The sketch displays only one 0, but the caliper is powered and working using the led and resistor circuit shown there. I think the code listed there is for a different protocol.
I am not, nor do I pretend to be, a programmer and I did not stay at a Holiday Inn last night...
suggest that the instructables code is expecting to see the information protocol Yuri found coming from his HF calipers.
This leads me to believe that either (a) the level shifting bodge [his definition, not mine] from the instructables is not "level shifting" the inputs enough for your Arduino to read them or (b) the protocol being sent by your HF calipers is different than that sent by the instructables and Yuri's calipers.
To test (a) I would look thru the instructables code and see if the inputs are changing. Something like this might do it ... [note that I have note validated that this will even compile ... just that it looks nice :-}]
// Pin Declarations
int dataIn = 11;
int clockIn = 12;
void setup() {
// Pin Set Up
pinMode(dataIn, INPUT);
pinMode(clockIn, INPUT);
(03-09-2015, 06:00 AM)chucketn Wrote: I ran Arvid's code for a few minutes, and an occasional zero shows up in each output, but no discernible pattern.
Chuck
That suggests to me that the inputs are not changing. I would expect a random pattern of ones and zeros, especially on the clock line which appears to be high ... or 1 ... for relatively long periods of time ... possibly a full millisecond or more ... and will then go low ... or 0 ... for parts of a millisecond 24 times ... then go high again for a relatively long period.
When you say "occasional", I am assuming that is a zero no more than once or twice a second, which I would attribute to noise.
Another test would be to add the highlighted line of code to the original program:
if (lastClock == 1 && clock == 0){ out = digitalRead(dataIn)+digitalRead(dataIn)+digitalRead(dataIn); // Tripple sampling to remove glitches Serial.println(micros());
his will tell you how often the program detects a usable clock transition and therefore how often it is trying to read the information that is on the data line.
if (out > 1){ Serial.print("1"); } else{ Serial.print("0"); } Serial.print(","); time = micros(); } }
Give it another try and see what comes happens.
And I do agree with your assessment of the existing "level converter" as even the author of the instructable says "it is a bit of a bodge". I would not think that it would be a good long term solution ... may not even be a short term solution, depending on the individual IC that is being used ... and would seem to be very susceptible to noise in all cases.