C Temperaturanzeige (DS1621) auf 4 - Digit 7-Segmentanzeige

Waahhhhhhhhhhhhh!!!:shout:

Warum denn die Division?
Was ist denn Deine Hunderter-Stelle, wenn Du sie durch 10 teilst?

Trotzdem würde ich statt der Mittelwertbildung erstmal mit dem Halb-Kelvin-Bit runden

P.S.: beachte auch, daß durch die Integration der Variablenbereich überlaufen kann

Das halbe Kelvin Bit steht dann wohl in "TempL" ? Wie runde ich? Also wie mache ich das dem Compiler klar?
 
strenggenommen mußt du gar nicht runden... (Zaunpfahlwink)
...
Derzeit hackst Du einfach die erhaltene Temperatur nach der letzten Dezimalstelle ab, Du verwendest nur den ganzzahligen Anteil. Wenn der Wert jetzt also zwischen 24,9 und 25,0 (dezimal) schwankt, schwankt Deine Anzeige zwischen 24 und 25. Was soll sie aber da Anzeigen?
Im Low-Byte (welches Du nach TempL einliest, aber nie verwendest) befindet sich aber noch 'ne (binäre) Nachkommastelle, die dezimal 0,5 entspricht. wenn dieses bit gesetzt ist (also das low-Byte=128 bzw ungleich 0 ist) sollte die absolute ganzzahlige Temperatur "aufgerundet" werden, bevor das dann in Dezimalstellen zerhackt wird. Was heißt "aufrunden" dann hier?

P.S.: Dein Zahlen-Array sollte korrekterweise Ziffern heißen;)
 
Das byte mit auswerten und in die Rechnung mit einfließen lassen ?
 
Das byte mit auswerten...
Ja
...und in die Rechnung mit einfließen lassen ?
eher nicht...

Ich versuchs nochmal aus 'ner anderen Richtung

Du hast irgendeinen Messwert mit Nachkommastellen, nennen wir ihn A.
Diesen speicherst Du jetzt in Variable B ab, aber nur den ganzzahligen Anteil.
Nehmen wir jetzt mal an, Du weißt, das der Nachkommarest größergleich 0,5 war, was mußt Du dann tun, B korrekt zu runden?

Und was, wenn der Rest kleiner als 0,5 war?
 
Jaeher nicht...

Ich versuchs nochmal aus 'ner anderen Richtung

Du hast irgendeinen Messwert mit Nachkommastellen, nennen wir ihn A.
Diesen speicherst Du jetzt in Variable B ab, aber nur den ganzzahligen Anteil.
Nehmen wir jetzt mal an, Du weißt, das der Nachkommarest größergleich 0,5 war, was mußt Du dann tun, B korrekt zu runden?

Und was, wenn der Rest kleiner als 0,5 war?



Müsste ich dann nicht "B - A" rechnen?
 
Nein...

in B hast Du den ganzzahligen Anteil von A, die ganzen Nachkommastellen sind abgehackt...
Wenn Du jetzt aber bereits weißt (woher ist erstmal egal), daß B hätte aufgerundet werden müssen, was mußt Du dann mit B tun?
 
Nein...

in B hast Du den ganzzahligen Anteil von A, die ganzen Nachkommastellen sind abgehackt...
Wenn Du jetzt aber bereits weißt (woher ist erstmal egal), daß B hätte aufgerundet werden müssen, was mußt Du dann mit B tun?


"B" aufrunden ? Ich habe keine Ahnung :(
 
Im High-Byte, welches der Sensor liefert, (und welches Du in tempH speicherst) steht der ganzzahlige Anteil, also ohne Nachkommastellen...
Der ist also immer(!!!) ganzzahlig abgerundet.
Wenn Du jetzt aber weißt (woher erstmal egal), daß der aufgrund etwaiger Nachkommastellen hätte (ganzzahlig) aufgerundet werden müssen, um welchen Betrag ist temph jetzt zu klein? Mit welchem "Rechenschritt" kannst Du das korrigieren?
 
Dann müsste ich "TempH" mit "TempL" aufrunden !?
 
Nein!

laß doch erstmal TempL raus.
TempH ist doch bereits ganzzahlig und rund! Nur eben abgerundet, Nachkommastellen abgehackt. Wenn Du das selbst irgendwie mathematisch runden willst, kommt da nichts anderes mehr raus, da sie bereits rund ist!
Egal welche Nachkommastellen da also (vorher) existierten (und abgehackt wurden) - TempH ist immer abgerundet. Wenn TempH aber hätte aufgerundet werden müssen, um wieviel ist es dann zu klein?
 
Nein!

laß doch erstmal TempL raus.
TempH ist doch bereits ganzzahlig und rund! Nur eben abgerundet, Nachkommastellen abgehackt. Wenn Du das selbst irgendwie mathematisch runden willst, kommt da nichts anderes mehr raus, da sie bereits rund ist!
Egal welche Nachkommastellen da also (vorher) existierten (und abgehackt wurden) - TempH ist immer abgerundet. Wenn TempH aber hätte aufgerundet werden müssen, um wieviel ist es dann zu klein?

Ich vermute du meinst um "0,5C"?
 
Dann müssten es "122°C" sein.:cool:
 
Und auf welchen Wert hätte es gerundet sein müssen (ganzzahlig)?

Also ist TempH um wieviel zu "klein"?
 
Und auf welchen Wert hätte es gerundet sein müssen (ganzzahlig)?

Also ist TempH um wieviel zu "klein"?

Gerundet hätten es dann wohl "123°C" sein müssen...
Die diff. müssten... "0,1127451" sein?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)