Ich habe mir mit einem Arduino Mega 2560 und 2 Stück 4x20 LC Displays eine Multifunktionsanzeige gebastelt, die ich für mein neues Labornetzteil verwende. Die Displays hängen beide am selben I2C Bus mit unterschiedlichen Adressen. Der Grund warum ich das hier veröffentliche waren die viele offenen Fragen auf die ich keine klaren antworten im Netz gefunden habe: Wie kann man die Auflösung der Analogread Werte mit oversampling erhöhen? Wie kann man zwei I2C Displays am gleichen Bus betreiben? Wie kann man Werte höher als 255 im EEPROM speichern und auslesen? Wie kann man sich ändernde Werte zwischen 0,00 und 30,00 so schreiben dass das Komma bleibt wo es ist? Wie kann man Nachkomma stellen von float Werten in der Ausgabe am Display reduzieren? Folgende Anzeigen habe ich momentan eingebaut: 4x Spannung 4x Strom 4x Leistung 3x Widerstand des Verbrauchers 1x Abgegebene mAh für den USB Lader 3x Temperaturbalken für Kühlkörper der Leistungstransistoren 3x PWM Lüftersteuerung abhängig von der Temperatur der Kühlkörper Ich habe den Code so übersichtlich wie möglich aufgeteilt und nach bestem Wissen und Gewissen dokumentiert. So sollte jeder Anfänger mit Grundkenntnissen meine Wege ans Ziel verfolgen können. Kalibrieren muss man die Anzeigen natürlich noch nach seinen eigenen Bedürfnissen. Auch die Wahl der Referenzspannung für Analogread steht jedem frei. Ich habe hier default (5V) genommen weil das Arduino von einem ATX Netzteil versorgt wird und die Genauigkeit für mich ausreichend ist. Ausgenommen des USB Laders und den Temperatursensoren habe ich noch nichts in Betrieb. PWM duty könnte man natürlich auch aus dem Temperaturwert errechnen anstelle neu aszulesen und zu rechnen. Alle Werte für Spannung und Strom werden 20x ausgelesen und der Mittelwert gebildet. Verwendete libs: LiquidCrystal Time eRCaGuy_analogReadXXbit-master http://www.electricrcaircraftguy.com/2014/05/using-arduino-unos-built-in-16-bit-adc.html?showComment=1422896156611#.VQ_lKU3k0yM Sollte sich jemand die Mühe geben den Code anzusehen bin ich natürlich für Anregungen dankbar.
Gerald R. schrieb: > Wie kann man zwei I2C Displays am gleichen Bus betreiben? Indem man den Displays unerschiedliche IDs gibt. > Wie kann man Werte höher als 255 im EEPROM speichern und auslesen? Indem man die Werte in einzelne Bytes zerlegt und die dann ins EEPROM schreibt. > Wie kann man sich ändernde Werte zwischen 0,00 und 30,00 so schreiben > dass das Komma bleibt wo es ist? > Wie kann man Nachkomma stellen von float Werten in der Ausgabe am > Display reduzieren?
1 | printf("%05.2f", fValue); |
:
Bearbeitet durch User
Hallo Eric! Danke für deine Antwort. Ich habe es nicht geschafft mit printf auf das LCD zu schreiben und habe es deshalb anders gelöst. Ich setzte eine gewisse Anzahl von Leerzeichen vor die Zahl wenn der Wert weniger Stellen hat als der maximal anzeigbare.
1 | lcd1.setCursor(0, 2); |
2 | if (power0 < 10) |
3 | lcd1.print(" "); |
4 | if (power0 < 100) |
5 | lcd1.print(" "); |
6 | lcd1.print(power0, 2); |
Das ist vermutlich nicht schön, aber wie gesagt ich habe keinen anderen Weg gefunden.
Gerald R. schrieb: > Wie kann man die Auflösung der Analogread Werte mit oversampling > erhöhen? siehe http://en.wikipedia.org/wiki/Oversampling#Resolution
Gerald R. schrieb: > Ich habe es nicht geschafft mit printf auf das LCD zu schreiben verstehe ich, geht halt nicht immer, dann ginge sprintf in einen String und dann an das LCD wie du es gemacht hast geht auch, mache ich ähnlich
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.