www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit der Ausgabe einer Zahl am LCD


Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HI!

Ich habe wiedermal ein kleines Problem beim Programmieren. Und zwar 
übergebe ich meiner Funktion vier Werte und diese soll sie dann mehr 
oder weniger nur multiplizieren und das Ergebnis dann am LCD ausgeben.
Jedoch dürfte irgendwas bei der Rechnung passieren oder die Zahl einfach 
zu groß werden, was aber nicht sein dürfte. Alle Werte hab ich mit 444 
angenommen. Jeden Wert einzeln kann ich ausgegeben, dass heißt es kann 
lediglich an der Zeile mit der Rechnung oder beim umwandeln auf char ein 
Fehler sein.
In der Ausgabe steht dann statt der Zahl ein Fragezeichen.
void zeilenscan(int laengex, int laengey, int anfz, int endz)    //Steuert die zwei Motoren in einem Zeilenscannverfahren. Zeilen sind durch ez und iz vernderbar
{  
  int xz;  
  int d;
  int yz;
  float dauer;
  char buffer[20]="";
  lcd_puts("Dauer der \n");
  //dauer=laengex*laengey*(endz-anfz+1)/60;
  dauer=laengex*laengey;
  lcd_puts("Messung:");
  lcd_gotoxy(9,1);
  sprintf(buffer,"%d",dauer);
  lcd_puts(buffer);

Schon mal ein Dankeschön im Voraus für die Hilfen!

Lg Oliver

Autor: Edi R. (edi_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich gehe mal davon aus, dass zuerst laengex*laengey als int ausgerechnet 
wird, was einen Überlauf ergibt, und das (falsche) Ergebnis wird dann in 
ein float konvertiert.

Ach ja: Im sprintf - bedeutet %d nicht eine Ganzzahl? "dauer" ist aber 
ein float.

Summa summarum: Probier's einfach mal mit einem anderen "dauer", z. B.:

long int dauer;

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

pff, bei der Festkommaarithmetik blick ich nicht ganz durch :-(
Gibt es da keine einfachere Lösung?
Außerdem ist das ja alles unnötiger Quellcode und kostet nur 
Performance.

Lg

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Außerdem ist das ja alles unnötiger Quellcode und kostet nur
>Performance.

ROFL;) Das sagt jemand der float benutzt.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver Kra schrieb:
> float dauer;
[..]
> sprintf(buffer,"%d",dauer);

Da passt was mit den Typen nicht zusammen, 'dauer' ist float, '%d' 
erwartet einen int-Artigen.

HTH

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..ich muss schon wieder die Ingrid machen:
Ein anständiger(tm) Compiler meckert die fehlerhaften Typen übrigens 
sogar an (-Wall regelt :-) :
$ avr-gcc -Wall -c main.c -o main.o
main.c: In function ‘zeilenscan’:
main.c:7: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘float’

HTH

Autor: Oliver Kra (Firma: TGM) (oliver1990)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dauer ist jetzt ein int.
Der Fehler ist nur, dass, wenn die Zahl größer als 500 wird der Datentyp 
zu klein werd oder so und dann wird irgendwas angezeigt.
Aber die Zahlen werden ohnehin nicht all zu groß und bis zur maximalen 
Größe ist es kein großes Problem. Schöner wäre es trotzdem, wenn es 
einwandfrei funkt :-( Das einzige was er noch hat, ist, dass er immer 
abrundet, aber das macht auch nichts.

lg

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.