#156568 Mr. Teflon12.08.2009, 01:06:11 |
C - seltsamer Rundungseffekt ??? (pc.coding) |
Hallo,
// ********** KTY10-6 Temperaturberechnung aus A/D und Ausgabe an COM ************ \\\\
// *** Berechnung mit den kalibrierten SensorDigits nur gültig mit Rv 5,6kOhm *** \\\\
// ********** -30°C ... 0°C zweistellig und 0°C ... 150°C dreistellig ************ \\\\
void com_Temperatur (uchar chan)
{
SensorMin = 186; // A/D Digitwert 186 = Temperatursensor -30°C
SensorNull = 231; // A/D Digitwert 231 = Temperatursensor 0°C
Sensor100 = 386; // A/D Digitwert 386 = Temperatursensor 100°C
SensorMax = 443; // A/D Digitwert 443 = Temperatursensor 150°C
wert2 = (float) ad_in(chan); // A/D Wandler auslesen und als float wert2 übergeben
if(wert2 < 231) // wenn Temperatur negativ, dann hier rechnen
{
com_txd (\'-\'); // Zeichen \"-\" Ausgabe an COM
// Bsp. wert2 = 201
wert2 = (wert2-SensorNull)/(Sensor100-SensorNull)* -10; // Temperaturberechnung, wert2 = 1,935
if(wert2 > 9.99) // wenn Temperatur kälter wie -99°C, dann
wert2 = 9.99; // wird Anzeige auf -99,9°C gesetzt
D = wert2;
com_txd (D + 48); // Zehner Stelle als Ganzzahl an COM
wert2 = wert2 - D;
wert2 = wert2 * 10;
D = wert2;
com_txd (D + 48); // Einer Stelle als Ganzzahl an COM
com_txd (0x2e); // Dezimalpunktausgabe an COM
wert2 = wert2 - D;
wert2 = wert2 * 10;
D = wert2;
com_txd (D + 48); // erste Kommastelle als Ganzzahl an COM
// com_txd (176); // Zeichen ° an COM
com_txd (\'C\');
com_print(\"\\n\\r\"); // Zeilenende
}
-- |
#156573 MudGuardMünchen, 12.08.2009, 07:48:39 @ Mr. Teflon |
C - seltsamer Rundungseffekt ??? |
> Ich begrenze die Ausgabe/Anzeige auf -99,9°C. Mit der Abfrage |
#156615 Mr. Teflon12.08.2009, 14:04:47 @ MudGuard |
C - seltsamer Rundungseffekt ??? |
> > Ich begrenze die Ausgabe/Anzeige auf -99,9°C. Mit der Abfrage -- |
#156631 MudGuardMünchen, 12.08.2009, 17:45:35 @ Mr. Teflon |
C - seltsamer Rundungseffekt ??? |
> > Bei der ganzen Rechnerei können jedesmal Rundungsfehler geschehen - |
#156655 Mr. Teflon12.08.2009, 21:27:06 @ MudGuard |
C - seltsamer Rundungseffekt ??? |
Hallo, -- |
#156643 LEO_6812.08.2009, 20:21:23 @ Mr. Teflon |
C - seltsamer Rundungseffekt ??? |
Hi,
>
> if(wert2 > 9.99) // wenn Temperatur kälter wie -99°C, dann
> wert2 = 9.99; // wird Anzeige auf -99,9°C gesetzt
>
> D = wert2;
> com_txd (D + 48); // Zehner Stelle als Ganzzahl an COM
>
> wert2 = wert2 - D;
|
#156658 Mr. Teflon12.08.2009, 21:40:44 @ LEO_68 |
C - seltsamer Rundungseffekt ??? |
> Hi,
>
> >
> > if(wert2 > 9.99) // wenn Temperatur kälter wie -99°C, dann
> > wert2 = 9.99; // wird Anzeige auf -99,9°C gesetzt
> >
> > D = wert2;
>
> > com_txd (D + 48); // Zehner Stelle als Ganzzahl an COM
> >
> > wert2 = wert2 - D;
>
//************************************* Long in Zeichenkette umwandeln
int ltoa_format(char *erg, long zahl, uint vk, uint nk, char vorz )
{ // Out-String, Eingabe, Vorkommastellen, Nachkommastellen, Vorzeichen \'+\' oder \' \'
long temp;
int i;
i = vk + nk + 1; // Stringlaenge
erg[i--] = 0; // Zeichenketten-Ende
if ( zahl == 0 ) erg[i--] = \'0\'; // Spezialfall 0
else
{
if ( zahl < 0 )
{
vorz = \'-\'; // negatives Vorzeichen
zahl *= -1; // mit positiver Zahl weiterrechnen
}
while( i >= 0 &&
( zahl > 0 || i+2*( nk != 0 ) > vk) ) // in vk ist vorz enthalten
{
if (i==vk&&nk!=0) erg[i--]=\'.\'; // Dezimalpunkt, wenn nk abgearbeitet
else
{
temp = zahl / 10; // ganzzahlige Division
erg[i--] = (zahl - temp*10) + 48; // Digit abtrennen und ASCII Zeichen ablegen */
zahl = temp; // fuer naechsten Durchlauf um 1 Digit verkuerzt */
}
}
if ( i >= 0 ) erg[i--] = vorz; // Vorzeichen schreiben
}
while( i >= 0 ) erg[i--] = \' \'; // Anfang mit Leerzeichen fuellen
return vk + nk + 1; // Stringlaenge zurueckgeben
}
-- |