I am trying to make a Pico program for a series of WS2812 LEDS. Before my Pico sends the correct signals, it give me long pulses to the left of the center in the picture. Everything to the right works as intented, I can't find what is causing this.

#include "pico/stdlib.h"
int main() {
const uint GREENDO = 16;
const uint BLUEBO = 17;
const uint LEDPIN = 25;
gpio_init(LEDPIN);
gpio_init(GREENDO);
gpio_init(BLUEBO);
gpio_set_dir(GREENDO, GPIO_OUT);
gpio_set_dir(BLUEBO, GPIO_OUT);
gpio_set_dir(LEDPIN, GPIO_OUT);
gpio_put(LEDPIN,1);
gpio_put(BLUEBO,0);
gpio_put(GREENDO,0);
int GRBValues[] ={1,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,};
int CurBit = 1;
for (size_t Index = 0; Index < 6; Index++){
for (size_t BitIndex = 0; BitIndex < 25; BitIndex++){
CurBit = GRBValues[BitIndex];
if (CurBit == 1){
//800-450
gpio_put(GREENDO,1);
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\n");
gpio_put(GREENDO,0);
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\n");
}else{
//400-850
gpio_put(GREENDO,1);
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
gpio_put(GREENDO,0);
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n");
asm volatile ("nop\nnop\nnop\n");
}
/* if (BitIndex == 0){
sleep_us(51); //Test to fix problem, did not work
}*/
}
}
while (true){
gpio_put(LEDPIN,0);
sleep_ms(1000);
gpio_put(LEDPIN,1);
sleep_ms(1000);
}
}
- I tried adding a delay after the first bit by 51us but I would then recive the unintentinal pulses again
- I also tried for loops that are empty and with junk data in them but then all bits were too long.
This might have something to do with starting a new for loop iteration after some time has passed, and if so, why not on every new for iteration.