Hallo zusammen, ich unternehme gerade meine ersten Gehversuche mit dem C167CR-LM in Verbindung mit dem µVision2-Compiler, und hoffe hier richtig zu sein. Das C-Programm im Anhang liefert mir folgende Ausgabe: Kanal: 0 ==> Wandlungsergebnis: 654 ==> Temperatur 13.9 Kanal: 0 ==> Min. -50, Max. 50,Differenz 100, Faktor 0.6 Kanal: 1 ==> Wandlungsergebnis: 654 ==> Temperatur 63.9 Kanal: 1 ==> Min. 0, Max. 100,Differenz 100, Faktor 0.6 Kanal: 2 ==> Wandlungsergebnis: 646 ==> Temperatur 63.1 Kanal: 2 ==> Min. 0, Max. 100,Differenz 100, Faktor 0.6 Kanal: 3 ==> Wandlungsergebnis: 322 ==> Temperatur 13.0 Kanal: 3 ==> Min. -50, Max. 150,Differenz 200, Faktor 0.3 Bis hierhin funktioniert alles. Wenn ich jetzt aber die Spannungen an den Analogeingängen geringfügig erhöhe, erhalte ich folgende Ergebnisse: Kanal: 0 ==> Wandlungsergebnis: 667 ==> Temperatur -48.9 Kanal: 0 ==> Min. -50, Max. 50,Differenz 100, Faktor 0.7 Kanal: 1 ==> Wandlungsergebnis: 670 ==> Temperatur 1.4 Kanal: 1 ==> Min. 0, Max. 100,Differenz 100, Faktor 0.7 Kanal: 2 ==> Wandlungsergebnis: 665 ==> Temperatur 0.9 Kanal: 2 ==> Min. 0, Max. 100,Differenz 100, Faktor 0.7 Kanal: 3 ==> Wandlungsergebnis: 353 ==> Temperatur -45.0 Kanal: 3 ==> Min. -50, Max. 150,Differenz 200, Faktor 0.3 Hier stimmen die berechneten Temperaturwerte nicht mehr. Warum ist das so? Wer kann/will mir helfen? Gruß Markus
Hallo Markus, Deine Bereichnung gehr schien weil einen unsigned int maximal denn wert von 65535 haben kann. aber: (maxTemperatur[i] - minTemperatur[i]) * messwert[i] 100 * 667 = 66700 also solltest du mit unsigned long arbeiten. versuche es mal mit: istTemperatur[i] = (signed long)minTemperatur[i] + (((signed long)maxTemperatur[i] - (signed long)minTemperatur[i]) * (unsigned long)messwert[i] / 1023.0); oder unsigned long messwert[4]; signed long maxTemperatur[4]={50, 100, 100, 150}; signed long minTemperatur[4]={-50, 0, 0, -50}; Dann müßte es richtig laufen. Grüße Mark,
Hi wo kommtn dein MinTemperatur und Maxtemperatur pberhaupt her ? seh ich nicht Gerhard
Hallo zusammen! @Mark: Danke für Deine Ausführungen. Das heißt, daß vor der Umwandlung in FLOAT temporär der gültige Zahlenbereich überschritten wird. Das hab ich nicht gewußt. Deshalb habe ich richtiggestellt: Statt istTemperatur[i] = minTemperatur[i] + ((maxTemperatur[i] - minTemperatur[i]) * messwert[i] / 1023.0); einfach istTemperatur[i] = minTemperatur[i] + ((maxTemperatur[i] - minTemperatur[i]) / 1023.0 * messwert[i]); und schon funzt es. Hat mich drei Tage gekostet :-( @Gerhard: signed int maxTemperatur[4]={50, 100, 100, 150}; signed int minTemperatur[4]={-50, 0, 0, -50}; Hier werden die Felder deklariert und mit Werten vorbelegt.
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.