Forum: Compiler & IDEs Werte richtig ins lcd bringen


von S. W. (stew1337)


Lesenswert?

hallo ich habe ein programm geschrieben der einen spannungswert ins lcd 
brint

nun steht aber nicht z.b.  4,521 sondern 4521   wie bekomme ich das 
komma da rein  mit dem tutorial komme ich nicht zurecht   hier ein 
ausschnitt meines programmes   danke schon mal für eure hilfe





xtr=buffer;
xtr = ((long)buffer*5000)/1024;


utoa(xtr,Buffer,10);
lcd_goto(0,1);
lcd_write_s( Buffer );

von dummy (Gast)


Lesenswert?

Wie wärs mit Division und Rest der Division.
Schau noch mal ins Mathebuch.

von Jörg X. (Gast)


Lesenswert?

1
xtr=buffer;
2
xtr = ((long)buffer*5000)/1024;
3
utoa(xtr,Buffer,10);
4
lcd_goto(0,1);
5
if (xtr < 1000)
6
{
7
  lcd_write_s("0,");
8
  lcd_write_s(Buffer);
9
} else {
10
  lcd_write_c(Buffer[0]); // schreibt _ein_ zeichen
11
  lcd_write_c(',');
12
  lcd_write_s(&Buffer[1]);
13
}

... hat aber doch schon jemand in einem deiner Threads geschrieben...

von Karl H. (kbuchegg)


Lesenswert?

S. W. wrote:

> nun steht aber nicht z.b.  4,521 sondern 4521   wie bekomme ich das
> komma da rein  mit dem tutorial komme ich nicht zurecht   hier ein
> ausschnitt meines programmes   danke schon mal für eure hilfe

Offensichtlich benutzt du Fixpunkt Arithmetik und dein
Skalierfaktor ist 1000

4521 dividiert durch 1000 ergibt dir den Vorkommaanteil, nämlich 4
Der Rest, der bei der Division entsteht, ergibt den Nachkommaanteil,
nämlich 521

In C
1
  vorkomma = 4521 / 1000;
2
  nachkomma = 4521 % 1000;

(
  % ist in C der Modulo-Operator. Er gibt dir den Rest der bei
  einer Division entsteht.
)

Jetzt hast du aber das Problem, dass du beim Nachkommaanteil die
führenden Nullen nicht einfach unter den Tisch fallen lassen darfst.

  4050 % 1000 -> 50
Diese Zahl würde ansonsten als 4.50 angezeigt werden, anstelle von
4.050

Entweder du siehst dir also das Ergebnis des Divisionsrestes an und
entscheidest wieviele 0-en du nach dem Komma noch zusätzlich
einschieben musst oder du verwendest eine Funktion, die auch führende
Nullen erzeugen kann, wenn man sie dazu auffordert.
1
   sprintf( buffer, "%d,03d", xtr / 1000, xtr % 1000 );

würde das zb machen.
Ich sagte schon heute Nacht: Ohne Literatur wirst du mit deiner
C-Programmiererei nicht weit kommen. printf und Konsorten können
eine ganze Menge Dinge erledigen. Aber das kann dir niemand in ein
paar Forumspostings beibringen. Da wirst du wohl oder übel mal
die 10 oder 15 Seiten in einem Buch mal durcharbeiten müssen und
die entsprechenden Übungen machen müssen um zu wissen was genau
man mit printf und Konsorten gut erledigen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.