Paso 14: El DMM software
Tras éxito de las pruebas anteriores, el principal software DMM de trabajo fue escrito.
El código se adjunta en el *. Archivo ZIP.
Voy a explicar sólo algunas funciones principales, otra simplemente a repetir:
La función de voltímetro (rango 0-100 v):
void V_100() {}
digitalWrite (v100, HIGH);
LCD.Clear();
LCD.Print ("V V-meter = < 100V");
Serial.println ("* modo voltímetro - gama 0 - 100 V *");
lcd.setCursor (0, 1);
voltage_meas();
}
imprime algunos mensajes en la pantalla y llama a la función voltage_meas():
void voltage_meas() {}
acc_value = 0;
para (int i = 0; i < = 15; i ++) {}
curr_value = analogRead(A0);
acc_value = acc_value + curr_value;
}
curr_value = int(acc_value/16);
Si (curr_value == 1023) {}
meas_overflow(); }
Else {}
interruptor (modo) {}
caso 1:
disp_res = (curr_value * fuente * 20) / 1024 * coeff_v100;
rotura;
caso 2:
disp_res = (curr_value * fuente * 6) / 1024 * coeff_v30;
rotura;
caso 3:
disp_res = (curr_value * fuente * 2) / 1024 * coeff_v10;
rotura; }
LCD.Print ("V =");
LCD.Print (disp_res, 2);
LCD.Print ("V");
Serial.Print ("* V =");
Serial.Print (disp_res, 2);
Serial.println ("V");
Delay(250);
}
}
, que toma de 16 muestras consecutivas y
los promedio de. Si el resultado es menos de 1023, la palabra ADC se convierte en valor de voltaje correspondiente y lo mostrará en la pantalla. En este cálculo, se agregan algunos factores de recorte. Primera de ellas es la tensión medida preliminar (se utiliza como referencia para la conversión AD), el segundo se intenta corregir el desajuste de los dispositivos. Está cerca de 1.00, pero en algunos casos pueden diferir algunos porcentajes. Este coeficiente se determina empíricamente durante la fase de ajuste. Explicación seguirá.
Si el resultado después de la media de las 16 muestras es 1023 se llama "meas_overflow".
void meas_overflow() {}
lcd.setCursor (0, 1);
LCD.Print ("desbordamiento!!!");
Serial.println ("* desbordamiento!!!!!! *");
lcd.setCursor (0, 1);
para (int i = 0; i < = 101; i ++) {}
analogWrite (back_light, brillo);
brillo brillo = fadeAmount;
Si (brillo == 255) {}
fadeAmount = - fadeAmount;
}
Delay(15);
}
}
En este procedimiento la luz trasera se desvaneció y se muestra una advertencia.
En las fotos se puede ver el funcionamiento DMM en diferentes modos y funciones.
P.S. Gracias a jfrontone, hemos encontrado un posible problema en el código.
Es en el procedimiento de button_pressed() .
Si el incremento de MODE = modo ++; no funciona (a veces esto depende el chip microcontrolador o en la versión IDE), puede escribir ya sea modo = ++ modo; o MODE = modo + 1; . Hasta ahora nadie ha informado sobre tal problema en la estructura de control "para" - por ejemplo para (int i = 0; i < = 101; i ++)...