;RGB MATRIX PANEL TESTER. - CLIVE 14/JAN/2019. ;RGB 75hub VIDEO WALL PANEL TESTER ;B0 RED1 ;B1 GREEN1 ;B2 BLUE1 ;B3 RED2 ;B4 GREEN2 ;B5 BLUE2 ;B6 CLOCK ;B7 LATCH ;A0 MULTIPLEX A ;A1 MULTIPLEX B ;A2 MULTIPLEX C ;A3 MULTIPLEX D (RESERVED FOR 16 LINE SCAN) ;A6 OUTPUT ENABLE (ACTIVE LOW) list p=16f627A ; list directive to define processor #include ; processor specific variable definitions errorlevel -302 ; suppress message 302 from list file __CONFIG _CP_ON & _WDT_ON & _BODEN_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _LVP_OFF ;DEFINITION OF VARIABLES THAT CAN BE CHANGED FOR FINE TUNING SCANSPEED EQU D'4' ;MULTIPLEXING SCAN SPEED (DEFAULT 4) DELAYCAL EQU D'150' ;SCAN SPEED FOR ROW DRIVE TEST (DEFAULT 150) STROBEREPS EQU D'3' ;NUMBER OF FLASHES OF OUTPUT ENABLE TEST (DEFAULT 3) SWEEPNUM EQU D'3' ;NUMBER OF ROW DRIVE TEST SWEEPS (DEFAULT 3) ;MEMORABLE NAMING OF RAM FILES (EACH JUST AN 8 BIT BYTE) OUTLOOP EQU 0X20 ;OUTER LOOP INLOOP EQU 0X21 ;INNER LOOP SCANLINE EQU 0X22 ;MULTIPLEX SCANNING COUNTER SCANDEL EQU 0X23 ;SCAN DELAY COUNTER FRAMECOUNT EQU 0X24 ;FRAME DURATION COUNTER COLOURS EQU 0X25 ;COLOUR CHART FRAMETIME EQU 0X26 ;DURATION OF EACH FRAME DURING TEST PACKER EQU 0X27 ;FRAME TIME PACKER SLOWREPS EQU 0X28 ;SLOW SCAN REP COUNTER STROBELOOP EQU 0X29 ;STROBE REP COUNTER ;INITIALISATION OF PROCESSOR'S REGISTERS AND OPTIONS. REBOOT NOP NOP NOP NOP MOVLW B'00000000' ;SET ALL PORT A OUTPUTS OFF MOVWF PORTA ;MOVE TO PORT A MOVLW B'00000000' ;SET ALL PORT B OUTPUTS OFF MOVWF PORTB ;MOVE TO PORT B MOVLW 0X07 MOVWF CMCON ;DISABLE COMPARATORS BCF STATUS,RP1 ;MAKE SURE ACTIVITY IS LIMITED TO BANKS 0 + 1 BSF STATUS,RP0 ;SWITCH TO BANK 1 BSF PCON,3 ;MAKE SURE INTERNAL OSCILLATOR IS RUNNING AT HIGH SPEED. MOVLW B'11111111' ;CONFIGURE OPTION REGISTER FOR MAX WDT PRESCALE. MOVWF OPTION_REG MOVLW B'00100000' ;SET PORTS TRISTATE REGISTERS. MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BCF STATUS,RP0 ;SWITCH BACK TO BANK 0 ;PATTERNS START HERE. START MOVLW D'20' ;20 = 1 SECOND MOVWF FRAMETIME ;SET DURATION OF SINGLE COLOUR FRAME CLRF PORTA CLRF COLOURS COLOURLOOP CLRF PORTB ;THIS ROUTINE SETS PANEL RGB BASED ON COUNTER BTFSC COLOURS,0 ;TEST BIT ZERO OF COLOUR COUNTER BSF PORTB,0 ;IF HIGH SET RED1 OF PANEL HIGH BTFSC COLOURS,0 ;TEST BIT ZERO OF COLOUR COUNTER AGAIN BSF PORTB,3 ;IF HIGH SET RED2 OF PANEL HIGH BTFSC COLOURS,1 ;SAME AGAIN FOR GREEN BSF PORTB,1 BTFSC COLOURS,1 BSF PORTB,4 BTFSC COLOURS,2 ;AND AGAIN FOR BLUE BSF PORTB,2 BTFSC COLOURS,2 BSF PORTB,5 CALL SHIFTFILL ;FILL DISPLAY SHIFT REGISTER WITH CHOSEN COLOUR CALL FRAME ;DISPLAY FRAME INCF COLOURS ;INCREMENT COLOUR COUNTER BTFSS COLOURS,3 ;IF ROLLING OVER TO BIT 3 THEN FINISH ROUTINE GOTO COLOURLOOP ;IF STILL JUST BITS 0,1 AND 2 THEN KEEP LOOPING ;CREATE COLOUR BAR BY STEPPING THROUGH COLOURS ADDING FOUR STEPS OF EACH TO PANEL MOVLW D'80' ;80 = 4 SECONDS MOVWF FRAMETIME ;SET DURATION OF COLOUR BAR FRAME CLRF COLOURS COLOURBAR CLRF PORTB BTFSC COLOURS,0 ;CREATE RED COLOURS AS ABOVE ROUTINE BSF PORTB,0 BTFSC COLOURS,0 BSF PORTB,3 BTFSC COLOURS,1 ;AND GREEN COLOURS BSF PORTB,1 BTFSC COLOURS,1 BSF PORTB,4 BTFSC COLOURS,2 ;AND BLUE COLOURS BSF PORTB,2 BTFSC COLOURS,2 BSF PORTB,5 CALL SHORTSHIFT ;CALL ROUTINE THAT ADDS FOUR STEPS TO DISPLAY INCF COLOURS BTFSS COLOURS,3 ;IF COLOUR BAR COMPLETE END ROUTINE AND DISPLAY GOTO COLOURBAR ;IF NOT THEN KEEP LOOPING CALL FRAME ;DISPLAY COLOUR BAR ;OUTPUT ENABLE PANEL INPUT TEST THAT FLASHES A PAIR OF LINES. (OE ACTIVE LOW) OETEST MOVLW B'00111111' ;SET ALL CHANNELS AT WHITE MOVWF PORTB CALL SHIFTFILL ;FILL RGB SHIFT REGISTERS WITH WHITE MOVLW STROBEREPS ;LOAD NUMBER OF TIMES TO STROBE "OUTPUT ENABLE" MOVWF STROBELOOP STLOOP CLRF PORTA ;RESET ROW COUNTER TO FIRST ROWS CALL DELAY CALL DELAY BSF PORTA,6 ;SET OE HIGH TO TURN DISPLAY OFF CALL DELAY CALL DELAY DECFSZ STROBELOOP,1 GOTO STLOOP ;MOSFET TEST THAT SEQUENTIALLY LIGHTS PAIRS OF LINES SLOWSCAN MOVLW SWEEPNUM ;SET NUMBER OF SLOW SWEEPS MOVWF SLOWREPS RELOOP MOVLW D'7' ;NUMBER OF LINES TO SCAN MINUS ONE MOVWF SCANLINE CLRF PORTA ;FIRST LINE CALL DELAY SLOWLOOP INCF PORTA,1 ;INCREMENT PANEL LINE ADDRESS CALL DELAY ;CALL SHORT DELAY TO SHOW LINE DECFSZ SCANLINE,1 ;DECREMENT LINE COUNTER GOTO SLOWLOOP ;IF STILL SCANNING LOOP BACK DECFSZ SLOWREPS,1 ;DECREMENT NUMBER OF SCANS COUNTER GOTO RELOOP ;IF NOT ZERO THEN SCAN AGAIN CLRF PORTB ;CLEAR RGB INPUTS FOR BLACK LINE CALL SHIFTFILL ;FILL DISPLAY WITH BLACK TO AVOID FLASH GOTO START ;RESTART PATTERNS FROM BEGINNING ;SHORT DELAY ROUTINE FOR OUTPUT ENABLE AND MOSFET TESTS DELAY MOVLW DELAYCAL ;LOAD TIME DELAY SETTING MOVWF OUTLOOP ;LOAD TO COUNTER DELOOP CLRWDT ;CLEAR PROCESSORS WATCHDOG TIMER DECFSZ INLOOP,1 ;TWO NESTED LOOPS FOR LONGER TIME DELAY GOTO DELOOP DECFSZ OUTLOOP,1 GOTO DELOOP RETURN ;DISPLAY FIXED OR COLOUR BAR FRAME FRAME NOP ;DISPLAYS FRAME OF TEST SEQUENCE MOVF FRAMETIME,0 ;LOAD DURATION OF FRAME MOVWF FRAMECOUNT FRAMELOOP CALL MULTIPLEX DECFSZ PACKER,1 ;CLOSED 256 STEP LOOP FOR TIMING PRESCALE GOTO FRAMELOOP DECFSZ FRAMECOUNT,1 GOTO FRAMELOOP RETURN ;SCAN LINES OF DISPLAY MULTIPLEX MOVLW D'7' ;NUMBER OF LINES TO SCAN MINUS ONE MOVWF SCANLINE CLRF PORTA ;CLEAR PANEL ADDRESS TO FIRST LINE CALL LINEDEL ;VERY SHORT SCANNING DELAY SCANLOOP INCF PORTA,1 ;INCREMENT PANEL ADDRESS CALL LINEDEL ;VERY SHORT DELAY DECFSZ SCANLINE,1 ;DECREMENT SCAN LINE COUNTER GOTO SCANLOOP ;KEEP LOOPING IF SCAN NOT FINISHED RETURN ;RETURN TO ROUTINE THAT CALLED THIS ONE ;SHORT DELAY FPR MULTIPLEXING STEPS LINEDEL MOVLW SCANSPEED ;LOAD MULTIPLEXING SPEED SETTING MOVWF SCANDEL LINELOOP CLRWDT ;CLEAR WATCHDOG TIMER TO AVOID CHIP RESET DECFSZ SCANDEL,1 ;DECREMENT TIME COUNTER GOTO LINELOOP ;KEEP LOOPING IF NOT ENDED RETURN ;LOAD SHIFT REGISTER SHIFTFILL MOVLW D'32' ;NUMBER OF STEPS TO FILL FULL SHIFT REGISTER MOVWF OUTLOOP LOOP1 BSF PORTB,6 ;SET CLOCK OUTPUT CLRWDT BCF PORTB,6 ;CLEAR CLOCK OUTPUT DECFSZ OUTLOOP,1 ;DECREMENT CLOCK PULSE COUNTER GOTO LOOP1 ;KEEP LOOPING IF NOT COMPLETE BSF PORTB,7 ;SET LATCH TO MOVE SHIFT REGISTER CONTENTS TO LEDS NOP BCF PORTB,7 ;CLEAR LATCH RETURN ;LOAD SHIFT REGISTER WITH FOUR STEPS FOR MAKING COLOUR BAR SHORTSHIFT MOVLW D'4' ;NUMBER OF STEPS TO FILL FULL SHIFT REGISTER MOVWF OUTLOOP LOOP2 BSF PORTB,6 ;SET CLOCK OUTPUT CLRWDT BCF PORTB,6 ;CLEAR CLOCK OUTPUT DECFSZ OUTLOOP,1 ;DECREMENT CLOCK PULSE COUNTER GOTO LOOP2 ;KEEP LOOPING IF NOT COMPLETE BSF PORTB,7 ;SET LATCH TO MOVE SHIFT REGISTER CONTENTS TO LEDS NOP BCF PORTB,7 ;CLEAR LATCH RETURN END ; directive 'end of program'