hallo, ich möchteeine double zahl auf einem lcd ausgeben. dazu wolte ich da ganze in ein char um wandeln. aber da gehts los. weiß jemand, wie man eine double in ein char bekommt? Gruß Rafael
Gar nicht. Weil ein einziger char nur ein einzelnes Zeichen aufnehmen kann. Aber du kannst ein char-Array benutzen um darin eine String- Repräsentierung des double abzulegen. char Buffer[28]; double d = 2.0; sprintf( Buffer, "%lf", d ); Je nach Compiler gibt es meist auch noch andere Funktionen die meist dtoa() oder _dtoa() oder so ähnlich heissen.
klar, das mit den chars. hätte ich klarerausdrücken sollen. das man da ein array benötigt war mir lar. ich nutze iar, aber da habe ch leider noch keiner derartige fertige funktion gefunden. atof und atoi gibts da, aber anscheinend nicht umgekehrt. in welcher form wird denn ein double gespeichert, vielleicht kann man sich ja ne eigene funktion basteln.
@rafael das double format ist ein floating-point format. ne eigene funktion ist machbar (allerdings auch nur mit float-funktionen, und die dauern naturgemäss recht lange) sprintf ist (wie karl-heinz meinte) schon ne gute wahl. vor allem weil man noch formatangaben (anzahl stellen/genauigkeit) machen kann
hi, das läuft auf IAR und MSP430F169 für LCD #include <stdio.h> void sendDouble(double a) { int z,b; char txtDouble[33]=" "; //sprintf (txtDouble,"%.2E",a); //sprintf (txtDouble,"%.3g %%",a); sprintf (txtDouble,"%.1f",a); for (z=0; z<=15;z++) { b=txtDouble[z]; sendChar(b); if(b==0x00)z=15; } } void sendChar(char zeichen) { P4OUT = zeichen; P5OUT=0x05; // RS und E high, R/W low waitLCD(50); P5OUT&=~0x04; // und jetzt auf low } viel Spass
Wie Marcel schon angedeutet hat, benötigst du die <stdio.h>. Da ist die sprintf Funktion drin. Und die gibt es natürlich auch beim IAR Compiler. Muss man halt nur einbinden.
die frage ist nur wieviele stellen hinter dem komma du brauchst. zunächst kannst du durch einen cast die stellen vor dem komma in eine variable stelle lPostDigits = (long)dDouble; diese auf dem display darzustellen sollte kein problem sein. nun extrahierst du die stellen hinter dem komma dPastDigits = dDouble - (double)lPostDigits; da du dir ja daüber bewust bist, wieviele stellen hinter dem komma angezeigt werden sollen kanst du nun entsprechend multiplizieren for ( i = 1; i < iNumDigits; i++) pot = pot * 10; lPastDigits = (long)(dPastDigits * pot); nu hast du wieder einen integer der relativ einfach darzustellen ist. gruß Tenner
hallo, ich habe mal die version von marcel versucht. leider stoße ich da anscheinend an die grenze von meinem kostenlosen compiler. ich erhalte immer folgende fehlermeldung, wenn ich sprintf verwende. Fatal Error[e89]: Too much object code produced (more than 0x1000 bytes) for this package so wie es scheint liegt das an der speicherbegrenzung des compilers oder so. mal sehen.
Ich glaube in einer Version von IAR war diese Fehlermeldung ein Bug. Welche Version benutzt du denn? Wie groß ist denn der Code den du generierst (kann im Message Fenster angezeigt werden)?
Die Lib ist halt zu groß für den kostenlosen Kompiler. Die Meldung stimmt schon so. Der kann nur 4096 Byte Programmcode erzeugen. Nimmste halt den GCC. In Verbindung mit Eclipse fast genauso komfortabel wie IAR.
wie kann man sich denn die größe des erzeugten codes anzeigen lassen. mit dem GCC hatten wir probleme. der erkennt die treiber für unseren Jtag-usb adapter nicht. nix zu machen irgendwie.
Die Größe zeigt er leider nur an, wenn es durch läuft. Wenn´s zu groß ist, kommt vorher schon der Abbruch, und es wird nicht weiter kompiliert. Was für einen Debugger habt ihr denn? Also der USBFET von TI klappt wunderbar.
Erst mal sprintf wieder raus und dann noch mal durchlaufen lassen und Code größe anzeigen lassen (Tool->Options->Messages->Show.. -> "All")(IAR 3.20). Wenn er dann schon nahe bei 4k ist, kann es wirklich an der größe liegen.
hallo, wenn ich das sprintf raus nehme und das ganze durchlaufen lasse, erhalte ich folgendes. 1 046 bytes of CODE memory 88 bytes of DATA memory (+ 22 absolute ) 74 bytes of CONST memory nimmt denn das sprintf so viel speicher in anspruch?
Da wird leider ne ziemlich große lib dazu gelinkt. Beim GCC sind das auch einige k gleich.
Da muss ich dann doch wohl mal auf GCC umsteigen, obwohl ich den IAR klasse finde. Weiß jemand zufällig, was so eine Lizenz von IAr kostet oder ob es da vielleicht so etwas wie eine Studenten-Version von gibt. Grüße Rafael
Eine volle IAR Lizenz kostet knapp 3000€ netto. Laut TI-Homepage gewährt IAR Hochschulen und Studenten 80% Rabatt. Aber GCC kann ich mittlerweile empfehlen. Mit Eclipse macht das richtig Spaß und man hat noch paar mehr Möglichkeiten (SVN zum Beispiel)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.