PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : float Variable mit printf ausgeben(UART)



Kera
01.02.2006, 21:56
Hallo,

Ich möchte eine float Variable über die Funktion printf() über die serielle Schnittstelle ausgeben, wie macht man das??


printf("temp= %f",kurven_temp[0]);

//routine für printf
int uart_putchar (char c)
{
if (c == '\n')
{
uart_putchar('\r');
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;

return(0);
}





Wenn ich es so mache, bekomme ich nur ein '?'!
Soll ich es in einen String umwandeln, wenn ja wie?

PicNick
02.02.2006, 10:17
Auf einem normalen Compiler würde ich sagen
sprintf(tralala, "%f\r\n", floatzahl);
dann ist tralala ein normaler string und das kontrollzeichen ergänzen kannst du dir sparen.
beim GCC für Controller mußt du nach schauen, was der sprintf() für formate drauf hat.
sowas Ähnliches sollt' es aber geben

SprinterSB
02.02.2006, 11:45
Schau mal in dir Doku zur avr-libc.

Es gibt funktionen, wie dtostrf und dtostre. Auf ausreichend große Puffer ist zu achen (wie bei sprintf auch). Wenn printf direkt nach UART drucken soll, dann nimmst du fprintf und erzeugst ein FILE-Objekt mit fdevopen, das als Argumente die Funktionszeiger der Ein-/Ausgaberoutinen bekommt.