B4R Code Snippet SN74HC595N - my effort with this shi(f)t register

Discussion in 'B4R Code Snippets' started by Johan Schoeman, May 26, 2019.

  1. Johan Schoeman

    Johan Schoeman Expert Licensed User

    The SN74HC595N seem to be a very temperamental shi(f)t register. Took me hours to try and figure it out. Seems to have a lot to do with the timing when driving LED's (sinking too much current if they are on for too long?).

    Well, this is my effort - the LED's flicker on/off, one at a time, from LSB to MSB and then again from MSB to LSB.

    No libraries other than the Core library.

    Wiring Diagram:

    shift_register_bb.png


    Photo shot:
    20190526_132516.jpg

    Sample code:

    Code:
    Sub Process_Globals
        
    'These global variables will be declared once when the application starts.
        'Public variables can be accessed from all modules.

        
    Public Serial1 As Serial
        
    Private datapin, latchpin, clockpin As Pin
        
    Private Registers(8As Boolean
        
    End Sub

    Private Sub AppStart
        Serial1.Initialize(
    115200)
        
    Log("AppStart")

        datapin.Initialize(
    8, datapin.MODE_OUTPUT)                 'data - pin 14 on 74HC595
        latchpin.Initialize(9, latchpin.MODE_OUTPUT)               'latch - pin 12 on 74HC595
        clockpin.Initialize(10, clockpin.MODE_OUTPUT)              'clock - pin 11 on 74HC595
        AddLooper("myLooper")
        
    End Sub

    Sub myLooper

        
    For i = 0 To 7                  'switch off all led's
            Registers(i) = False
        
    Next
        UpdateRegister
        Delay(
    10)
        
        
    For i = 0 To 7                   'switch led's from LSB to MSB one at a time (only one led active at a time)
            Registers(i) = True
            
    For j = 0 To 7
                
    If j <> i Then
                    Registers(j) = 
    False
                
    End If
            
    Next
            Delay(
    10)       
            UpdateRegister       
        
    Next
        
        
    For i = 0 To 7                  'switch off all led's
            Registers(i) = False
        
    Next
        UpdateRegister
        Delay(
    10)
      
        
    For i = 7 To 0 Step - 1        'switch led's from MSB to LSB one at a time (only one led active at a time)
            Registers(i) = True
            
    For j = 0 To 7
                
    If j <> i Then
                    Registers(j) = 
    False
                
    End If
            
    Next
            Delay(
    10)
            UpdateRegister
        
    Next
        
        
    For i = 0 To 7                'switch off all led's
            Registers(i) = False
        
    Next
        UpdateRegister
        Delay(
    10)
        
    End Sub

    Private Sub UpdateRegister()
        
        latchpin.DigitalWrite(
    False)                   'take the latch pin low - make it ready to start pushing in 8 bits

        
    For i = 0 To 7
            clockpin.DigitalWrite(
    False)               'take the clock pin low
            Delay(1)
            datapin.DigitalWrite(Registers(i))         
    'push in a bit
            Delay(1)
            clockpin.DigitalWrite(
    True)                'take the clock pin high
            Delay(1)
        
    Next

        latchpin.DigitalWrite(
    True)                    'enable the 8 data outputs on the 74HC595 with the 8 bits that were pushed in
        Delay(1)
        
    End Sub
     

    Attached Files:

  2. derez

    derez Expert Licensed User

Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice