www.mikrocontroller.net

Forum: Compiler & IDEs Werte richtig ins lcd bringen


Autor: S. W. (stew1337)
Datum:

Bewertung
0 lesenswert
nicht 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 );

Autor: dummy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit Division und Rest der Division.
Schau noch mal ins Mathebuch.

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
xtr=buffer;
xtr = ((long)buffer*5000)/1024;
utoa(xtr,Buffer,10);
lcd_goto(0,1);
if (xtr < 1000)
{
  lcd_write_s("0,");
  lcd_write_s(Buffer);
} else {
  lcd_write_c(Buffer[0]); // schreibt _ein_ zeichen
  lcd_write_c(',');
  lcd_write_s(&Buffer[1]);
}

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

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

Bewertung
0 lesenswert
nicht 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
  vorkomma = 4521 / 1000;
  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.
   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.

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.