diff --git a/firmware/ccconfig.h b/firmware/ccconfig.h index 9f8300a..c5d1ae5 100644 --- a/firmware/ccconfig.h +++ b/firmware/ccconfig.h @@ -2,8 +2,8 @@ #define _CCCONFIG_H #define CCEMBEDDED -#define NUM_LIN_LEDS 60 -#define USE_NUM_LIN_LEDS 60 +#define NUM_LIN_LEDS 66 +#define USE_NUM_LIN_LEDS NUM_LIN_LEDS #define DFREQ (40000) #endif diff --git a/firmware/main.c b/firmware/main.c index c5d5cac..1aa1006 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -179,7 +179,7 @@ int main(void) this_samp = (this_samp+1)%CIRCBUFSIZE; wf++; - if( wf == 128 ) + if( wf == 128 * 2) { NewFrame(); wf = 0; diff --git a/firmware/spi2812.c b/firmware/spi2812.c index bcc4e2f..b1f6937 100644 --- a/firmware/spi2812.c +++ b/firmware/spi2812.c @@ -282,13 +282,14 @@ void SendSPI2812( unsigned char * lightarray, int length ) static const uint8_t aoarray[4] = { 0b10001000, 0b10001110, 0b11101000, 0b11101110 }; int i; - if( length > SPI2812_MAX_LEDS ) length = SPI2812_MAX_LEDS; + int subdiv = 0; + uint8_t * buffbase = &MyBuffer[ZERO_BUFFER]; - MyBuffer[0] = 0; - for( i = 0; i < length; i++ ) + if( length * SPI2812_LED_SCALING > SPI2812_MAX_LEDS ) length = SPI2812_MAX_LEDS; + + for( i = 0; i < length;) { uint8_t * colorbase = &lightarray[i*3]; - uint8_t * buffbase = &MyBuffer[i*24/2+ZERO_BUFFER]; int j; for( j = 0; j < 3; j++ ) @@ -300,11 +301,17 @@ void SendSPI2812( unsigned char * lightarray, int length ) *(buffbase++) = aoarray[(c>>2)&3]; *(buffbase++) = aoarray[(c>>0)&3]; } + + if (++subdiv == SPI2812_LED_SCALING) { + subdiv = 0; + i++; + } } for( i = 0; i < ZERO_BUFFER; i++ ) MyBuffer[i] = 0; + length *= SPI2812_LED_SCALING; length *= 24/2; length += ZERO_BUFFER; diff --git a/firmware/spi2812.h b/firmware/spi2812.h index 674004f..4bdd362 100644 --- a/firmware/spi2812.h +++ b/firmware/spi2812.h @@ -6,6 +6,7 @@ //24 bits per LED, can fit two bits per byte of output. #define SPI2812_BUFFSIZE (SPI2812_MAX_LEDS*24/2) +#define SPI2812_LED_SCALING 3 void InitSPI2812(); void SendSPI2812( unsigned char * lightarray, int leds ); //Need one R, G, B per element.