Arduino Mega 2560 - Valores fantasma en pines analógicos

1

Una vez más, necesito su ayuda ... Tengo el Arduino en funcionamiento y leo 2 sondas de temperatura externas.

Estoy utilizando una conexión a tierra común (se intentó el mismo resultado por separado) y el Pin analógico 0 (A0) con 1 sonda y la segunda sonda conectada al Pin analógico 16 (A15).

Estoy mostrando la salida correctamente en la pantalla de serie, pero como la tengo en cada uno de los 16 pines analógicos, muestra un valor para esos pines a los que no hay nada conectado.

En otros idiomas, siempre debe inicializar todas las variables, entradas y amp; salidas ... es lo mismo para el Arduino y, de ser así, cuál es el método correcto para inicializar o configurar los pines analógicos antes de leer.

No te rías del código ... ;-)

void setup() {
Serial.begin(9600);
}

void loop() {
  for(int I=0; I < 16; I++){
  int sensorValue = analogRead(I);    
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0) - 0.04;

  Serial.print("Address = ");
  Serial.print(I);
  Serial.print(" ");
  Serial.print(voltage);
  Serial.println();
  delay(5000);  
}
}

La salida en la pantalla es: -

Dirección = 0 2.01 Dirección = 1 2.09 Dirección = 3 1.97 ...... Hasta el último pin.

Sólo los pines A0 y amp; A15 debería tener valores.

Muchas gracias de nuevo ... Marca

    
pregunta Mark Fellowes

3 respuestas

2

Otro elemento a tener en cuenta, dependiendo de sus fuentes analógicas, el cambio rápido entre ellos con analogRead tendrá algo de ruido. Si bien hay (6? 16?) Pines de entrada analógica, solo hay 1 ADC que está muxed entre los pines. Cuando el mux cambia con una fuente de alta impedancia, el voltaje tardará en estabilizarse. El consejo que siempre he visto es usar dos cuentas analógicas; el primero en cambiar el mux, y dar tiempo para que se estabilice el voltaje, el segundo como la lectura real.

Los voltajes leídos en los pines 1-14, asumiendo que de otra manera están desconectados, probablemente estén sesgados por los voltajes aplicados en 0 y 15 (todo está cerca de los 2 V en el pin 0). Si las entradas estaban conectadas a tierra o voltaje (digitalWrite (HIGH) normalmente enciende una resistencia interna), debería verlas estabilizadas a 5V.

    
respondido por el CoderTao
2

Es bastante normal que los pines ADC desconectados que flotan produzcan resultados aleatorios, por lo que probablemente esté buscando un problema que no existe. ¿Las lecturas de los canales reales utilizados se ven bien? En lugar de recorrer todo el lote, tal vez intente algo como lo siguiente, que no está probado porque no tengo cargado el IDE de Arduino:

#define SENSOR_COUNT 2
const int analog_pins[SENSOR_COUNT] = {0, 15};

void loop() {
   for(int I=0; I < SENSOR_COUNT; I++){
      int sensorValue = analogRead(analog_pins[I]);    
      float voltage = sensorValue * (5.0 / 1023.0) - 0.04;
      Serial.print("Address = ");
      Serial.print(I);
      Serial.print(" ");
      Serial.print(voltage);
      Serial.println();
      delay(5000);  
    }
}

Si los canales en los que está interesado no se ven bien, tal vez la impedancia de entrada sea demasiado alta, intente algo por debajo de 10 K, lo que creo que es la recomendación habitual para la mayoría de las piezas de AVR. Si tiene una impedancia más alta y una frecuencia de muestreo baja, probablemente podría hacer dos lecturas seguidas para que el MUX analógico se haya mantenido estable durante un tiempo sin tener en cuenta la primera lectura:

analogRead(analog_pins[I]);
delay(1000);
int sensorValue = analogRead(analog_pins[I]);
    
respondido por el PeterJ
1

Cita de aquí

  

La hoja de datos de Atmega también advierte contra el cambio de pines analógicos en   proximidad temporal cercana para hacer lecturas A / D (analógica, lectura) en otros   pines analógicos. Esto puede causar ruido eléctrico e introducir jitter en   El sistema analógico. Puede ser deseable, después de manipular los pines analógicos.   (en modo digital), para agregar un breve retraso antes de usar analogRead () para   leer otros pines analógicos.

Como dice CoderTao: intente conectar a tierra los pines no utilizados.

La similitud en los valores leídos de los pines no utilizados a los valores de sus pines usados es un síntoma de multiplexar varias entradas analógicas a la entrada de un ADC. Tiene un amplificador de muestra y retención que "retendrá" el voltaje de An incluso cuando se lee An + 1 A MENOS QUE la entrada en An + 1 fuerce un nuevo voltaje. La fuerza toma unos pocos microsegundos y tener una entrada flotante no fuerza un cambio.

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas