Today I bought an LM35 temp sensor, which I tested connected directly to the Uno (5v, Gnd, A0) and temps read within a degree of my Fluke with thermocouple. As we know, the formula for temp in C from an LM35 is, near as dammit, analog reading / 2 , and I was getting raw readings as expected of 55-60 for temps in high 20s. (It's summer here..... 8)) Voltages measured at about 250-300 mV as expected for the LM35's 10mV / C.
So far, so good....
I also bought an Ethernet shield, Wiznet 5100 based but it's not the official Arduino product; it's a "generic" and I can't see a makers name. Being a shield, A0 is still A0, it's just on a header on the top of the Ethernet shield, pinned through to the Uno underneath. But all of a sudden (cue dramatix sfx.....) the raw readings were in the 800s for temps in the 400s.
Voltages read to match: 4v odd, not down in the 100s of mV. Disconnected the LM35 sense line, and it was correctly putting out high 200s of mV as expected for high 20s temps.
I loaded the "bare minimum" sketch and read the voltages on the A0-5 pins on the shield header: A0 and A1 read up near 5, the others were ~0. Seems the shield is forcing those 2 pins high somehow.
I re-coded the sketch to use A5, and readings dropped to high 50s for temps in high 20s and volts back to high 200s of mV.
Looking at the traces on the shield, I "think" there's a trace (my eyes are getting old) from at least A0, no idea where it goes. My understanding would be that A0 is simply pinned through to AO on the uC underneath.
Has anybody had experience with a generic Wiznet e'net shield where the A0 and A1 pins are high enough to overwhelm the sensor and stay high when read?