-
        

Ergebnis 1 bis 4 von 4

Thema: Bascom Schieberegister 74HC595

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36

    Bascom Schieberegister 74HC595

    Anzeige

    Hallo, hab ein Problem bzw versteh das mit diesem Schieberegister nicht.
    Ich hab eine LED Röhre mit 3 74HC595, diese hab ich an einen Atmega8 wie folgt angeschlossen,
    DATA Port B0 und Pin 14 am 74HC...
    Clock Port B1 und Pin 11 am 74HC...
    Load Port B3 aund Pin 12 am 74HC...
    Pin9 geht dann wieder an die 14 zum nächsten 74HC....

    Nun hab ich folgenden Code im Imternet gefunden und an meins angepasst.

    Code:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Data_out Alias Portb.0                                      ' DAT - of the first 74HC595
    Clock_out Alias Portb.1                                     ' SRCLK - 74HC595
    Latch_out Alias Portb.3                                     ' RCLK
    
    Data_out_dir Alias Ddrb.0
    Clock_out_dir Alias Ddrb.1                                  ' *** define direction regs ***
    Latch_out_dir Alias Ddrb.3
    
    Const Shift_delay = 20                                      ' shift delay in microseconds
    
    Declare Sub Send_bytes()                                    ' send byte array to shift registers
    
    Dim Tempbyte1 As Byte
    Dim Bytes(3) As Byte                                        ' byte shift reg output buffer
    Dim I As Byte
    Reset Clock_out
    Reset Data_out
    Reset Latch_out
    
    ' set the data direction for I/O
    Set Clock_out_dir
    Set Data_out_dir
    Set Latch_out_dir
    
    Bytes(1) = &HAA
    Bytes(2) = &H55
    Bytes(3) = &HFF
    Do
    Send_bytes
     Bytes(3) = Bytes(3) + 1
     Bytes(2) = Bytes(2) + 1
     Bytes(1) = Bytes(1) + 1
    Wait 2
    Loop
    
    Sub Send_bytes()
       For I = 3 To 1 Step -1                                   ' send byte array to shift regs
         Tempbyte1 = Bytes(i)
         Shiftout Data_out , Clock_out , Tempbyte1 , 0 , 8 , Shift_delay
       Next I
       Set Latch_out                                            ' latch the shift reg to outputs
       Waitms 1
       Reset Latch_out
    End Sub
    So der Code läuft auch, soll heißen die Segmente leuchten unterschiedlich eben alle 2 sek anders.
    Was ich nun nicht verstehe, ich kann auch in den Zeilen
    Bytes(3) = Bytes(3) + 1
    Bytes(2) = Bytes(2) + 1
    Bytes(1) = Bytes(1) + 1

    Zahlen schreiben, also z.B. Bytes(3) = 100
    aber gibts denn keine Logik bei den Zahlen? was bewirken denn die Zahlen? z.B. 3 da geht das unterste Feld an, bei 33 das nächste.

    Kanns mir bitte einer erklären? Mir fehlt die Logik dahinter.
    Oder einen anderen Code Posten der eine Logik enthällt. oder muss ich schaun welche LEDs an welchen Ausgängen der 74HC hängen?

    Danke kollimann
    Danke

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36
    So hab nochmal umgebaut.
    Jetzt beginnt alles einen Sinn zu ergeben, man muss auch richtig anklemmen

    Wir haben 3 chips also
    Dim Daten_zu_latch(3) As Byte
    dann senden wir die Daten
    Daten_zu_latch(3) = &B00010000
    Daten_zu_latch(2) = &B00000100
    Daten_zu_latch(1) = &B00010000

    Daten_zu_latch(3) = &B00010000 bedeutet das kanal 5 des 3.chips an ist alle anderen aus
    Daten_zu_latch(2) = &B00000100 bedeutet das kanal 3 des 2.chips an ist alle anderen aus
    usw usw

    jetzt muss ich nur noch rausfinden wie ich die "1" verschieben kann um mal Lauflicht hinzubekommen.

    DANKESCHÖN

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.11.2006
    Ort
    Werne
    Alter
    29
    Beiträge
    18
    Hi,
    such mal in der Hilfe nach dem Rotate befehl. Steht dort super erklärt.

    MfG Tretsch

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36
    Irgendwie häng ich fest, es klappt nicht.
    Ich hatte erst mit 6 74ern versucht da ging alles soweit, nun hab ich 9 74er und die machen irgendwie nur durcheinander.
    Liegts amCode?

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Dim I As Integer
    Dim S As Integer
    
    Dim Segment(9) As Byte
    ' SPI Bus (Hardware) als Master konfiguiren
    Config Spi = Hard , Master = Yes
    
    ' SPI Bus initialisieren
    ' setzt das DDR Register entsprechend
    Spiinit
    
    ' Bytes für die Daten
    
    Segment(1) = &B00000001
    Segment(2) = &B00000001
    Segment(3) = &B00000001
    
    Segment(4) = &B00000001
    Segment(5) = &B00000001
    Segment(6) = &B00000001
    
    Segment(7) = &B00000001
    Segment(8) = &B00000001
    Segment(9) = &B00000001
    
    Do
    For I = 1 To 128
    Segment(1) = Segment(1) + I
    Segment(2) = Segment(1) + I
    Segment(3) = Segment(1) + I
    
    Segment(4) = Segment(1) + I
    Segment(5) = Segment(1) + I
    Segment(6) = Segment(1) + I
    
    Segment(7) = Segment(1) + I
    Segment(8) = Segment(1) + I
    Segment(9) = Segment(1) + I
    Spiout Segment(1) , 9
    Wait 1
    Next
    Loop
    Danke

Berechtigungen

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