Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Neuanfang mit Station2 Kategorie: Programmierung (von m8_nix - 30.04.2007 17:18)
Als Antwort auf Re: Neuanfang mit Station2 von André H. - 30.04.2007 0:26
Ich nutze:
C164CI-ControllerBoard
> Hallo m8_nix,
>
> >  ich sehe grade diese Funktion kann so nicht funtzen....  vielleicht liegt ja darin schon deine
> > fragende Haltung begründet?
> > Dadurch das sich im long-Format die Werte 105625 (10,5625°C) und 106 (10,6000°C) nicht Exponentiell
> > von einander unterscheiden lassen (fehlende Nachkomma "Nullen") wird im vorliegendem Fall  der letztere
> > Wert "10,6°" tatsächlich niedrieger "angesehen" als der in wirklichkeit Niedrigere (10,5625°)
>
> Wie kommst Du denn darauf ? Das stimmt nämlich nicht.
> Du weiÃ?t schon, was ein Festkommainteger ist, oder?
> Wenn mit ds1631.readl() ein Wert ausgelesen wird, hat dieser
> immer vier Nachkommastellen. Keine mehr, und keine weniger.
> Ein Festkommainteger ist nur eine Anwenderdefinitionen, bei der der Anwender selbst
> wissen muÃ?, wo das Komma sitzt.
> Es ist einfach eine Kommazahl, die um den Faktor 10, 100, 1000 usw. multipliziert wurde.
> Im Fall readl() kann man die Einheit hundertstel Mikrograd nennen,
> was vier Nachkommastellen entspricht.
> Falls es den Wert 10,6000° beim DS1631 wirklich geben würde, ist das bestimmt
> nicht der Rückgabe wert 106, sondern 106000 oder in Worten huntertundsechstausend.
> Aber gehen wir von Werten aus, die vorkommen können. (vielfaches von 0,0625K)
> Nehmen wir also die Temperaturen 10,5625°C und 10,6250°C an.
> Als Festkommainteger sind das die Werte 105625 und 106250.
> Wenn Du nun von den 106250 die 105625 abziehst, erhälst Du 625.
> Und das sind 0,0625K.
>
> Also denke bitte nicht unnötig kompliziert.
> Die Sache ist ganz einfach.
> Darum habe ich bei der CC2 auch die Festkommainteger in Mode gebracht, da
> diese meist einfacher handhabbar sind, als Float-Zahlen.
> (Und deutlich weniger Rechenzeit benötigen)
>
> Allerdings hast Du mit einem recht. Deine Funktion kann nicht funktionieren:
> long t1, t2;
> float tdelta;
> function build_diff() returns float;
> {
>  t1=ds1631.readl(0);                             // 0=Adresse des ersten Sensors
>  t2=ds1631.readl(1);                             // 1=Adresse des zweiten Sensors
>  tdelta=t2-t1;
> }

>
> Du hast ein Semicolon nach dem "returns float" in der Funktionsdefinition.
> Das ist nicht zulässig.
> Dann gibst Du keinen Wert in der Funktion zurück.
> Somit ist der Rückgabewert immer 0.
> Und dann mach es keinen Sinn die Differenz der Festkommaintegerwerte t1 und t2
> in einem Float zu speichern, da ein Festkommawert für einen Float keine Kommazahl darstellen.
> Du müsstest Deine Funktion dann folgenderma�en umschreiben:
> long t1, t2;
> float tdelta;
> function build_diff() returns float
> {
>  t1=ds1631.readl(0);                
>  t2=ds1631.readl(1);
>  tdelta=(t2-t1)*0.0001; // Festkommainteger mit 4 Nachkommastellen
>                         // in Floatumrechnen
>  return tdelta;
> }

>
> MfG André H.
>


Hallo,

ich nehme alles zurück und behaupte das Gegenteil André.
Tut mir leid für das unnötige Falschposting.
Man sollte eben so spät Nachts nichts mehr posten

Chris


    Antwort schreiben


Antworten: