Double auf LCD?

Gast #2392547
Lesenswert?

Hallo Gemeinde,

ich bin ein Anfänger in Sachen MC programmiere aber schon seit einigen 
Jahren.

Mein Problem:

ich habe einen PIC 18f182550 mit einem 2x20 LCD Display C18 als Compiler 
mit mplap als Entwicklungsumgebung.

Ich versuche nun den Wert eines Temp. Fühlers auf dem LCD auszugeben
ich habe also einen double den ich gerne darstellen würde
ich habe schon mit mehreren abwandlungen von sprintf (zB 
sprintf(buf,"%6.3f",2.5);) versucht
und auch unzählige andere Funktionen die mir hier im Forum oder durch 
Google untergekommen sind.

Leider bekomme ich immer nur lustige pixel zu sehen ab und an auch ein 
@.
Langsam zweifle ich an meinem verstand.

Ich bitte um Hilfe!
#2392568
Lesenswert?

Vermutlich machst du einen Fehler bei den Argumenten von sprintf (also 
keinen Pointer auf ein Char-Array angegeben, wäre so meine erste 
Vermutung)

Oder deine Display-Ansteuerung funktioniert noch nicht richig. Denn 
(s)printf liefert einfach nur ASCII-Zeichen, die dein Display auch so 
anzeigen kann wenn es denn richtig implementiert ist. Wenn also deine 
"lcd_puts" richtig funktioniert, dann wird wohl ersteres der Fehler 
sein.
Gast #2392585
Lesenswert?

danke für deine Antwort

also mein LCD zeigt mir ein char[] korrekt an sowohl wenn ich es in der 
firmware definierte als auch über usb gesendet

könntest du mir ein bsp für zb 23.48 oder so geben?

danke im voraus
#2392625
Lesenswert?

Wir wissen jetzt ja auch nicht was für einen µC du nun genau benutzt. 
Aber bei printf dingen mit Floating-Point Erweiterungen und 
Floating-Point allgemein auf µCs ohne FPU, muss man aufpassen, da dann 
alles in Software gemacht wird und der Code dann SEHR groß werden kann 
und ggf. dann nicht mehr in den meist relativ kleinen Flash-Speicher 
passt.
Hier ist dann Festkomma-Arithmetik das Zauberwort (siehe Post von 
Samuel)
Gast #2392636
Lesenswert?

nun bur ist einfach mit char buf[20]; (20 weil 20 zeichen pro lcd zeile) 
definiert
die ausgabe über lcd ist von spruts usb4all die ausgabe via usb basiert 
auf der microchip bsp anwendung für HID geräte incl bootloader

das alles zu posten ist etwas viel denk ich
falls nötig werd ich das aber gern
ich kann auch das ganze projekt zum downlaod zu verfügung stellen ich 
dachte nur ich würde einfach den wald vor lauter bäumen nicht sehen als 
dass das für einen mc erfahrenen coder mehr als ein lacher sein würde

danke für den link aber das umwandeln von ganzzahlen macht mir ebenso 
schwierigkeien mal ganz abgesehen dass ich die lektion der kommazahlen 
nicht auslassen kann ;)
#2392663
Lesenswert?

Falls den double ueberhaupt implementiert ist. Fuer normale Anwendungen 
sollte man mit Single durchkommen.

Ersten, schreib mal ein Programm, dass eine konstante anzeigen soll.

const double T = 1.2345
display(T);

Dann schieb diesen Double ueber die serielle schnittstelle und 
kontrolliere. Dann rechne die Temperatur, und schieb sie ueber die 
serielle Schnittstelle und kontrolliere. Dann zeig sie an.
Gast #2392668
Lesenswert?

auch eine konstante kann ich am display nicht ausgeben
da ich sie ja so oder so durch die sprintf jagen muss da ich ein char[] 
benötige um es am display oder via usb ausgeben zu können
ein rs232 hab ich nicht getestet da 1. die usb verbindung funktioniert 
und 2. hab ich keinen seriellen port an meinem pc
#2392811
Lesenswert?

j3 schrieb:
> ich habe einen PIC 18f182550 mit einem 2x20 LCD Display C18 als Compiler
> mit mplap als Entwicklungsumgebung.

Na dann stellen wir uns mal dumm und gucken einfach ins C18 Manual:

2.7.4 stdio.h Functions:
"The functions vsprintf, vprintf, sprintf, printf, fprintf and vfprintf 
do
not support floating-point conversion specifiers."

Frage beantwortet.

Hier eine Lösung:
Beitrag "Formatierte Zahlenausgabe in C"


Außerdem sollte man nur dann double nehmen, wenn man auch die 
Genauigkeit braucht.
Beim C18 ist zwar kein Unterschied zu float, aber ein anderer Compiler 
könnte dann unnötig großen Code erzeugen.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren