www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Temperaturwerte auf LCD anzeigen Ausgabeprobleme!


Autor: Christian Hohmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute brauch nochmal eine klitzkleine Hilfestellung.
Also empfange Temperaturwerte über die Serielle, welche ich in einem 
Array abspeichere.
Nun möchte ich mir die Werte auf einem Display anzeigen lassen.
Leider Zeigt er mir die Werte als Ascii an, möchte sie aber als Decimal 
dargestellt haben.
Wie geht das nun richtig, hab schon mehrere Sachen durchprobiert.
Hier mal mein Quellcode
int Temp;
  int h =0;
  int Anzeige =0;
    unsigned char Nutzdaten[60];
.
.
.
          else
          {
           if(Anzeige ==0)
           {
             lcd_clear();
             lcd_set_cursor(0,LINE0);
             lcd_puts(small_font,"Status:");
             lcd_set_cursor(0,LINE1);
             lcd_puts(small_font,"Kesseltemp.:");
             lcd_set_cursor(0,LINE2);
             lcd_puts(small_font,"Boilertemp.:");
             lcd_set_cursor(0,LINE3);
             lcd_puts(small_font,"Puffertemp.:");
             Anzeige = 1;
           }
           lcd_set_cursor(100,LINE0);
           Temp = atoi(Nutzdaten[1]);
           lcd_putc(small_font,Temp);
           lcd_set_cursor(100,LINE1);
           Temp = atoi(Nutzdaten[7]);
           lcd_putc(small_font,Temp);
           lcd_set_cursor(100,LINE2);
           Temp = Nutzdaten[33];
           lcd_putc(small_font,Temp);
           lcd_set_cursor(100,LINE3);
           Temp = Nutzdaten[29];
           lcd_putc(small_font,Temp);
          }
        //Anzeige Ende

Ich werd da warscheinlich nicht mit Putc arbeiten können da er mir da ja 
immer nur eine zahl schreiben wird, aber die Tempwerte sind ja 2 bis 3 
Stellig also entweder ne Schleife mit Putc oder wie beim Text puts.
Aber weis ned wie ich da jetzt rangehen soll.
Könnt ihr mir nochmal helfen Bitte?

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
char temp[7];

itoa(Nutzdaten[1],temp,10);
lcd_puts(small_font,temp);

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

wenn du die Temperaturwerte in Nutzdaten[] hintereinander abgespeichert 
hast, mußt du erst die Werte in eine Hilfsvariable zB. s_Temp[7] 
zeichenweise übertragen. Dann kannst du s_Temp mit lcd_puts() ausgeben.
Das atoi() kannst du dir sparen, weil die Temperatur ja schon als 
Zeichenkette vorliegt.
Evtl. kannst du die Ausgabe noch formatieren mit sprintf() - das braucht 
aber viel Speicher.

Gruß Micha

Autor: Chris Tian (chris0086)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten.
Es funktioniert schonmal ein wenig aber ich muss auch noch die Werte 
durch 2 teilen damit sie richtig werden(ist leider so)
bis jetzt hab ich :
lcd_set_cursor(100,LINE0);
           itoa(Nutzdaten[1],Temp,10);
           lcd_puts(small_font,Temp);
           lcd_set_cursor(100,LINE1);
           itoa(Nutzdaten[7],Temp,10);
           lcd_puts(small_font,Temp);
           lcd_set_cursor(100,LINE2);
           itoa(Nutzdaten[33],Temp,10);
            lcd_puts(small_font,Temp);
           lcd_set_cursor(100,LINE3);
           itoa(Nutzdaten[29],Temp,10);
           lcd_puts(small_font,Temp);
Wie kann ich jetzt noch die Werte durch 2 teilen und dann anzeigen?

Autor: Chris Tian (chris0086)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ich auch noch nicht ganz verstehe : warum ist das Array Temp 7 
Felder groß?

Noch was auf dem LCD wird hinter jedem Wert noch eine weitere Zahl 
angezeigt, wo kommt die her?

Autor: Christian Hohmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ich auch noch nicht ganz verstehe : warum ist das Array Temp 7
Felder groß?

Noch was auf dem LCD wird hinter jedem Wert noch eine weitere Zahl
angezeigt, wo kommt die her?

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einmal reicht.

Christian Hohmann schrieb:
> was ich auch noch nicht ganz verstehe : warum ist das Array Temp 7
> Felder groß?
Wahrscheinlich um ein komplettes Int plus Stringende als Text aufnehmen 
zu können.

> Noch was auf dem LCD wird hinter jedem Wert noch eine weitere Zahl
> angezeigt, wo kommt die her?

Ich verstehe noch nicht, was genau in Nutzdaten abgelegt ist. Laut 
Variablendeklararion ist es ein String mit 59 Zeichen Länge.

Nutzdaten[33] ist das 34. Char (= 8 Bit) in diesem Array.

itoa wandelt aber einen Int in einen String. Ich würde jetzt eine 
Warnung erwarten, wenn ein Char anstelle eines Int übergeben wird. 
Könnte aber mit interner Typenwandlung auch so funktionieren. In Temp 
werden dann die Zahlen 0..255 (oder -128..127) landen, welche dann auch 
angezeigt werden.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Hohmann schrieb:
> Danke für die Antworten.
> Es funktioniert schonmal ein wenig aber ich muss auch noch die Werte
> durch 2 teilen damit sie richtig werden(ist leider so)
Wenn Nutzdaten[33] als Char, den Wert * 2 enthält, dann folgendermaßen:

itoa(Nutzdaten[1] >> 1,Temp,10);

Autor: Der verrückte Professor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich Arbeite gerade an etwas ganz ähnlichem...

Schön dass andere auch noch die HZ- Temperaturen iteressiert...


Nur mach ich noch ne übertragung mir tein, so dass mein Display im Fluhr 
oben im Wohnraum sitzt...

Autor: Christian Hohmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das machts bei mir auch aber läuf dann über KNX :-)
Also in Nutzdaten[...] steht imer ein Wert z.Bsp: Hex 38 , davon will 
ich den Decimal Wert angezeigt bekommen also 56 bzw. 28 wenn man noch 
durch zwei teielt. mehr steht da nicht drin also auch kein Endzeichen 
oder sowas

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.