Umwandlung Single nach Word: Was mache ich falsch?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Umwandlung Single nach Word: Was mache ich falsch?

      Hallo,

      ich versuche, eine Single Variable "Ad_wert" nach Word "Ppm_methan" zu wandeln:


      Quellcode

      1. Sub Methan_sensor
      2. Local Ad_wert As Single
      3. Disable Interrupts
      4. Start Adc
      5. Ppm_methan = 0
      6. For I = 1 To 10
      7. Ppm_methan = Ppm_methan + Getadc(5 , 32)
      8. Next I
      9. Stop Adc
      10. Enable Interrupts
      11. Ad_wert = Ppm_methan / 10
      12. Ad_wert = Ad_wert + Bias_methan
      13. Ad_wert = Ad_wert - 100
      14. Ad_wert = Round(ad_wert)
      15. Ppm_methan = Int(ad_wert)
      16. End Sub
      Alles anzeigen


      Dummerweise bekomme ich in unregelmäßigen Abständen in der Word-Variable "Ppm_methan" eine Nachkommastelle präsentiert, was sich dann in einer falschen Ausgabe manifestiert:

      anstatt z.B. "561" steht dann da "5612", was wohl "561,2" bedeuten wird.
      Das konnte ich mit abnehmenden Werten sehen "561,9", "561,5", "561,1" usw.
      Ich möchte also keine Nachkommastellen, meinetwegen können die auch einfach abgeschnitten werden.
      Wenn ich das mache (nur "int" oder nur "Word=Single"), dann kommt das gleiche heraus...

      Gruss
      Peer
    • Ich würde Zeile 14 nicht so machen.
      Du schreibst: Ad_wert=Ppm_methan/10.
      Ich würde schreiben
      Ad_wert=Ppm_methan (Überführen von word zu single)
      Ad_wert=Ad_wert/10 (Berechnung innerhalb des single-Zahlenraums)
      Dann die weiteren Berechnungen mit Ad_wert und am Schluss
      Ppm_methan=Ad_wert, hier wird der ganzzahlige Anteil der single-Zahl in ein word gewandelt.

      Noch eine Ergänzung:
      in der bascom-Hilfe steht, dass man Berechnungen möglicht mit den gleichen Zahlentypen machen soll. Ich denke mal, Addition bzw Subtraktion sollten immer gehen, aber bei 'komplizierteren Rechenschritten' sollte man das einhalten.
      Zeile 14 betrachtend: der rechte Teil ist eine Division eines words, Nachkomma geht verloren. Nur weil das Ziel eine single ist, soll die Nachkommastelle doch erhalten bleiben? Das sind so Entscheidungen, die ich bascom nicht überlassen würde.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • tschoeatsch schrieb:

      Zeile 14 betrachtend: der rechte Teil ist eine Division eines words, Nachkomma geht verloren. Nur weil das Ziel eine single ist, soll die Nachkommastelle doch erhalten bleiben? Das sind so Entscheidungen, die ich bascom nicht überlassen würde.
      Richtig.......
      Grundsätzlich sind Divisionen im Digitalbereich eine lösbare Berechnung aber halt sehr aufwendig. Oft liegt der Irrtum in der Ansicht. Soll heißen sehe ich keine Kommastelle oder einen Wert der vielleicht, im „Hintergrund“ 2^32 mal geteilt werden muss bis 0 oder 1 kommt.
      Scheint ja heutzutage dank der Resursen alles okay zu sein. Kann mich aber nicht damit abfinden wie Takte sinnlos „verballert“ werden und dann kommen Hinweise wie:
      Takt erhöhen, Stack optimieren usw.
      Stellt doch mal die Frage warum der Bascom- Schmied mehrere Eisen im Feuer hat.
      Eine 8Byte(Kilo)- Variable(Eisen) für Anwendungen, wie LED- blinken lassen, würde doch reichen.
      Er hat aber erkannt, dass 8 Gramm Eisen sich schneller erwärmen und formen lassen.
      In unserer Schmiede heißt es nicht Eisen sondern Variable- Typ oder so ähnlich.
      Gruß
    • Hm, fredred, ist das jetzt das 'Rätsel des Tages' oder was meinst du mit dem Vergleich mit dem Schmied und seinem heavy metal?
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • Danke Euch allen, ich werde das nachher probieren.

      DJMSC: Würde ich ja, aber das Programm hat jetzt so um die 100 DinA4- Seiten...ist eine komplexe Lüftersteuerung mit Sensorregelung (Feuchte, Temparatur, CO2-geführt, Methan und CO-Sensor, Frostschutzeinrichtung, Variablen Volumenströmen, Display, Sprachausgabe, Wlan, RTC, exterenm Watchdog und so weiter und so weiter....), das würde wohl den Rahmen sprengen
    • und es soll übrigens keine Nachkommastelle zu sehen sein. Ob die vorhanden ist, ist egal.
      Da ich, wenn ich Singles auf dem Display ausgebe, immer ein "x.0" nach dem Runden behalte, sieht das auf dem Display bescheiden aus und stört ungemein.
      Nur deshalb wandele ich das nach Word...dann funktioniert die Anzeige.

      Der Sensor gibt mir ppm aus, die brauche ich nicht mit Nachkommastelle weil Unfug...eigentlich würde es auch reichen, wenn die MQs auf 50ppm auswerten würden.
      Sind ohnehin nicht sehr genau, für mich sind der CO und Methansensor nur ein qualitatives Mittel um Gasalarme auszulösen.
    • Wozu dann das single? Rechne doch nur mit dem Ppm_wert als word, dann passt doch alles.
      Wenn du deinen Durchschnittwert gerundet haben willst, dann zähle vor dem /10 einfach 5 dazu.
      Also 10 Messungen aufaddieren, 5 dazu addieren und jetzt alles /10.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tschoeatsch ()

    • tschoeatsch schrieb:

      Hm, fredred, ist das jetzt das 'Rätsel des Tages' oder was meinst du mit dem Vergleich mit dem Schmied und seinem heavy metal?
      Ja könnte man als „Rätsel des Tages“ bezeichnen. Sollte aber lösbar sein.
      Lösungsweg:
      Erstelle warum auch immer ein Wert 10,333333 dann teile ich diesen durch 2.
      Ergebnis ist 5,1666665 hoffe ich. Wollte aber nur wissen wie viel 10 /2 ist.
      Mutig wie ich war, hatte ich den Vorschlag gemacht wenn nur 10/2 = 5 ergeben soll warum die vorab erstellten viele Kommastellen mitberechnen um 5 zu erhallten.
      War der Ansicht TE möchte nichtdas Ergebnis 5,1666665 weiter mitschleifen. Nur die Vorkommastellen sollten ausreichend sein.
      Hoffe kann Rätsel lösen.
      Der Schmied formt das Eisen mit klopf und wumm. Ich bevorzuge in der Programmierung lieber die passende DIM. Spart Kraft und Zeit.
      P.S.
      Ist eine Spaßantwort, sollte dich ja mittlerweile bekennen sein, dass ich kein Akademiker bin, ehr ein „Moorhuhn“. Also, Schuss frei.

      Malzeit, Morgen/Morgen, Scha-lom
    • fredred schrieb:

      War der Ansicht TE möchte nichtdas Ergebnis 5,1666665 weiter mitschleifen. Nur die Vorkommastellen sollten ausreichend sein.
      Damit liegst du wahrscheinlich gar nicht so daneben. Ich hab' erst mal nur nach dem Problem gesucht, warum falsche Ergebnisse aus der Berechnung kommen. Du warst schon weiter und hast die Rechnung überhaupt hinterfragt. Alles klar, ein Punkt für dich ^^
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------