- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 4 von 4

Thema: Spannungsbalken am LCD darstellen (BASCOM)

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101

    Spannungsbalken am LCD darstellen (BASCOM)

    Anzeige

    E-Bike
    Hallo!
    Ich möchte einen Spannungsbalken am LCD darstellen.
    Dazu hab ich mir mit dem LCD Designer ein Zeichen generiert, das komplett ausgefüllt ist. 10 Stück dieser Zeichen stelle ich in einer Zeile dar.
    Wenn nur eines erscheint, ist die Batterie fast leer, wenn 10 nebeneinander stehen ist sie voll.
    Das funktioniert zwar, aber der Balken blinkt manchmal, was ich nicht haben will. Kann das an der Laufzeit liegen? Oder an meiner Abfrageart?
    Gibts da eine andere Möglichkeit wie man das machen könnte?

    Das Programm ist so:



    Code:
    Balken:
     If U1_mes >= 14.1 Then
        Gosub Balken_ladung       'Ladung
     End If
    
     If U1_mes >= 12.69 And U1_mes <= 14.00 Then
       Gosub Balken100
     End If
    
     If U1_mes >= 12.64 And U1_mes <= 12.67 Then
       Gosub Balken_loeschen
       Gosub Balken90
     End If
    
      If U1_mes >= 12.58 And U1_mes <= 12.62 Then
       Gosub Balken_loeschen
       Gosub Balken80
     End If
    
     If U1_mes >= 12.46 And U1_mes <= 12.56 Then
       Gosub Balken_loeschen
       Gosub Balken70
     End If
    
     If U1_mes >= 12.38 And U1_mes <= 12.42 Then
       Gosub Balken_loeschen
       Gosub Balken60
     End If
    
     If U1_mes >= 12.34 And U1_mes <= 12.36 Then
       Gosub Balken_loeschen
       Gosub Balken50
     End If
    
     If U1_mes >= 12.28 And U1_mes <= 12.31 Then
      Gosub Balken_loeschen
      Gosub Balken40
     End If
    
     If U1_mes >= 12.23 And U1_mes <= 12.25 Then
      Gosub Balken_loeschen
      Gosub Balken30
     End If
    
     If U1_mes >= 12.17 And U1_mes <= 12.22 Then
      Gosub Balken_loeschen
      Gosub Balken20              '=> Laden
     End If
    
     If U1_mes >= 11.9 And U1_mes <= 12.12 Then
      Gosub Balken_loeschen
      Gosub Balken10              '=> Laden
     End If
    
     If U1_mes >= 10.5 And U1_mes <= 11.6 Then
      Gosub Balken_loeschen
      Gosub Balken0               '=> sofort laden ausgeben !
     End If
    
     If U1_mes < 10.6 Then
      Gosub Balken_loeschen
      Gosub Balken0               '=> LEER, sofort laden!
     End If
    Return
    
    
    '============================================
    'Das sind die LCD Anzeigen:
    
    '-------------------------------------------------------------------------------
    '/// LCD Balken für Batteriespannung löschen /////////////////
    '-------------------------------------------------------------------------------
     'Zeigt Striche "----------"
     Balken_loeschen:
     Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32
     Locate 3 , 1
     Lcd Chr(1);
     Locate 3 , 2
     Lcd Chr(1);
     Locate 3 , 3
     Lcd Chr(1);
     Locate 3 , 4
     Lcd Chr(1);
     Locate 3 , 5
     Lcd Chr(1);
     Locate 3 , 6
     Lcd Chr(1);
     Locate 3 , 7
     Lcd Chr(1);
     Locate 3 , 8
     Lcd Chr(1);
     Locate 3 , 9
     Lcd Chr(1);
     Locate 3 , 10
     Lcd Chr(1);
     Waitms 150
     Return
    
    '-------------------------------------------------------------------------------
    '/// LCD Balken für Batteriespannung ///////////////////////////////////
    '-------------------------------------------------------------------------------
    'Das Zeichen mit dem LCD Designer entwerfen dann an der richtigen Stelle auf OK 'drücken => der Code  "Deflcdchar ?,..." wird eingefügt.
    'Anschließend an Stelle des ? eine Nummer vergeben und die dann mit LCD chr(0)
    ' anzeigen lagen
    '============================================
    
     Balken100:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Locate 3 , 5
     Lcd Chr(0);
     Locate 3 , 6
     Lcd Chr(0);
     Locate 3 , 7
     Lcd Chr(0);
     Locate 3 , 8
     Lcd Chr(0);
     Locate 3 , 9
     Lcd Chr(0);
     Locate 3 , 10
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// LCD Balken für Batteriespannung ///////////////////////////////////
    '-------------------------------------------------------------------------------
    Balken90:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Locate 3 , 5
     Lcd Chr(0);
     Locate 3 , 6
     Lcd Chr(0);
     Locate 3 , 7
     Lcd Chr(0);
     Locate 3 , 8
     Lcd Chr(0);
     Locate 3 , 9
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 80% LCD Balken für Batteriespannung /////////////////////////////
    '-------------------------------------------------------------------------------
    Balken80:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Locate 3 , 5
     Lcd Chr(0);
     Locate 3 , 6
     Lcd Chr(0);
     Locate 3 , 7
     Lcd Chr(0);
     Locate 3 , 8
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 70% LCD Balken für Batteriespannung /////////////////////////////
    '-------------------------------------------------------------------------------
    Balken70:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Locate 3 , 5
     Lcd Chr(0);
     Locate 3 , 6
     Lcd Chr(0);
     Locate 3 , 7
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 60% LCD Balken für Batteriespannung //////////////////////////////
    '-------------------------------------------------------------------------------
    Balken60:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Locate 3 , 5
     Lcd Chr(0);
     Locate 3 , 6
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 50% LCD Balken für Batteriespannung //////////////////////////////
    '-------------------------------------------------------------------------------
    Balken50:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Locate 3 , 5
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 40% LCD Balken für Batteriespannung /////////////////////////////
    '-------------------------------------------------------------------------------
    Balken40:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Locate 3 , 4
     Lcd Chr(0);
     Waitms 50
     Return
    '-------------------------------------------------------------------------------
    '/// 30% LCD Balken für Batteriespannung //////////////////////////////
    '-------------------------------------------------------------------------------
    Balken30:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Locate 3 , 3
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 20% LCD Balken für Batteriespannung /////////////////////////////
    '-------------------------------------------------------------------------------
    Balken20:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 2
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 10% LCD Balken für Batteriespannung //////////////////////////////
    '-------------------------------------------------------------------------------
    Balken10:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Waitms 50
     Return
    
    '-------------------------------------------------------------------------------
    '/// 0% LCD Balken für Batteriespannung /////////////////////////////
    '-------------------------------------------------------------------------------
    Balken0:
     Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
     Locate 3 , 1
     Lcd Chr(0);
     Locate 3 , 1
     Lcd "   LEER   "
     Waitms 50
     Return

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Hans55,

    was mir einfällt:
    a) Die Sub Balken optimieren: Select - Case, KEIN Löschen der Zeile.
    b) Die Subs BalkenXXX optimieren: Locate nur für den Zeilenanfang, sonst nicht. Die an 10 Zeichen fehlenden Blöcke als Leerzeichen ausgeben (löscht dadurch evtl. vorherige Blöcke). Nur 1 LCD-Kommando pro Zeile: LCD Chr(0); Chr(0); " " (für 2 Blöcke + 8 Leerzeichen).

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Das sollte grob das gleiche machen wie dein Prog:
    Code:
    Dim U1_mes As Single
    Dim Balken_laenge As Byte , I As Byte
    
    Deflcdchar 0 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
    Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32
    Do
       For U1_mes = 12.22 To 12.23 Step 0.01
          Gosub Balken
       Next U1_mes
    Loop
    
    Balken:
       Select Case U1_mes
          Case 12.69 To 14.00 : Balken_laenge = 10
          Case 12.64 To 12.68 : Balken_laenge = 9
          Case 12.58 To 12.63 : Balken_laenge = 8
          Case 12.46 To 12.57 : Balken_laenge = 7
          Case 12.38 To 12.45 : Balken_laenge = 6
          Case 12.34 To 12.37 : Balken_laenge = 5
          Case 12.28 To 12.33 : Balken_laenge = 4
          Case 12.23 To 12.27 : Balken_laenge = 3
          Case 12.17 To 12.22 : Balken_laenge = 2
          Case 11.9 To 12.16 : Balken_laenge = 1
          Case 10.5 To 11.8 : Balken_laenge = 0
          Case Is < 10.5 : Balken_laenge = 0
       End Select
       If U1_mes >= 14.1 Then
          Gosub Balken_ladung                                   'Ladung
       Else
          Gosub Balken_zeichnen
       End If
    Return
    
    Balken_zeichnen:
       For I = 1 To 10
          Locate 3 , I
          If I <= Balken_laenge Then
             Lcd Chr(0)                                         'zeichnet ein Kästchen
          Else
             Lcd Chr(1)                                         'zeichnet einen Strich
          End If
       Next I
       Waitms 50
    Return
    
    Balken_ladung:
    Return
    Einige Werte sind in deinen Abfragen nicht enthalten, wie z.B. 12.43 - 12.45.
    Musst du mal sehen, ob das richtig ist.

    Gruß

    Rolf

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Hallo Dirk, Hallo Rolf!
    Erst mal Danke für die schnelle Antwort.
    Ich werde das mal so ausprobieren.
    Gruß
    Hans

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen