'**************************************************************** '* Name : ws2811_16f1619_spi-Test.PBP * '* Author : richard * '* Notice : * '* : * '* Date : * '* Version : * '* Notes : PIC16F1619 * '* : ws8212 TEST Output on Rb7 * '**************************************************************** #CONFIG __config _CONFIG1, _FOSC_INTOSC & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __config _CONFIG2, _WRT_OFF & _PPS1WAY_OFF & _ZCD_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_HI & _LVP_ON __config _CONFIG3, _WDTCPS_WDTCPS6 & _WDTE_OFF & _WDTCWS_WDTCWS100 & _WDTCCS_LFINTOSC #ENDCONFIG define OSC 16 ; --- *** Oscillator *** --------------------------------------------------- OSCCON = %01111000 ;16 MHz, ANSELb = 0 ANSELA = 0 ANSELC = 0 nows con 192 ;NUMBER OF WS2812 *3 (85 x3 =255 max ) pixels var word bank0 p_offset var word bank0 p_pc var BYTE bank0 ;PIXEL COUNTER offset var word LED VAR PORTA.5 ' Assign name "LED" to goto overasm asm _showpix BANKSEL LATA BSF LATA,5 BANKSEL _offset movf _offset,w movwf FSR0 movf _offset+1,w movwf FSR0+1 BSF FSR0H ,7 nxby BCF PIR1,3 MOVIW FSR0 ++ BANKSEL SSP1BUF movwf SSP1BUF BANKSEL _p_pc BTFSs PIR1,3 GOTO $-1 DECFSZ _p_pc,F ;dec pixel count pc GOTO nxby BANKSEL LATA BCF LATA,5 BANKSEL _p_offset RETURN getaddr macro Text, Addr movlw low Text movwf Addr movlw High Text movwf Addr + 1 endm ENDASM rw1: @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;192 @ DW 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;384 @ DW 0,0,0, 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;576 @ DW 0,0,0, 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;768 @ DW 0,0,0 ,50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;960 @ DW 0,0,0, 0,0,0, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;1152 @ DW 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;1344 @ DW 0,0,0 ,50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 50,50,50, 0,0,0, 0,0,0, 50,50,50, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0 ,50,50,50, 50,50,50, 50,50,50, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;1536 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 @ DW 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 overasm: CLC1POL = $0e; CLC1SEL0 = $00; CLC1SEL1 = $0e; CLC1SEL2 = $00; CLC1SEL3 = $00; CLC1GLS0 = $08; CLC1GLS1 = $00; CLC1GLS2 = $00; CLC1GLS3 = $00; CLC1CON = $82; CLC2POL = $01; CLC2SEL0 = $00; CLC2SEL1 = $04; CLC2SEL2 = $28; CLC2SEL3 = $27; CLC2GLS0 = $44; CLC2GLS1 = $10; CLC2GLS2 = $80; CLC2GLS3 = $20; CLC2CON = $80; PPSLOCK = $55; PPSLOCK = $AA; PPSLOCK = 0 ; unlock PPS Rc4PPS = $04; CLC1 for testing RC6PPS = $0e; pwm for testing Rb7PPS = $05; CLC2 the output Rc3PPS = $10 ;sck for testing Rc7PPS = $11 ;sdo for testing PPSLOCK = $55; PPSLOCK = $AA; PPSLOCK = 1; ; lock PPS ' Adjust Timer2 period for desired baud rate ' One bit period is two Timer2 periods T2CON = $80 PR2 = 5 ' Adjust PWM1 duty cycle for desired "0" data-bit duty cycle ' ‘1’ data-bit duty cycle is automatically 50% PWM3CON = $80 PWM3DCH = 2 PWM3DCL = 0 ' MSSP configured for SPI master with Timer2_Period/2 clock SSP1CON1 = $23 ' Output on Rb7 TRISC = %00100111 TRISa = %11011111 TRISb = %01111111 led=0 @ getaddr _rw1,_pixels' Get a String from flash memory aloop: for p_offset=0 to 1536 step 24 p_pc=nows ;set number of leds to show offset = pixels+p_offset call showpix pause 200 next pause 1000 goto aloop stop end