Forum: Projekte & Code Arduino Multifunktionsanzeige mit zwei Displays


von Gerald R. (visitor)


Angehängte Dateien:

Lesenswert?

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.

von Eric B. (beric)


Lesenswert?

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
von Gerald R. (visitor)


Lesenswert?

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.

von Ralf D. (rad)


Lesenswert?

Gerald R. schrieb:
> Wie kann man die Auflösung der Analogread Werte mit oversampling
> erhöhen?

siehe http://en.wikipedia.org/wiki/Oversampling#Resolution

von Joachim B. (jar)


Lesenswert?

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
Noch kein Account? Hier anmelden.