Forum: Mikrocontroller und Digitale Elektronik Taschen rechner mit ATMega32.Nachkommazahlen. C-Programmierung


von Patrick H. (absynthe)


Lesenswert?

Hallihallo.
Und zwar gehts um folgendes: Wir haben von der Schule ein kleines 
Programmierboard bekommen mit einem ATMega32, 16*2 LCD Display und 3*4 
Matrix Keypad, auf dem wir C Programmieren üben sollen.
Aufgabe war es einen Taschenrechner zu programmieren. Das klappt soweit 
ganz gut. Man wählt zuerst seine gewünschte Rechenoperation 
aus(Addition, Subtraktion, Multiplikation oder Division) und gibt dann 
die 2 gewünschten Zahlen ein. Diese Zahlen werden (im Moment noch) als 
Int abgespeichert. Das Ergebnis ebenso.
Zum anzeigen habe ich mir eine Funktion geschrieben, die mir Int zahlen 
am LCD ausgibt.
Aber ich komme auf keine Lösung für eine Funktion, die mir floatzahlen 
am LCD ausgibt. Wäre sehr nett wenn mir da einer helfen könnte.

von Peter II (Gast)


Lesenswert?

Patrick Hoefler schrieb:
> Aber ich komme auf keine Lösung für eine Funktion, die mir floatzahlen
> am LCD ausgibt. Wäre sehr nett wenn mir da einer helfen könnte.

wobei bist du genau gescheitert?

man kann z.b. mit printf float in einen String umwandeln.

von Julz (Gast)


Lesenswert?

Hallo, schau die mal die Funktion itoa() an :-)
Oder möchtest du dir selbst eine schreiben?

http://www.mikrocontroller.net/articles/FAQ#itoa.28.29_.28utoa.28.29.2C_ltoa.28.29.2C_ultoa.28.29.2C_ftoa.28.29_.29

sollte dir aber weiterhelfen

von Helmut S. (helmuts)


Lesenswert?

Da nimmt man doch besser sprintf() anstatt itoa().

von P. M. (o-o)


Lesenswert?

Patrick Hoefler schrieb:
> Zum anzeigen habe ich mir eine Funktion geschrieben, die mir Int zahlen
> am LCD ausgibt.
> Aber ich komme auf keine Lösung für eine Funktion, die mir floatzahlen
> am LCD ausgibt. Wäre sehr nett wenn mir da einer helfen könnte.

Kannst du kurz den Ansatz zeigen, den du wählst? Es gibt da mehrere 
Möglichkeiten: Man verwendet eingebaute int/float Typen und eingebaute 
Funktionen printf(...), itoa(...) etc.

Für einen Taschenrechner auf einem Mikrocontroller wäre es aber auch 
denkbar, die Datentypen und Funktionen selbst zu bauen, im Stile des 
schriftlichen Rechnens. Dann ist man nicht auf Float-Bibliotheken 
angewiesen, die teilweise berüchtigt sind für ihren Speicherbedarf und 
prinzipbedingt Rundungsfehler generieren.

von Patrick H. (absynthe)


Lesenswert?

hmm zuerst wollte ich mir ja selbst eine schreiben, aber ich hab keine 
ideen wie ich das bewerkstelligen soll.

ich komm einfach nicht drauf wie ich die nachkommastelle verarbeiten 
soll. mit printf haben wir bisher nicht gearbeitet, ich weiss nichtmal 
ob das n befehl ist, den ich benutzen kann bei dem teil was wir da 
haben.
lcd_puts("TEXT"); //Zur ausgabe von strings am lcd
lcd_putc('T'); //Zur Ausgabe von Zeichen am LCD
lcd_put_number(zahl); //Zur Ausgabe von long int zahlen am lcd

ich schau mir mal die inoa funktion an, vll klappts ja damit.

danke für die hilfe :)

von Helmut S. (helmuts)


Lesenswert?

Warum willst du itoa()? Das ist für int -> String.

Tipp einfach das Beispiel mit sprintf() von dem Link ab. Dein Compiler 
wird dir dann schon sagen falls er die Funktion nicht kennt.

http://www.mikrocontroller.net/articles/FAQ#itoa.28.29_.28utoa.28.29.2C_ltoa.28.29.2C_ultoa.28.29.2C_ftoa.28.29_.29

: Bearbeitet durch User
von Patrick H. (absynthe)


Lesenswert?

ok danke für die antworten, ich schau mal ob das klappt.

von Thomas E. (thomase)


Lesenswert?

1
#include <stdlib.h>
2
3
...
4
5
double dbResult;
6
char szResult[11];
7
8
...
9
10
dtostrf(dbResult, 9, 3, (char*)szResult);
11
lcd_puts(szResult);


mfg.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Patrick Hoefler schrieb:
> Zum anzeigen habe ich mir eine Funktion geschrieben, die mir Int zahlen
> am LCD ausgibt.

Warum?
Was gefällt Dir an der C-Lib nicht?

Selber schreiben lohnt sich erst, wenn float Genauigkeit nicht mehr 
reicht und man double oder höher haben will.
Bzw. dafür gibts bestimmt auch fertigen C-Code.

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.