Arduino Multifunktionsanzeige mit zwei Displays

OP #4063316
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.
Angehängte Dateien:
#4063845
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);
OP #4064828
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.