PIC BASIC TLC5940 code


Closed Thread
Results 1 to 10 of 10

Hybrid View

  1. #1
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Grayscale values are 12-bits, and you need to send 16 of those values before latching the data, for a total of 192 bits.

    The code in the attachment is sending 1,536 bits (16*12*8).
    And the method you showed in post #1 would only send 128 (16*8).

    And your variable sizes aren't right. fade is a BYTE array, and can't hold 12-bit values. data1 is also a BYTE array, but you're using it like a WORD variable.

    I think something like this will work better ...
    Code:
    fade   var WORD[16]
    TempW  var WORD
    
    setGreys:
        for z = 0 to 15
            TempW = fade(z)
            shiftout ser, sclk, 1, [TempW\12]
        next z
            
        high xlat
        low xlat  
    return
    Then you could ...
    Code:
    RampCount  var WORD
    ChanCount  var BYTE
    
    RampUP:
        FOR RampCount = 0 to 4088 STEP 8
            FOR ChanCount = 0 to 15
                fade(ChanCount) = RampCount
            NEXT ChanCount
            GOSUB setGreys
            PAUSE 50
        NEXT RampCount
    RETURN
    
    RampDN:
        FOR RampCount = 4088 to 0 STEP -8
            FOR ChanCount = 0 to 15
                fade(ChanCount) = RampCount
            NEXT ChanCount
            GOSUB setGreys
            PAUSE 50
        NEXT RampCount
    RETURN
    Dot correction values are 6-bits. 16 of those would total 96-bits.
    <br>
    DT

  2. #2
    Join Date
    Aug 2009
    Posts
    5


    Did you find this post helpful? Yes | No

    Default

    Thanks for the help with the variable settings. This definitely helps as I'm sure I'm shifting out the right bits now.

    I'm still not getting any response from the TLC5940 though. Now instead of randomly blinking LEDs it's just staying off. I think this is fine because I'm shifting out the right bits, but I'm still confused with the ordering of the LATCH, BLANK, SER.

    If you look at the Timing Chart in the spec sheet they show the ordering, but there is this weird thing where they have a separate pulse GSCLK in addition to the main SCLK pulse. I'm not sure why they have this and I don't know how I'm supposed to do both at the same time..

  3. #3
    Join Date
    Sep 2003
    Location
    INDIA
    Posts
    161


    Did you find this post helpful? Yes | No

    Default Any luck !

    Take a look at this forum topic , maybe it can help you understand the logic of sending data to the chip.

    http://www.picaxeforum.co.uk/showthr...?t=8616&page=3

    let us know when you succeed.

  4. #4
    Join Date
    Aug 2009
    Posts
    5


    Did you find this post helpful? Yes | No

    Default good info

    Hey thanks for that link. That's some really good info. I had to to put this chip on hold because I got swamped with other things, but I was actually going to go back at it this week. This info thread you posted will help.

    I'll post my results (or non-results) later on this week.

    Thanks.

  5. #5
    Join Date
    Mar 2010
    Location
    Minnesota, USA
    Posts
    41


    Did you find this post helpful? Yes | No

    Default My code works but it flickers because my GSCLK is too slow HELP

    How can I get this to stop flickering? It flickers even at 16MHz. With 4 MHz it taks the GSCLK about 250 ms to complete making all the GSDATA that are 0's really stand out causing a flicker.

    Is there some other way I could do the GSCLK so I am not just turning the GSCLK pin H/L 4096 times?

    Code:
    ANSEL = 0 'ALL DIGITAL
    CMCON = 7 'COMPARATORS OFF
    TRISA = %00000000
    TRISB = %00000000
    
    DPIN        CON     7
    SCLK        CON     6
    XLAT        CON     5
    BLANK       CON     2
    VPRG        var     PORTA.0
    DCPRG       var     PORTA.2
    
    
    C1          var     byte
    C2          var     byte
    C3          var     word
    
    GSDATA      var     word
    Code:
    GOSUB preset
    '***************************************************
    '*                    Main Loop                    *
    '***************************************************
    LOOP:
    FOR GSDATA = 4095 TO 0 STEP -16
        gosub setgs
        gosub lightemup
    NEXT
    FOR GSDATA = 4095 TO 0 STEP 16
        gosub setgs
        gosub lightemup
    NEXT
    goto LOOP
    '***************************************************
    '*                      Set GS                     *
    '***************************************************
    SETGS:
    for C1 = 0 to 15                        ' for 16 outputs
        shiftout dpin,sclk,1,[GSDATA\12]    ' shift out 12 bit GS Data
    next
        PORTB = %00100000                   ' high xlat
        PORTB = %00000000                   ' low xlat
    return
    '***************************************************
    '*                   LIGHT EM UP                   *
    '***************************************************
    LIGHTEMUP:
    PORTB = %00000100                       ' high blank
    PORTB = %00000000                       ' All outputs = ON 
    for C3 = 0 to 4095                      ' Generate 4096 GSCLK pulses 
        PORTA = %00001000                   ' GSCLK HIGH 
        PORTA = %00000000                   ' GSCLK LOW 
    next
    return
    '***************************************************
    '*                      Preset                     *
    '***************************************************
    PRESET:
    'HIGH DCPRG
    HIGH VPRG                               ' Put into dot correction mode
    HIGH blank                              ' All outputs OFF
    low dpin                                ' Starts dot correction
    low xlat
    For C1 = 0 to 15                        ' 16 Ports
        shiftout dpin,sclk,1,[%111111\6]    ' 6 bits of Dot Correction per port
    next
    high xlat                               ' Latch bits into dot correct register
    low xlat
    low VPRG                                ' Enter GS Mode
    for C1 = 0 to 15
        for C2 = 0 to 11
            shiftout dpin,sclk,1,[%111111111111\12] 
        next
    next
    high xlat                               ' Latch bits into GS register 
    low xlat
    high SCLK                               '193rd CLK pulse
    LOW SCLK
    low blank                               ' All outputs = ON 
    return
    NOTE: This code is basically the same as the above Adruno code but I have a different fade routine. The above code used direct PORT addressing for GSCLK like I did but they were using an 8MHz Adruno for their project and it worked fine. I don't understand why this will not work in PBP with 16 MHz running the show.
    Last edited by wolwil; - 8th May 2010 at 21:23.

Similar Threads

  1. Making Program Code Space your playground...
    By Melanie in forum Code Examples
    Replies: 15
    Last Post: - 19th July 2008, 08:26
  2. pic Basic Pro 2.50a & debug statement
    By Phil Moore in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 17th March 2008, 09:41
  3. PIC BASIC or PIC BASIC PRO
    By kirkmans in forum USB
    Replies: 3
    Last Post: - 20th April 2007, 00:52
  4. Replies: 5
    Last Post: - 17th January 2006, 19:26
  5. Help with MPASM and PIC Basic
    By johngb in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 21st February 2003, 13:07

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts