PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimalzahl auf LCD ausgeben



DarkFire
08.10.2006, 11:28
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

darwin.nuernberg
08.10.2006, 11:37
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".

DarkFire
08.10.2006, 11:55
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?

darwin.nuernberg
08.10.2006, 12:26
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:


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

SprinterSB
08.10.2006, 12:42
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.

izaseba
08.10.2006, 13:24
Hallo,
wenn Du immer 2 Nachkommastellen hast, müßte das auch so gehen:



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