- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 13 von 13

Thema: 7-Segment Ansteuerung

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    18.07.2004
    Ort
    Gelsenkirchen
    Alter
    78
    Beiträge
    16
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Xeus,

    Ich denke der Code hilft dir. Ist allerdings auf die max. Anzahl von 8 Segmenten zugeschnitten, die allerdings gruppenweise zu je 4 gesteuert werden. Der wichtigste Teil ist die sub Send_bytes...Daraus kannst Du erkennen, wie der angesteuert wird. Ansonsten müsste es einfach sein - ganz gut kommentiert, hoffe ich - sich das rauszusuchen, was man braucht.

    Man benötigt das Datenblatt, um die vielen Befehle zu erfahren. Man kann damit sogar quasi dimmen: Gleitend von Dunkel nach Hell die Helligkeit hochfahren. Find ich ganz lustig. Daran ist irgendein Widerstand beteiligt. Welchen, weiß ich momentan nicht mehr. Man kann aber erst einmal den vorgeschlagenen Wert nehmen. Ansonsten liebe ich dieses Teil. Einfacher kann man hardwaremäßig eine 8-stellige Anzeige kaum aufbauen, außer vielleicht mit dem saa 1064, aber der kann nur 4.

    Code:
    $regfile = "m32def.dat"   
    
    $baud = 19200                 
    $crystal = 16000000
    
    Const Displays = 4
    Const Dezpunkt = 3
    
    Declare Sub Send_bytes(byval Bytes As Word)
    Declare Sub Alle_aus
    Declare Sub Display_zeichen_bilden
    Declare Sub Ausgabe
    
    Dim I As Byte , Z As Byte , Wert As Word
    Dim Temp As Byte
    Dim Display_zeichen(displays)as Byte
    Dim Grad As Single
    Dim Temp_anzeige As String * Displays1
    Dim Zähler As Byte
    
    '***** für MAX-Init-Befehle
    Dim A(5) As Word
    
    Config Portc = Output
    
    Clock_max Alias Portc.5       ' clock
    Data_out_max Alias Portc.7    ' din
    Load_max Alias Portc.6        ' load
    
    
    '***** es werden immer 2 Bytes auf einmal abgeschickt
    '***** deshalb Dimensionierung mit word
    
    '*** erst alle aus
    Alle_aus
    
    '**** wichtig, falls vorher im Shutdown-Modus!!!
    '**** geht beim Ausschalten da manchmal rein
    '**** Befehle werden ausgeführt, aber man sieht nichts!!!!
    '*** also zuerst in den Normalmodus
    
    A(1) = &H0C01                 '**** Normalmodus
    A(2) = &H0B04                 '**** Anzahl 4 Digits
    A(3) = &H090F                 '**** Dekodiermodus für die ersten 4
    A(4) = &H0A0F                 '**** Helligkeit, volle Kanne bei ISEG=10K
    A(5) = &H0F00                 '***** in den Displaymode
    
    '**** Init Bargraf
    For I = 1 To 5
        Send_bytes A(i)
    Next
    
    
    '**** Versuch mit Grad-Anzeige
    Grad = -5.4756
    Temp_anzeige = Fusing(grad , "##.#" )       '**** um aufzurunden!
    
    '**** Decodieren nicht nötig
    Display_zeichen_bilden
    
    Do
        Wait 2
        Alle_aus
    
        '***** Testweise alle Zeichen zeigen
        For Z = 1 To Displays
              For I = 0 To 14
                    'Wert = Z * 256
                    'Wert = Wert + I
                    Wert = Makeint(i , Z)
                    Send_bytes Wert
                    Waitms 500
              Next
        Next
    
        Alle_aus
        '**** Gradzahl ausgeben
        Ausgabe
    Loop
    
    End
    
    Sub Send_bytes(byval Bytes As Word)
       Reset Load_max
       '**** masb first, clock goes high
       Shiftout Data_out_max , Clock_max , Bytes , 1 , 16 , 5
       Set Load_max
       'Waitms 200
    End Sub
    
    Sub Alle_aus
        For Z = 1 To 8
            '**** 2. Byte immer 0
            'Wert = Z * 256
            'Wert = Wert + 15
            Wert = Makeint(15 , Z)       '**** geht schneller!!!
            Send_bytes Wert
            'Waitms 500
        Next
    End Sub
    
    Sub Display_zeichen_bilden
    Local Temp_zeichen As String * 1
          '**** erst Array löschen
          For Z = 1 To Displays
                Display_zeichen(z) = ""
          Next
    
           '***** rückwärts den TempWert durchgehen
           Zähler = Displays
           For Z = Len(temp_anzeige) To 1 Step -1
                Temp_zeichen = Mid(temp_anzeige , Z , 1)
                '*** nur wenn kein Dez.Punkt, übernehmen
                If Temp_zeichen <> "." Then
                      Display_zeichen(zähler) = Temp_zeichen
                      Decr Zähler
                End If
           Next
           '**** fehlende Zeichen sind nun leere Strings!!!
    End Sub
    
    Sub Ausgabe
    Local Zeichen As Byte
    For Z = 1 To Displays
    
          Zeichen = Display_zeichen(z)
          If Zeichen = "" Then
                '**** Blank
                Temp = 15
          Elseif Zeichen = "-" Then
                Temp = 10
          Else
                Temp = Val(zeichen)
          End If
    
          '**** Dez.Punkt
          If Z = Dezpunkt Then
                Temp = Temp Or 128
          End If
    
          'Wert = Z * 256
          'Wert = Wert + Temp
          Wert = Makeint(temp , Z)       '**** geht wesentlich schneller!!!
          Send_bytes Wert
          Waitms 200
    Next
    End Sub
    Wolfgang

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    39
    Beiträge
    366
    Danke, entlich jemand, der versteht was ich mein.
    Ich werd mir den code mal anschauen, und versuchen ihn nachzuvollziehen.
    nochmal vielen dank

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    beim dimmern ist kein widerstand vorhanden. die leuchtbalken werden gepulst. es fliesst nicht immer ein strom voller strom. wenn nämlich alle leuchtbalken an sind (dauerstrom) würden die bauteile zu warm und kaputt ghen.

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Solar Speicher und Akkus Tests