251209_neopixel
This commit is contained in:
parent
02aaf2b804
commit
8ee91bc2c9
@ -25,3 +25,78 @@
|
||||
#define UART_BAUD 9600
|
||||
#define UART_BIT_DELAY_US (1000000UL / UART_BAUD)
|
||||
|
||||
|
||||
|
||||
typedef struct {
|
||||
uint8_t g;
|
||||
uint8_t r;
|
||||
uint8_t b;
|
||||
} RGBColor;
|
||||
|
||||
RGBColor pixels[NUMPIXELS];
|
||||
|
||||
// !time carefully for 800kHz (1.25us cycle) on 8MHz F_CPU
|
||||
void ws2812_send() {
|
||||
uint8_t *ptr = (uint8_t *)pixels;
|
||||
uint16_t count = NUMPIXELS * 3;
|
||||
uint8_t mask = _BV(NEOPIXEL_PIN);
|
||||
uint8_t cli_mask = ~mask;
|
||||
|
||||
NEOPIXEL_DDR |= mask; //set to output
|
||||
|
||||
uint8_t sreg = SREG;
|
||||
cli(); // disable interrupts
|
||||
|
||||
NEOPIXEL_PORT &= cli_mask;
|
||||
__asm__ __volatile__ (
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
);
|
||||
|
||||
while (count--) {
|
||||
uint8_t data = *ptr++;
|
||||
|
||||
for (uint8_t i = 8; i--; ) {
|
||||
if (data & 0x01) {
|
||||
/*__asm__ __volatile__ (
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
);*/
|
||||
NEOPIXEL_PORT |= mask;
|
||||
__asm__ __volatile__ (
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
|
||||
);
|
||||
NEOPIXEL_PORT &= cli_mask;
|
||||
} else {
|
||||
NEOPIXEL_PORT |= mask;
|
||||
__asm__ __volatile__ (
|
||||
"nop\n\t" "nop\n\t"
|
||||
);
|
||||
NEOPIXEL_PORT &= cli_mask;
|
||||
}
|
||||
|
||||
data <<= 1;
|
||||
__asm__ __volatile__ (
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
"nop\n\t" "nop\n\t" "nop\n\t" "nop\n\t"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
SREG = sreg;
|
||||
sei(); // enable interrupts
|
||||
}
|
||||
|
||||
void setPixelColor(uint8_t n, uint8_t r, uint8_t g, uint8_t b) {
|
||||
if (n < NUMPIXELS) {
|
||||
pixels[n].r = r;
|
||||
pixels[n].g = g;
|
||||
pixels[n].b = b;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user