mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Veränderbaren Wert (z.B. Spannung) auf einer LCD darstellen


Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte mir eine Spannung die über einen ADC gemessen wird auf einer 
LCD darstellen. Mit der ausgabe auf die RS 232 Funktioniert das schon 
mal.

Aber ich hab keine Ahnung wie ich den gemessenen Wert auf die LCD 
bringe.
Arbeite mit der Bibliothek von Peter Fleury. LCD wird im 4-Bit Modus 
angesteuert.

Wäre nett wenn ihr mir helfen könnt.

Autor: Michael B. (planlessmichi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Sprache? Welches Display?
Das hier schon gesehen: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:

> Aber ich hab keine Ahnung wie ich den gemessenen Wert auf die LCD
> bringe.

Im Prinzip aus deiner Sicht fast genauso, wie auf die UART.

> Arbeite mit der Bibliothek von Peter Fleury. LCD wird im 4-Bit Modus
> angesteuert.

Und?
Funktioniert das LCD grundsätzlich?
Sprich: Kannst du Texte aufs LCD ausgeben?

> Wäre nett wenn ihr mir helfen könnt.

Dazu müsste man erst mal wissen, welches genau dein Problem ist.
Wenn du Zahlen in Textform auf die UART ausgeben kannst, dann tauscht du 
die Ausgabefunktion gegen eine, die einen Text auf LCD ausgeben kann und 
... fertig.

Deine Frage ist irgendwie so: Ich bin es gewohnt, dass die Türschnalle 
an einer Tür auf der rechten Seite ist. Jetzt ist sie aber links! Hilfe, 
wie krieg ich die Tür auf?

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Programmiersprache ist C
und das Display ist ein 4 x 20 von AZ Displays

im Tutorial steht:

lcd_gotoxy(0,0); // LCD-Schreibzeiger positionieren
   char Buffer[20];
   itoa( Spannung, Buffer, 10 );
   lcd_puts( Buffer );

hab ich ausprobiert und funktioniert teilweise...

Sehe beim verstellen der Spannung nur 1 oder 2 oder 3 oder 3 oder 4... 
keine Kommazahl und dazu kann man die zahlen noch ned mal richtig lesen 
weil sie seher blass sind. Kontrasteinstellung ist in ordnung.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich kann einen Text auf das LCD ausgeben.
und auf die UART kann ich die Spannung darstellen (Hyper Terminal).

Funkioniert alles.

Nur wie kann ich nun diesen Variablen Wert auf das LCD darstellen?

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Kann es sein, das du die Ausgaben zu schnell hintereinander machst?
Zeig mal dein Programm.

Gruß
Joachim

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig mal das Programm, das du hast.

Dein flacher Kontrast klingt für mich nach einer Endlosschleife, in der 
das LCD laufend immer wieder gelöscht und neu beschrieben wird.

Und um die Kommazahlen musst du dich selbst kümmern, genauso wie du das 
bei einer UART auch müsstest.

Letztenendes kümmern sich sowohl UART als auch LCD nicht darum was sie 
anzeigen. Für die ist das einfach nur ein Text. Wie du den Text 
erzeugst, ist dein Bier.

Autor: Hans M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ahhh hab jetzt noch ne Wartezeit eingebaut jetzt funktionierts. Aber nur 
Ganze Zahlen und keine Kommazahl.
Das heist von 0-5V sehe ich nur 1,2,3,4

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:
> Ahhh hab jetzt noch ne Wartezeit eingebaut jetzt funktionierts.

Das war die falsche Lösung.

Stell dir vor, deine bessere Hälfte lässt dich die Zeitung lesen. Aber 
sie zeigt dir die Zeitungsseite nur 1 Sekunde lang, danach ist sie 
wieder weg. Ud das über einen Zeitraum von 2 Minuten. Immer: 1 Sekunde 
siehst du die Zeitung, 2 Sekunden siehst du sie nicht.
Da kann kein Mensch etwas lesen.
Genau das machst du aber mit dem clear Screen innerhalb der Schleife. 
Dein LCD flackert sich zu tode und wenn du schnell genug schauen 
könntest, würdest du sehen, dass der Text immer nur kurz aufleuchtet um 
gleich darauf wieder gelöscht zu werden.

Und die Lösung besteht jetzt nicht darin, die Zeit für das Anzeigen zu 
verlängern, sondern auf den clear Screen komplett zu verzichten. Die 
Devise heißt: neuer Text übermalt den vorher dort gestandenen alten 
Text. Und nicht: neuer Text wird hingemalt, indem zuerst der alte Text 
gelöscht wird.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie sieht die richtige aus?

Bei UART mach ich das so:

rprintfFloat(3,Spannung);

rprintfloat für kommazahl
der 3er für die Stellen

Wie sieht den der Befehl für die LCD aus?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:
> Und wie sieht die richtige aus?
>
> Bei UART mach ich das so:
>
> rprintfFloat(3,Spannung);
>
> rprintfloat für kommazahl
> der 3er für die Stellen
>
> Wie sieht den der Befehl für die LCD aus?

rprintfFloat ist kein 'Befehl' den dir C an sich zur Verfügung stellt, 
sondern deine UART Library. Dort kann man aber nachsehen, wie das dort 
gemacht wurde :-)

