Pregunta facil...leen mal los analog pins??

Hola a todos, he perdido muchas horas peleando con un proyecto y creo que todas la lecturas estan mal porque los analog pins de mi arduino estan estropeados.

Me muestran esto, estando la placa sin nada conectado, solo el USB:

high
A0 999.00 A1 997.00 A2 41.00 A3 995.00 A4 988.00 A5 988.00
LOW
A0 872.00 A1 767.00 A2 41.00 A3 127.00 A4 988.00 A5 987.00

y esto conectado el negativo a cada uno de los analog pins:

LOW
A0 0.00 A1 0.00 A2 30.00 A3 0.00 A4 975.00 A5 971.00

creo que los unicos que funcionan son A0,A1 y A3.

que pensais?

puedo cambiar el chip por uno nuevo y meterle el bootloader facilmente? solucionaria algo?

ah y otra cosa, cual es la web mas recomendada para comprar arduinos y placas sensores para arduino? con el menor gasto de envio posible.
muchas gracias

Muy buenas,
eso es normal si la alimentación se hace por USB o con una fuente no estabilizada, vamos que no sea conmutada.
Prueba a darle tensión con una bateria o tensión conocida, no tendras ese problema.

Buenas tocayo!

tengo el arduino conectado con una fuente de alimentación externa.

ademas, porque hay 3 pines que muestran lo que toca, y los demas "haciendo lo mismo" muestran valores intermedios?

si conecto 5v a los pines analogicos, 3 de ellos muestran 1023 (como toca) y el resto muestra numeros intermedios. idem conectando a negativo da 0.

no es muy normal,no?

En el blog de Adafruit comentan algo sobre esto, de ahí enlazan a su foro (Problem reading two sensors with analogRead() - adafruit industries) y dicen:

The problem is that the Atmega on the Arduino has one ADC that is multiplexed for all the analog pins.
When you do an analogRead(), a multiplexer connects the pin you are reading to the ADC. This works fine for low impedance voltage sources.
It takes time for a high impedance sensor like your temperature sensor to change the voltage at the ADC after this switch of pins. Temperature sensors must use low power and thus be high impedance to avoid IR heating.
Try the following:

      analogRead(5);
      delay(10);
      nTemp = analogRead(5) * 5000L / 1024L  / 10;

The first analogRead(5) will switch the pin to the ADC. The delay will allow the voltage at the ADC to stabilize and the second analogRead(5) should get a stable value.

Traducido: haz dos lecturas por puerto y un delay entre ambas, el valor que debes quedarte es el de la segunda.