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!
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.
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
Etwas mehr Quelltext wäre da schon nützlich. Wie gibst du den CHAR [] und den puffer aus ? Wie ist BUF deklariert und definiert ? Gruß
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)
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 ;)
Nur interessehalber: Von was für einem Termperaturfühler kommen deine Daten, dass du dafür Genauigkeit und Dynamik vom Double Datentyp brauchst?
j3 schrieb: > nun bur ist einfach mit char buf[20]; (20 weil 20 zeichen pro lcd zeile) Wenn sprintf 20 Zeichen schreiben soll schreibt es 21, da die abschließende 0 das Ende makiert.
eins muss ich jetzt mal sagen ich habe noch kein forum erlebt dass so lebendig ist.... nun wie dem auch auch sei dann schriebt es eben 21 zeichen mit denen ich nichts anfangen kann ;)
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.
j3 schrieb: > nun wie dem auch auch sei dann schriebt es eben 21 zeichen mit denen ich > nichts anfangen kann ;) Damit meine ich, dass es einen Überlauf gibt. Mit einem 20 Zeichen Buffer kannst du nur 19 Zeichen schreiben.
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
Die ersten Googleergebnisse für "fließkomma c18 printf" deuten darauf hin, das printf vom C18 überhaupt kein double/float unterstützt. Der erste Link: http://support2.microchip.com/KBSearch/KB_StdProb.aspx?ID=SQ6UJ9A003PQX
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
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.