ABer seis drum.
Spannung ist ein float. itoa wandelt einen Integer nach ASCII. Darum 
auch das i in itoa. Und du wunderst dich jetzt wirklich, dass du keine 
Nachkommastellen bekommst?

Deine Hauptschleife könnte zb so aussehen
 while(1)
 {
   digitwert_ad2 = adc_read(2);

   Spannung = 5.0/1024 * digitwert_ad2;


   char Buffer[20];
   sprintf( Buffer, "Spg: %5.2f V", Spannung );

   lcd_gotoxy(0,0); // LCD-Schreibzeiger positionieren
   lcd_puts( Buffer );
  }

http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigung das ich kein C Profi bin...

Woher soll den ich wissen was itoa heisst das stand im Tutorial drin.. 
habs rauskopiert und einfach mal probiert.

Würde mir nun Bitte Bitte Bitte jemand sagen was ich schreiben muss 
damit ich den gemessenen wert (der 2 nachkommastellen haben soll) auf 
dem LCD erscheint.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:
> Entschuldigung das ich kein C Profi bin...
>
> Woher soll den ich wissen

Woher du das wissen sollst?

Aus deinem C-Buch!
Genau dafür sind die geschrieben: Dass Anfänger die Grundlagen erlernen 
können. Auch Profis haben damit angefangen C-Bücher zu lesen ehe sie 
Profis wurden. Genau deshalb sind sie heute Profis! Weil sie von der 
Pieke auf die Progammiersprache systematisch mit Hilfe von Literatur 
gelernt haben, anstelle sich Halbwissen in Foren zusammenzufragen.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Bilden erscheint eine Warnung:

../LCD_Test.c:55: warning: format '%5.2lf' expects type 'double', but 
argument 3 has type 'float'

Was heisst den das genau: "Spg: %5.2lf V"
Spg = Spannung
% wird für den "Platzhalter" stehen
aber das 5.21f?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:
> Entschuldigung das ich kein C Profi bin...
>
> Woher soll den ich wissen was itoa heisst das stand im Tutorial drin..
> habs rauskopiert und einfach mal probiert.
>
> Würde mir nun Bitte Bitte Bitte jemand sagen was ich schreiben muss
> damit ich den gemessenen wert (der 2 nachkommastellen haben soll) auf
> dem LCD erscheint.

Eine Beispielimplementierung hab ich dir ja schon gezeigt.
Aber das hier beachten:
http://www.mikrocontroller.net/articles/FAQ#Aktivi...

Anstelle von sprintf kann man auch dtostrf benutzen.

Am besten wäre allerdings der komplette Verzicht auf Floating Point 
Operationen. Wenn du dir statt Volt einfach Millivolt ausrechnen 
würdest, wäre es ganz leicht, nach der Tausenderstelle bei der Ausgabe 
ein , einzuschmuggeln. Dann steht am LCD auch wieder alles in Volt, aber 
du brauchst keine Floating Point Operationen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:
> Beim Bilden erscheint eine Warnung:
>
> ../LCD_Test.c:55: warning: format '%5.2lf' expects type 'double', but
> argument 3 has type 'float'

(Welcher Compiler ist das?)
Mach ein %...f da draus.

> Was heisst den das genau: "Spg: %5.2lf V"
> Spg = Spannung
> % wird für den "Platzhalter" stehen
> aber das 5.21f?

Guckst du hier
http://www.mikrocontroller.net/articles/FAQ#sprintf.28.29

Allerdings: Das ist die Kurzform!
Die Langform mit noch 100 mehr Möglichkeiten, was man mit dem 
Formatstring in sprintf oder printf anfangen kann, findest du in jedem 
C-Buch.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compiler ist WinAVR

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. schrieb:
> Compiler ist WinAVR

Dann kannst du die Warnung soweit ignorieren.
(Wundert mich, dass der gcc da überhaupt warnt. An dieser SChnittstelle 
werden double und float sowieso gleich behandelt)

Also:
Entweder du benutzt überall double anstelle von float
Oder du ersetzt das lf im Formatstring durch f

Dann sollte Ruhe sein.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also hab den Mega 32 grad geflasht und Funktioniert trotz der Warnung.

Vielen Dank!!!

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm jetzt funktionierts Plötzlich nicht mehr
jetzt steht nur noch Spannung: ? V da

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.