Gabriela schrieb:
> Hallo,
>
> aber konnte
> nicht feststellen, ob das Problem beim int/float Casting oder beim
> sprintf() liegt.
der Quelltext den du gepostet hast, hat keinen Fehler
(event. ist dein String zu klein dimensioniert, muss >= 30 Zeichen sein)
wenn die Ausgabe von Dezimalzahlen klappt, liegt es
vermutlich aber eher daran, das dein sprintf keine Floats umwandeln kann
benutz mal das hier :
1 | #define STRING_BUF_SIZE 50 // maximum Grösse vom String
|
2 | char STRING_BUF[STRING_BUF_SIZE];
|
3 | #define STRING_FLOAT_FAKTOR 1000 // 1000 = 3 Nachkommastellen
|
4 | #define STRING_FLOAT_FORMAT "%d.%03d" // Formatierung
|
5 |
|
6 |
|
7 | void FloatToDezStr(float wert)
|
8 | {
|
9 | int16_t vorkomma;
|
10 | uint16_t nachkomma;
|
11 | float rest;
|
12 |
|
13 | if((wert>32767) || (wert<-32767)) {
|
14 | // zahl zu groß oder zu klein
|
15 | sprintf(STRING_BUF,"%s","OVF");
|
16 | return;
|
17 | }
|
18 |
|
19 | vorkomma=(int16_t)(wert);
|
20 | if(wert>=0) {
|
21 | rest = wert-(float)(vorkomma);
|
22 | }
|
23 | else {
|
24 | rest = (float)(vorkomma)-wert;
|
25 | }
|
26 | nachkomma = (uint16_t)(rest*(float)(STRING_FLOAT_FAKTOR)+0.5);
|
27 |
|
28 | sprintf(STRING_BUF,STRING_FLOAT_FORMAT,vorkomma,nachkomma);
|
29 | }
|
30 |
|
31 |
|
32 | main() {
|
33 |
|
34 | uint16_t result,j;
|
35 | float voltage;
|
36 | char arr[50];
|
37 |
|
38 | result = XMC2GO_Adc_Read();
|
39 | voltage = (float)result * 3.3 / 1023;
|
40 |
|
41 | FloatToDezStr(voltage);
|
42 |
|
43 | sprintf(arr, "Voltage value1 = %s \r\n", STRING_BUF);
|
44 | for(j = 0; j < strlen(arr); j++)
|
45 | {
|
46 | USIC0_CH0->IN[0] = arr[j];
|
47 | }
|
48 |
|
49 | }
|
Gruss Uwe