LCD Problem

    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!

    • Servus zusammen,

      bin dabei mit dem Sensor KTY81-110 in einem Gehäuse, welches im Außenbereich montiert ist, im Bereich zwischen -30,0º … 120,0º Celsius die Temperatur zu messen. Mit dem Simulator in Bascom funktioniert dies auch soweit sehr gut. Kann die Temperatur in dem zuvor genannten Bereich einstellen sowie Anzeigen. Als Ausgabe stelle ich mir eine rechtsbündig formatierte Anzeige von -30.0ºC ... 120.0ºC auf einem LCD Display mit 4*20 Zeichen vorgestellt. Jedoch wird die Anzeige in Abhängigkeit des Messwertes, jeweils in den beiden rechten Position ºC verändert. Bei den Werten zwischen 0.0ºC sowie 120.0ºC bekomme ich die LCD Anzeige wie gewünscht formatiert und dargestellt! Das bedeutet: der Dezimalpunkt steht in diesem Bereich immer an Stelle 17. des LCD Displays. Wenn die Werte jedoch in den Minusbereich gehen wird die Ausgabe verschoben. Liegen die Temperaturen zwischen 0,0ºC und -10,0ºC, im Simulator, wird die Anzeige um eine Stelle und ab -10,0ºC bis -30,0ºC sogar um zwei Stellen, auf dem Display, verschoben. Dies bedeutet das die Zeichen, ab Locate 3,13 erst um eine dann um zwei Stellen nach rechts verschoben werden und es sind zum Bsp. nur die -8.0º oder nur noch die Zahl -30.0 auf dem Display sichtbar ist.

      Liegt der Fehler vielleicht bei der LCD Ausgabe? Eventuell in der rechtsbündigen Formatierung im zusammen Spiel mit Fusing? Mit ausgeschalteter rechtsbündiger Formatierung bekomme ich wieder eine ganz andere fehlerhafte Anzeige.

      Vielleicht kann mir jemand eine Erklärung geben was ich falsch mache oder auf die Sprünge helfen?

      Mit Grüßen vom Rennsteig in Oberfranken.



      HF-FAN
      Dateien
    • Noch mal kurz zur Erklärung:
      Deine Anzeige soll rechtsbündig ausgegeben werden also nimmst du die maximale Anzahl der Zeichen die dargestellt werden können - in deinem Fall sieben Zeichen.
      Also ist dein Ausgangspunkt

      BASCOM-Quellcode

      1. Locate 1, 14
      Jetzt musst du nur noch dafür sorgen, dass bei kleineren Zahlen, alles davor mit Leerzeichen gefült wird also so wie im Beispiel oben.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Danke für die Info DJMSC.

      Die von dir vorgeschlagene Formatierung habe ich in das Programm eingefügt jedoch ohne Erfolg.

      Locate 3 , 1
      Lcd "Temperatur:" ;

      Locate 3 , 13

      Grad_str = Fusing(grad , "#.#") ;

      If Grad < 1000 Then Lcd " "; ' Formatierung rechts bündig 1000 Stelle
      If Grad < 100 Then Lcd " "; ' Formatierung rechts bündig 100 Stelle
      If Grad < 10 Then Lcd " "; ' Formatierung rechts bündig 10 Stelle;

      Select Case Grad
      Case -30.0 To -10.0 : Lcd " " ; Grad ; "ßC"
      Case -10.0 To 0.0 : Lcd " " ; Grad ; "ßC"
      End Select

      Lcd = Fusing(grad , "#.#") ; "ßC"

      Mein Problem liegt nicht in dem Bereich 0.0°C bis 120.0°C, sondern nur zwischen -30.0°C und 0.0°C. Nur in diesem Bereich treten die Probleme auf. Habe versucht bei Minus Temperatur durch Abfrage die Anzeige entsprechend zu verschieben, aber auch ohne Erfolg. In dem Code finde ich keinen Befehl für die Verschiebung der Ausgabe zwischen -30.0°C und 0.0°C. Nun ja DJMSC bin Anfänger und mache meine ersten Schritte in Bascom. Anscheinend sehe ich vor lauter Bäumen den Wald nicht mehr.

      Grüße HF-FAN
    • @HF-FAN mir ist grade noch aufgefallen, dass es dir wohl noch nicht ganz klar ist, was du an das LCD schickst. 'Grad' ist eine Zahl, ein single, mit Nachkommastelle. Schreibst du 'LCD Grad', dann wird auf dem LCD diese Zahl linksbündig angezeigt. 'fusing' macht aus einer Zahl einen Text und bei der Gelegenheit kann man Einfluß auf die Nachkommastellen nehmen. Runden, zB oder Anzahl bergrenzen. 'format' bearbeitet einen Text, der eine Zahl darstellt (der ist vielleicht mit fusing aus einer Zahl erzeugt worden) und zwar jetzt mehr im 'vorderen Bereich', also mit führenden Leerzeichen, sodass man bei einer Ausgabe mit einem LCD die Kommas untereinander bekommt, oder die Einheit immer an derselben Stelle steht.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Erstmal besten Dank für die Anregung und Hilfe.

      Als Lösung habe ich folgende zwei Zeilen eingefügt:

      Locate 3 , 1
      Lcd "Temperatur:" ;

      Locate 3 , 13

      Grad_str = Fusing(grad , "#.#") ; "ßC";

      If Grad < 1000 Then Lcd " "; ' Formatierung rechts bündig 1000 Stelle
      If Grad < 100 Then Lcd " "; ' Formatierung rechts bündig 100 Stelle
      If Grad < 10 Then Lcd " "; ' Formatierung rechts bündig 10 Stelle;

      1. If Grad < 0 Then Locate 3 , 15
      2. If Grad < -10.0 Then Locate 3 , 14

      Lcd = Fusing(grad , "#.#") ; "ßC"

      Dadurch bekomme ich die gewünschte Formatierung so wie ich mir das dachte. Das Grad sowie C wird nicht mehr nach rechts verschoben! Stehen immer an Stelle 19 + 20. Warum dies so ist kann ich jedoch noch nicht erklären. Vielleicht hat der eine oder andere eine Erklärung dafür.

      Grüße HF-FAN
    • Naja, eigentlich ganz einfach. Die erste 'Schreibstelle' für deinen Wert wird mit 'locate 3,13' hinter den Text 'Temperatur:' gesetzt. Mit den Abfragen 'If grad > xxx' wird je nach Größe der Zahl 'Grad' mit Leerzeichen die Schreibstelle weiter geschoben. Deine Abfrage nach einer negativen Temperatur, soll eigentlich die Schreibstelle für das '-' wieder eine Stelle zurück setzen, das machst du aber mehr auf die brutale Art, dass du jetzt einen Absolutwert für die Schreibstelle vor gibst, genauso bei der nächsten Abfrage <-10. Dann wird durch LCD=Fusing(grad,"#.#");"ßC" deine Zahl Grad in einen Text gewandelt und angezeigt, gefolgt von der Einheit.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hi,
      mach doch dein Locate dynamisch in Abhängigkeit der Zeichenlänge.
      Beispiel wie ich es in meinem Datenlogger mache. Nur als Strukturanregung für Anzeige der Analogwerte.

      Temp_int = Temp_single
      Temp_str2 = Str(temp_int) + Cfg_analog_einheit_disp(c)
      Elseif Cfg_analog_dispform(c) = 1 Then
      Temp_str2 = Fusing(temp_single , "#.#") + Cfg_analog_einheit_disp(c)
      Elseif Cfg_analog_dispform(c) = 2 Then
      Temp_str2 = Fusing(temp_single , "#.##") + Cfg_analog_einheit_disp(c)
      Elseif Cfg_analog_dispform(c) = 3 Then
      Temp_str2 = Fusing(temp_single , "#.###") + Cfg_analog_einheit_disp(c)
      Else
      Temp_str2 = Fusing(temp_single , "#.####") + Cfg_analog_einheit_disp(c)
      End If
      Temp_int = Len(temp_str2)
      If Temp_int > Cfg_analog_dispsize(c) Then
      Temp_str2 = Mid(temp_str2 , 1 , Cfg_analog_dispsize(c))
      Elseif Temp_int < Cfg_analog_dispsize(c) Then
      Temp_int = Cfg_analog_dispsize(c) - Temp_int
      Temp_str2 = Temp_str2 + Space(temp_int)
      End If

      Locate Cfg_analog_dispy(c) , Cfg_analog_dispx(c)
      Lcd Temp_str2

      Möchte keinen mit Zeilenbeschreibung verwirren, ist wohl auch nicht nötig um die Struktur zu erkennen.
      Messdaten zu verfälschen nur damit diese in die Anzeige passen ist nicht mein Ding.

      Mit freundlichen Grüßen
    • Eine harte Nuss für einen Anfänger! Aber vielleicht hat er den Ehrgeiz...
      Ich glaube auch, dass er 4 Stellen nach dem Komma nicht wirklich messen kann und will. ^^
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Servus Tschoeatsch,

      da hast Du vollkommen recht. Eine Stelle hinter dem Komma ist für mich vollkommen ausreichend. Ob das Gehäuse -10,0 oder -10,01 Grad hat spielt keine Rolle. Ist bei der Kälte hier am Rennsteig auf 700m NN sowieso egal. Möchte nur wissen welche Temperatur, in 10m über Grund, im Gehäuse ist.

      Gruß HF-FAN
    • tschoeatsch schrieb:

      Eine harte Nuss für einen Anfänger! Aber vielleicht hat er den Ehrgeiz...
      Ich glaube auch, dass er 4 Stellen nach dem Komma nicht wirklich messen kann und will.
      Ist er ein Anfänger? Wenn ja dann habe ich das Beispiel ohne Dim- Vorgaben bewusst so eingestellt. Also ist eine Zeichenkette x lang , dann werte diese Länge aus und dann lege Locate fest. Kann ja sein er möchtest die Info auch mehrzeilig darstellen.
      Natürlich würde ich ein Anfänger nach seine Vorgaben eine Demo erstellen.
      Vorausgesetzt, dass er mich auch als Anfänger auf spezielle Anfrage, respektiert.

      HF-FAN schrieb:

      da hast Du vollkommen recht. Eine Stelle hinter dem Komma ist für mich vollkommen ausreichend. Ob das Gehäuse -10,0 oder -10,01 Grad hat spielt keine Rolle. Ist bei der Kälte hier am Rennsteig auf 700m NN sowieso egal. Möchte nur wissen welche Temperatur, in 10m über Grund, im Gehäuse ist.
      Nun bin ich verwirt. Es geht nur um die Nachkommastellen.
      Na dann lies bitte meie Kommentare nicht.
      Gruß
    • HF-FAN schrieb:

      Jedoch wird die Anzeige in Abhängigkeit des Messwertes, jeweils in den beiden rechten Position ºC verändert. Bei den Werten zwischen 0.0ºC sowie 120.0ºC bekomme ich die LCD Anzeige wie gewünscht formatiert und dargestellt! Das bedeutet: der Dezimalpunkt steht in diesem Bereich immer an Stelle 17. des LCD Displays. Wenn die Werte jedoch in den Minusbereich gehen wird die Ausgabe verschoben. Liegen die Temperaturen zwischen 0,0ºC und -10,0ºC, im Simulator, wird die Anzeige um eine Stelle und ab -10,0ºC bis -30,0ºC sogar um zwei Stellen, auf dem Display, verschoben. Dies bedeutet das die Zeichen, ab Locate 3,13 erst um eine dann um zwei Stellen nach rechts verschoben werden und es sind zum Bsp. nur die -8.0º oder nur noch die Zahl -30.0 auf dem Display sichtbar ist.

      HF-FAN schrieb:

      bin Anfänger und mache meine ersten Schritte in Bascom. Anscheinend sehe ich vor lauter Bäumen den Wald nicht mehr.
      Raum für Notizen

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

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