Single: 2 Vorkammestellen und 2 Nachkommastellen als Byte

    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!

    • Single: 2 Vorkammestellen und 2 Nachkommastellen als Byte

      Hallo,

      ich muss einen Single Wert in 2 Vorkammastellen und 2 Nackommastellen aufteilen.
      Zum Anzeigen auf einem LED Display.
      Habs aus 4 7-Segment teilen selber zusammengelötet.
      Funktioniert Problemfrei.
      Mir will einfach nicht einfallen wie ich einen Singlewert in vier einzelne Byte aufteile.
      Davon bräuchte ich 2 Vorkammastellen und 2 Nachkommastellen (Watt).

      Vielen dank!
      Alex
    • Du willst also z.B aus 12.34567 das machen: 12.34?
      Oder aus 1.23456 das: 01.23 bzw. 1.23?

      Du kannst den Singlewert mal 100 rechnen und einer Integer-Variablen zuweisen.
      Dann mit Format das Komma setzen.

      Etwa so?

      BASCOM-Quellcode

      1. Dim sngWert as Single
      2. Dim intWert as Integer
      3. Dim strWert as String*10
      4. sngWert = 1.234567 ' Ausgangswert
      5. ' Umrechnung
      6. sngWert = sngWert * 100 ' *100 um die 2 Nachmommastellen zu generieren
      7. intWert = sngWert ' in Integer wandeln (alles ab der 3. Stelle weg)
      8. strWert = Str(intWert) ' Den Wert in String wandeln
      9. strWert = Format(strWert , "00.00") ' String formatieren (Punkt einfügen)
      10. print strWert ' Fertig
      Alles anzeigen
    • djmsc schrieb:

      Schau dir dazu mal OVERLAY an. Damit kannst du größere Variablen in einem Byte-Array speichern.
      Das klappt bei single nicht so gut, weil da die Mantisse und der Exponent auf die 4 bytes verteilt sind. Dein Verfahren geht nur mit Ganzzahlen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Mitch64 schrieb:

      Du willst also z.B aus 12.34567 das machen: 12.34?
      Oder aus 1.23456 das: 01.23 bzw. 1.23?

      Du kannst den Singlewert mal 100 rechnen und einer Integer-Variablen zuweisen.
      Dann mit Format das Komma setzen.

      Etwa so?

      BASCOM-Quellcode

      1. Dim sngWert as Single
      2. Dim intWert as Integer
      3. Dim strWert as String*10
      4. sngWert = 1.234567 ' Ausgangswert
      5. ' Umrechnung
      6. sngWert = sngWert * 100 ' *100 um die 2 Nachmommastellen zu generieren
      7. intWert = sngWert ' in Integer wandeln (alles ab der 3. Stelle weg)
      8. strWert = Str(intWert) ' Den Wert in String wandeln
      9. strWert = Format(strWert , "00.00") ' String formatieren (Punkt einfügen)
      10. print strWert ' Fertig
      Alles anzeigen
      Der string nützt jetzt wenig, weil ja auf 4 7-Segmentern angezeigt werden soll. Wenn man jetzt den 100fachen Wert in den integer hat, dann erhält man für die linkeste Anzeige den Wert intwert/1000. Bei dem Beispiel: 1234/1000=1
      Für die nächste Anzeige intwert mod 1000 und dann /100. Beim Beispiel: 1234 mod 1000=234, dann 234/100=2
      3. Stelle ist intwert mod 100 und dann /10. Beim Beispiel: 1234 mod 100=34, dann 34/10=3
      Letzte Stelle einfach intwert mod 10. Beim Beispiel: 1234 mod 10=4.
      Ok, man kann den string auch zerzupfen.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Man könnte aber auch auf den String, den ich generiert habe, über ein Overlay Array auf die einzelnen Bytes zugreifen. Man holt also den Bytewert z.B. aus den 1. Index (das wäre die Stelle ganz links)
      und zieht den Ascii-Wert für 0 ab. Das Ergebnis entsprocht dem Wert, der anzuzeigen ist.

      Das macht man dann für 4 Stellen.

      Natürlich muss der Wert dann noch in die Bitwerte der Segmente konvertiert werden.
      Das kann man z.B. per Datazeile und LookUp machen.