-         

Ergebnis 1 bis 6 von 6

Thema: Dezimalzahl auf LCD ausgeben

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.01.2004
    Ort
    Salzburg
    Beiträge
    46

    Dezimalzahl auf LCD ausgeben

    Anzeige

    Hallo, ich habe folgendes Problem:

    Ich messe mit meinem µC einige Werte mittels ADC.
    Diese speichere ich dann als 16bit Integer zur weiteren Verarbeitung.
    Da ich nicht mit Fließkommazahlen rechnen will, mache ich es einfach folgendermaßen:
    Ich messe z.b. eine Spannung von 20,56V, diesen Wert speichere ich dann aber als 2056 in einer Integer Variablen.
    Das funktioniert für meine Berechnungen ohne Probleme, da ich die Werte immer so speichere, dass ich genau weiß, wie viele Nachkommestellen diese eigentlich haben.

    Nur bei der Ausgabe auf meinem LCD Display komme ich nicht weiter. Ich verwende die Library von P. Fleury und möchte die Zahlen gerne mit dem , an der richtigen Stelle ausgeben.

    Kann mir jemand einen Tipp geben, wie ich die Zahlen als String am einfachsten so formatieren kann, dass ich sowohl 156 als 1,56V, 3004 als 30,04V und 45663 als 456,63V ausgeben kann?

    Ich glaube ich denke wieder mal einfach zu kompliziert.

    Danke im voraus für eure Hilfe!

    Chris

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    53
    Beiträge
    1.305
    Blog-Einträge
    1
    Es gibt doch eine Funktion, mit welcher ein Wert in Text (String oder meinetwegen auch Char-Array) umgewandelt wird, dies kann dann auf das LCD gesendet werden.

    Ich bin jetzt nicht der große C spezialist (ich liebe Bascom), daher bekommst Du keinen Beispielcode von mir.

    Den String kannst Du dann auch noch "formatieren".
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.01.2004
    Ort
    Salzburg
    Beiträge
    46
    Ja, es gibt eine Funktion, die Integer Werte in Strings bzw. Char-Arrays umwandelt.
    Dies macht die Funktion itoa.
    Nur wenn ich einen meiner Werte mit dieser Funktion umwandle habe ich z.b. bei dem Wert 3004 nicht 30,04 sondern 3004 am Display.
    Mir geht es ja primär um die richtige Formatierung des String.

    Kann man da vielleicht mit sprintf etwas machen?

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von darwin.nuernberg
    Registriert seit
    08.08.2004
    Ort
    A, A
    Alter
    53
    Beiträge
    1.305
    Blog-Einträge
    1
    Na da Du ja immer einen zweistellige Nachkommazahl hast....
    Zerlege doch den String und baue dann ein Komma ein.

    In Bascom könnte das so aussehen:
    Code:
    Dim I As Integer
    Dim Kommastelle As Integer
    Dim S1 As String * 8
    Dim S2 As String * 8
    Dim Slaenge As Integer
    
    I = 3001
    
    
    S1 = Str(i)                  ' Wandelt den Wert in einen String
    Slaenge = Len(s1)            ' ermittelt die Länge des Strings
    Kommastelle = Slaenge - 2    ' ermittelt die Kommastelle
    
    S2 = Left(s1 , Kommastelle)  ' Neuer String mit den Vorkomma-Wert
    S2 = S2 + ","                ' das Komma setzten
    S2 = S2 + Right(s1 , 2)      ' und den Rest (Nachkomma)
    Print I                      ' ausgeben (vorher)
    Print S2                     ' ausgeben (nachher)
    
    
    End
    
    
    
    ' ********* AUSGABE : ********* 
    ' 3001
    ' 30,01
    Zugegeben etwas lang, aber ich will es anschaulich machen,
    kann man natürlich auch etwas kürzer schreiben und
    in C schaut es sowiso toal anders aus.

    Ich hoffe du kannst es adaptieren
    Gruss
    Darwin (meine Projekte sind auf meiner Pinnwand zu finden)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Du macht aus dem int 2 Stück:

    unsigned int vorkomma = wert / 100;
    unsigned int nachkomma = wert % 100;

    Das kannst du in Strings umwandeln. Bei der Ausgabe von nachkomma musst du dafür sorgen, daß bei Werten < 10 eine führende 0 ausgegeben wird, also immer 2-stellig ausgeben.
    Disclaimer: none. Sue me.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    46
    Beiträge
    2.236
    Hallo,
    wenn Du immer 2 Nachkommastellen hast, müßte das auch so gehen:

    Code:
    char puffer[5];
    uint8_t a;
    itoa(deinwert,puffer,10);
    for (i=strlen(puffer);i>=0;i--) {
      if (i == 2) {
        lcd_putc(',');
        continue;
      }
      lcd_putc(*puffer);
      puffer++;
    }
    Habe gerade so zusammengetipt, hoffe das es so geht...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •