Forum: Mikrocontroller und Digitale Elektronik doublewert in int umwandeln?


von Matze05 (Gast)


Lesenswert?

Hallo zusammen,

ich habe einen Temperaturwert im doublewert berechnet.


komma = wert_temperatursensor * 5.0 / 1024.0;      // A/D-Wert in 
Spannung umrechnen (AREF=5V, 10 Bit A/D-Wandler: 2^10=1024)

komma = komma - V_0GRAD;// akt. Spannung - Spannung Gefrierpunkt
  komma *= 100.0;        // in °C umrechnen




Wenn ich den vorherigen Temp-wert mit dem Nachfolgenden vergleiche, dann 
funktioniert mein Vergleich nicht.

if (abs(komma_vorheriger-komma)>=1)       //Schreibe nur aufs 
LCD-Display, wenn sich der Wert um mindestens 1°C verändert hat
      {
      dtostrf((komma), 2,0, texte); lcd_gotopos(4,17); lcd_writetext 
(texte);   //Ausgabe der GradZahl
      }
  komma_vorheriger=komma;   //der aktuelle Temp_wert wird gesichert, 
damit dieser im nächsten Druchlauf zum Vergleich herangezogen werden 
kann


wie kann ich denn diese beiden Werte auf einen Unterschied von größer 
gleich 1 vergleichen?
Wenn ich den Doublewert beispielsweise in int umrechnen könnte, dann 
würde der Vergleich funktionieren.

Seid ihr bitte so nett und macht mir einen Vorschlag?

Vielen Dank im vorraus und viele Grüße,

Mathias.

von Michael (Gast)


Lesenswert?

Matze05 schrieb:
> ich habe einen Temperaturwert im doublewert berechnet.

Das ist schon mal keine gute Idee. Mach lieber eine Integer-Rechnung.

von Anja (Gast)


Lesenswert?

Matze05 schrieb:
> Wenn ich den Doublewert beispielsweise in int umrechnen könnte, dann
> würde der Vergleich funktionieren.

Nö.

Das Problem ist daß der gespeicherte Wert erst dann überschrieben werden 
darf wenn auch die LCD-Anzeige ein update hatte.

Gruß Anja

von Matze05 (Gast)


Lesenswert?

Matze05 schrieb:
> m Vergl

Anja schrieb:
> Nö.
>
> Das Problem ist daß der gespeicherte Wert erst dann überschrieben werden
> darf wenn auch die LCD-Anzeige ein update hatte.
>
> Gruß Anja


Hallo Euch beiden,

vielen Dank für Eure Hilfe.

Ja, die beste Idee ist es eine Integerrechnung aufzumachen. Das werde 
ich auch gleich tun. :-)

Dennoch verstehe ich Deine Antwort nicht ANja.

Der gespeicherte aktuelle Tem_wert in der Variable Komma wird doch erst 
nach der Ausgabe am LCD-Display in der vAriable komma_vorheriger 
gesichrt.


if (abs(komma_vorheriger-komma)>=1)       //Schreibe nur aufs 
LCD-Display, wenn sich der Wert um mindestens 1°C verändert hat
      {
      lcd_gotopos(4,17); lcd_writezahl (komma);   //Ausgabe der GradZahl

      }
  komma_vorheriger=komma;   //der aktuelle Temp_wert wird gesichert, 
damit dieser im nächsten Druchlauf zum Vergleich herangezogen werden 
kann

Viele GRüße,

Matthias.

von Karl H. (kbuchegg)


Lesenswert?

Was Anja meint: (ich musste auch erst 3 mal überlegen, bis der Groschen 
gefallen ist)

Dein Problem liegt hier
1
  if (abs(komma_vorheriger-komma) >= 1 )       // Schreibe nur aufs LCD-Display,
2
                                               // wenn sich der Wert um mindestens 1°C verändert hat
3
  {
4
    dtostrf((komma), 2,0, texte);
5
    lcd_gotopos(4,17);
6
    lcd_writetext(texte);   //Ausgabe der GradZahl
7
  }
8
9
  komma_vorheriger = komma;   //der aktuelle Temp_wert wird gesichert,

du darfst komma_vorheriges nur dann auf komma setzen, wenn du auch 
tatschlich einen neuen Wert ausgegeben hast. Denn du willst eigentlich 
nicht dann ausgeben, wenn sich die Temperatur zwischen 2 hintereinander 
folgenden Messungen um 1 Grad verändert. Du willst updaten, wenn sich 
eine gemessene Temperatur von der auf der Anzeige angezeigten 
Temperatur um mehr als 1 Grad unterscheidet! Das ist aber etwas anderes. 
Die am LCD angezeigte Temperatur stammt ja nicht notwendigerweise aus 
der vorhergehenden Messung. Nenn die Variable einfach um in 
komma_auf_anzeige, dann wird dir das klarer.

Deine Temperatur kann zb so wachsen: 21.1 21.2 21.3 21.4 21.5 21.6 21.8 
22.4 22.8 23.1

In keinem einzigen Schritt deiner Messungen hat sich die neu gemessene 
Temperatur um mehr als 0.4 Grad gegenüber der vorhergehenden verändert. 
Trotzdem möchtest du aber sicher haben, dass die Anzeige von 21 auf 22 
umspringt. Das ist aber was anderes: 22.4 hat einen größeren Unterschied 
zu 21.1 als 1.0. 21.1 war aber die letzte Zahl, die zu einer Anzeige 
geführt hat, während die zu 22.4 vorhergehende Messung 21.8 war.



Wieso heißt das eigentlich alles 'komma'? Ich denke das ist eine 
Temperatur? Dann nenn es doch auch irgendwas mit temperatur.

von Matze05 (Gast)


Lesenswert?

Hallo,

dake für Eure Antworten.

Komma hieß die Variable in meinem Buch aus dem ich den Code übernommen 
habe.
Ich bin jetzt gerade dabei den Code in integerrechnung umzuschreiben. 
Spart Speicher und wohl auch Rechenzeit.

Dann löse ich das Vergleichsproblem mit Euren Tipps.

Habe den Hinweis von Anja jetzt verstanden.
Ich muss den angezeigten Wert der Temperatur speichern und dann mit dem 
neu gemessenen Vergleichen. :-)

Viele Grüße,

MAtthias

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
Noch kein Account? Hier anmelden.