Made a few mistakes, sorry...
Code:'**************************************************************** '* Name : NeoPixel '* Author : Michel Jasmin & The Signal Path dot com BLOG '* Notice : Ref: The Signal Path dot com BLOG '* : Tutorial on Programming the NeoPixel (WS2812) RGB LEDs '* : http://thesignalpath.com/blogs/2014/07/14/watcheditdeletetutorial-on-programming-the-neopixel-ws2812-rgb-leds-equipment-giveaway/ '* Date : 2014-08-13 '* Version : 1.0 '* Notes : '* : '**************************************************************** 'PIC18F25K22 @40MHz #CONFIG __CONFIG _CONFIG1H, _FOSC_HSHP_1H & _PLLCFG_OFF_1H & _PRICLKEN_ON_1H & _FCMEN_ON_1H & _IESO_ON_1H __CONFIG _CONFIG2H, _WDTEN_OFF_2H __CONFIG _CONFIG3H, _PBADEN_ON_3H & _CCP2MX_PORTB3_3H & _MCLRE_EXTMCLR_3H __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L __CONFIG _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L __CONFIG _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H #ENDCONFIG DEFINE OSC 40 DEFINE NO_CLRWDT 1 ' Don't waste cycles clearing WDT '------------ ALIAS ------------------------- LedPin VAR LATC.3 NeoPin VAR LATC.5 '------------ Const ------------------------- NEO_NUM CON 60 CR CON 13 LF CON 10 '------------ Variables ------------------------- NeoGreen VAR BYTE[NEO_NUM] NeoBlue VAR BYTE[NEO_NUM] NeoRed VAR BYTE[NEO_NUM] NeoPixel VAR BYTE BitCount VAR BYTE TempW VAR WORD 'Flags AppFlags VAR BYTE DataBit VAR AppFlags.0 '------------------------ Initialization ------------------------------- Clear ' Clear RAM before entry TRISC.3 = 0 'Led Pin TRISC.5 = 0 'NeoPin TRISC.6 = 1 'TX1 TRISC.7 = 1 'RX1 'The serial port is used only for debugging purpose. RCSTA = $90 ' Enable serial port & continuous receive TXSTA = $24 ' Enable transmit, BRGH = 1 SPBRG = 17 ' 9600 Baud @ 40 MHz -0.03% SPBRGH = 4 BAUDCON.3 = 1 ' Enable 16 bit baudrate generator PAUSE 100 HSEROUT [CR,LF,CR,LF,"Test NeoPixel v 18",CR,LF] 'Blink a LED just to say: Hello, I'm alive! LedPin = 0 FOR TempW = 0 TO 4 TOGGLE LedPin PAUSE 250 NEXT LedPin = 0 DataBit = 0 GOSUB NeoInit '------------ Main program ------------------------- Main: 'For testing purpose: 'DataBit = 1 'GOSUB NeoBit 'GOTO Main GOSUB NeoDraw GOSUB NeoRotate PAUSE 25 GOTO Main END NeoBit: IF DataBit = 1 THEN '400ns pulse required NeoPin = 1 '3 nop = 500ns @ 32MHz '2 nop = 376ns @ 32MHz '2 nop = 300ns @ 40MHz '3 nop = 400ns @ 40MHz ASM nop nop nop ENDASM NeoPin = 0 ELSE '800ns pulse required NeoPin = 1 '5 nop = 740ns @ 32MHz '6 nop = 880ns @ 32MHz '6 nop = 700ns @ 40MHz '7 nop = 800ns @ 40MHz ASM nop nop nop nop nop nop nop ENDASM NeoPin = 0 ENDIF RETURN NeoInit: FOR NeoPixel = 0 TO (NEO_NUM - 1) IF NeoPixel < 10 THEN NeoGreen[NeoPixel] = 0 NeoBlue[NeoPixel] = 0 NeoRed[NeoPixel] = 64 ELSEIF NeoPixel < 20 THEN NeoGreen[NeoPixel] = 0 NeoBlue[NeoPixel] = 64 NeoRed[NeoPixel] = 0 ELSEIF NeoPixel < 30 THEN NeoGreen[NeoPixel] = 0 NeoBlue[NeoPixel] = 64 NeoRed[NeoPixel] = 64 ELSEIF NeoPixel < 40 THEN NeoGreen[NeoPixel] = 64 NeoBlue[NeoPixel] = 0 NeoRed[NeoPixel] = 0 ELSEIF NeoPixel < 50 THEN NeoGreen[NeoPixel] = 64 NeoBlue[NeoPixel] = 0 NeoRed[NeoPixel] = 64 ELSE NeoGreen[NeoPixel] = 64 NeoBlue[NeoPixel] = 64 NeoRed[NeoPixel] = 0 ENDIF NEXT RETURN NeoDraw: FOR NeoPixel = 0 TO (NEO_NUM + 1) TempW = (NeoPixel * 8) FOR BitCount = 7 TO 0 STEP -1 DataBit = NeoGreen.0[TempW + BitCount] GOSUB NeoBit NEXT FOR BitCount = 7 TO 0 STEP -1 DataBit = NeoRed.0[TempW + BitCount] GOSUB NeoBit NEXT FOR BitCount = 7 TO 0 STEP -1 DataBit = NeoBlue.0[TempW + BitCount] GOSUB NeoBit NEXT NEXT NeoPin = 0 RETURN NeoRotate: FOR NeoPixel = 0 TO (NEO_NUM - 1) NeoGreen[NeoPixel] = NeoGreen[NeoPixel + 1] NeoBlue[NeoPixel] = NeoBlue[NeoPixel + 1] NeoRed[NeoPixel] = NeoRed[NeoPixel + 1] NEXT NeoGreen[NEO_NUM - 1] = NeoGreen[0] NeoBlue[NEO_NUM - 1] = NeoBlue[0] NeoRed[NEO_NUM - 1] = NeoRed[0] RETURN




Bookmarks