MM
Learn by practice..
Vorige keer TLC5940 niet aan de praat gekregen, nu weer maar eens opgepakt maar lukt niet om het goed te krijgen. Hieronder mijn programma, er zal iets met GSCLK en BLANK niet goed gaan. maar omdat ik er zo lang mee bezig ben heb je kans dat ik veel te moeilijk ga denken. I s er iemand hier die kan zien waar het fout gaat?
FlowChart:
http://www.ti.com/lit/sw/slvc106/slvc106.pdf
Code:
'****************************************************************
'* Name : 00000_0.0.1_PI_TLC5940 *
'* Author : Martin Molendijk *
'* Notice : Copyright (c) 2011 Molendijk Pic programming *
'* : All Rights Reserved *
'* Date : 01-12-2015 *
'****************************************************************
'* PIC16F887 *
'* MCLR = E3 -| |- B7 = *
'* = A0 -| |- B6 = *
'* = A1 -| |- B5 = *
'* = A2 -| |- B4 = *
'* = A3 -| |- B3 = *
'* = A4 -| |- B2 = *
'* = A5 -| |- B1 = *
'* = E0 -| |- B0 = *
'* = E1 -| |- Vdd *
'* = E2 -| |- Vss *
'* Vdd -| |- D7 = *
'* Vss -| |- D6 = GSCLK *
'* xtal 20MHZ = A7 -| |- D5 = DCPRG *
'* xtal 20MHZ = A6 -| |- D4 = BLANK *
'* = C0 -| |- C7 = RX *
'* = C1 -| |- C6 = TX *
'* = C2 -| |- C5 = XLAT *
'* = C3 -| |- C4 = SCLK *
'* = D0 -| |- D3 = SIN *
'* = D1 -|________|- D2 = VPRG *
'* *
'****************************************************************
Device = 16F887
Config1 DEBUG_OFF , LVP_OFF , FCMEN_OFF , IESO_OFF ,BOR_OFF ,CPD_OFF , CP_OFF , MCLRE_off , PWRTE_ON , WDT_OFF , HS_OSC ;INTRC_OSC_NOCLKOUT
Config2 WRT_OFF , BOR21V
Declare Xtal = 20
;===============================================================================
;Symbolen
;===============================================================================
Symbol VPRG = PORTD.2
Symbol SDIN = PORTD.3
Symbol SCLK = PORTC.4
Symbol XLAT = PORTC.5
Symbol BLANK = PORTD.4
Symbol DCPRG = PORTD.5
Symbol GSCLK = PORTD.6
;===============================================================================
;Variabelen
;===============================================================================
Dim Index As Byte
Dim SpiTemp As Word
Dim SpiData As Word
Dim GSCLK_count As Word
Dim Data_count As Word
Dim c1 As Byte
Dim c2 As Word
Dim FirstCycleFlag As Bit
Dim n As Byte
;===============================================================================
;Poort instellingen
;===============================================================================
Clear
;76543210
TRISA = %11111010 ;TRIS instellingen : 1 is ingang - 0 is uitgang
TRISB = %11111111
TRISC = %00000000
TRISD = %00000000
TRISE = %000
;76543210
PORTA = %00000000 ;PORT instellingen : 1 is hoog - 0 is laag
PORTB = %11111111
PORTC = %00000000
PORTD = %00000000
PORTE = %000
;===============================================================================
;Declares
;===============================================================================
All_Digital TRUE
Declare PortB_Pullups = On ;Zet PoortB pullups aan
On_Interrupt OnInter ;Bij een overflow naar OnInter
;===============================================================================
;Includes
;===============================================================================
Include "Timer2 @20MHZ Inter 1mS.bas"
;===============================================================================
;Instellingen
;===============================================================================
Cls
PEIE = 1 ;
GIE = 1 ; Enable interrupt
TMR2IF = 0 ; TIMER2 interrupt vlag
TMR2IE = 1 ; TIMER2 interrupt enable
GSCLK = 0
SCLK = 0
DCPRG = 0
VPRG = 1
XLAT = 0
BLANK = 1
DelayMS 1000
GoTo Main
;===============================================================================
;Main
;===============================================================================
Main:
GoSub PRESET
While 1 = 1
SpiData = %1111111111111111
GoSub SPIout
Wend
;===============================================================================
;SPIout
;===============================================================================
SPIout:
If VPRG = 1 Then ;Als VPRG 1 is
VPRG = 0 ;Reset VPRG
FirstCycleFlag = 1 ;Set FirstCylceFlag
EndIf
GSCLK_count = 0 ;Reset GSCLK_count
Data_count = 0 ;Reset Data_Count
BLANK = 0 ;Zet BLANK op 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
For Data_count = 0 To (n*16 - 1)
GoSub Spi
Inc Data_count
Next
While GSCLK_count < 4095
GoSub pulseGSCLK
Inc GSCLK_count
Wend
BLANK = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GoSub pulseXLAT ;Geef puls XLAT
If FirstCycleFlag = 1 Then ;Als FirstCycleFlag 1 is
GoSub pulseSCLK ;Geef puls SCLK
EndIf
FirstCycleFlag = 0 ;FirstCycleFlag op 0
Return
;===============================================================================
;pulseXLAT
;===============================================================================
pulseXLAT:
High XLAT ;Puls XLAT
Low XLAT ;Puls XLAT
Return
;===============================================================================
;pulseSCLK
;===============================================================================
pulseSCLK:
High SCLK ;Puls SCLK
Low SCLK ;Puls SCLK
Return
;===============================================================================
;pulseGSCLK
;===============================================================================
pulseGSCLK:
High GSCLK ;Puls GSCLK
Low GSCLK ;Puls GSCLK
Return
;===============================================================================
;PRESET
;===============================================================================
PRESET:
n = 1 ;aantal TLC5940 in serie
High DCPRG ;Geen eeprom
High VPRG ;Dot correction mode
For c1 = 0 To (n*16 - 1) ;n*16 Ports
SHOut SDIN,SCLK,1,[%111111\6] ;6 bits voor Dot Correction per pin
Next
GoSub pulseXLAT ;Zet om
Return
;===============================================================================
;OnInter
;===============================================================================
OnInter:
Context Save
Bcf PIR1,1 ;TMR2IF = 0 ;TIMER2 Interrupt vlag wissen
Context Restore ;Terug naar programma
Return
;===============================================================================
;Spi
;===============================================================================
Spi:
Index = 15
Repeat
SDIN = SpiTemp.15 ;SDIN = SpiTemp.
GoSub pulseSCLK ;Geef puls SCLK
SpiTemp = SpiTemp << 1 ;Verschuif 1 bit
Dec Index
Inc GSCLK_count ;Verhoog GSCLK_count
GoSub pulseGSCLK ;Geef puls GSCLK
Until Index = 3
Return
Op dit moment branden de laatste 3 ledjes, en op GSCLK heb ik een freq. van 169Khz
Bij voorbaat dank,