Stap 14: De DMM-software
Na het succesvol afronden van de vorige tests, werd de belangrijkste werkende DMM-software geschreven.
De code is gekoppeld de *. ZIP-bestand.
Ik zal slechts enkele hoofdfuncties uitleggen, de andere gewoon herhalen:
De functie voor voltmeter (bereik 0-100):
ongeldig V_100() {}
digitalWrite (v100, hoge);
LCD.Clear();
LCD.Print ("V-meter V = < 100V");
Serial.println ("* Voltmeter modus - bereik 0 - 100 V *");
lcd.setCursor (0, 1);
voltage_meas();
}
Sommige berichten op het scherm afgedrukt en roept de functie voltage_meas():
ongeldig voltage_meas() {}
acc_value = 0;
for (int i = 0; ik < = 15; i ++) {}
curr_value = analogRead(A0);
acc_value = acc_value + curr_value;
}
curr_value = int(acc_value/16);
Als (curr_value == 1023) {}
meas_overflow(); }
else {}
schakelaar (modus) {}
Case 1:
disp_res = (curr_value * leveren * 20) / 1024 * coeff_v100;
breken;
Case 2:
disp_res = (curr_value * leveren * 6) / 1024 * coeff_v30;
breken;
Case 3:
disp_res = (curr_value * leveren * 2) / 1024 * coeff_v10;
breken; }
LCD.Print ("V =");
LCD.Print (disp_res, 2);
LCD.Print ("V");
Serial.Print ("* V =");
Serial.Print (disp_res, 2);
Serial.println ("V");
delay(250);
}
}
, die 16 opeenvolgende monsters te nemen en
het gemiddelde van hen. Als het resultaat minder dan 1023 is, het het ADC woord omgezet in overeenkomstige waarde van de spanning en weergegeven op het scherm. Tijdens deze berekening worden aantal trimmen factoren toegevoegd. Eerste van hen is de gemeten voorontwerp voedingsspanning (het wordt gebruikt als referentie voor de omrekening van de AD), naar de tweede men probeert op te lossen de wanverhouding van de apparaten. Het ligt dicht bij 1,00, maar in sommige gevallen kan het verschillen van enkele procenten. Deze coëfficiënt is empirisch bepaald tijdens de tuning fase. Uitleg zal volgen.
Als het resultaat na de middelingstijd van de 16 monsters 1023 heet de "meas_overflow".
ongeldig meas_overflow() {}
lcd.setCursor (0, 1);
LCD.Print ('OVERFLOW!');
Serial.println ("* OVERLOOP!!! *");
lcd.setCursor (0, 1);
for (int i = 0; ik < = 101; i ++) {}
analogWrite (back_light, helderheid);
helderheid = helderheid + fadeAmount;
Als (helderheid == 255) {}
fadeAmount = - fadeAmount;
}
delay(15);
}
}
In dit voorbeeld wordt het rug-licht verschoten en er wordt een waarschuwing weergegeven.
Op de foto's kunnen worden gezien van de functionerende DMM in verschillende modi en functies.
P.S. Dankzij jfrontone, hebben we een mogelijk probleem gevonden in de code.
Het is in de procedure button_pressed() .
Als de toename MODE = modus ++; werkt niet (soms hangt dit op de microcontroller-chip of op de IDE-versie), kunt u ofwel modus = ++ modus; of MODE = modus + 1; . Tot nu toe niemand heeft gemeld over zulke werkstuk in de controlestructuur "voor" - bijvoorbeeld voor (int i = 0; ik < = 101; i ++)...