Back to the store.

WS2811 SMD5050 RGB LEDs


This is the technical details page for my SMD5050 LEDs based on the WS2811 IC. This IC has similar timings to the TM1809 IC (I've been told). Products based on this IC have the advantage of being extremely easy to obtain and they're generally much less expensive than WS2801 or LPD8806 counterparts. The downside is that this IC does not use a clock line, and thus data must be clocked in with tight timing on the data line.

LED strips/pixels using these ICs can be driven from a relatively fast PIC MCU using a 4mhz SPI clock and the data line only. I've had success clocking data in using CCS C on a 64mhz PIC with a 4mhz SPI clock (see example code below). Writing 0b11110000 for a '1' and 0b10000000 for a '0' seems to work.

This technical page is a work in progress as details are still being verified as of 2012-09-12.


I'm currently working on sourcing a quality data sheet for this IC.

Physical dimenstions:

These are SMD5050 RGB LEDs (5mm package) with an integrated WS2811 IC inside of the LED. A diagram is below.


These LEDs take data in green, red, blue order (as opposed to red, green, blue).

Sample code:

ws2811.c - written in CCS C for PIC Microcontrollers

Other resources:

The Arduino FastSPI library at should support products based on this chip. The TM1809 timings/settings have been reported to work with these.

The AUS Christmas site,2046.msg17223.html#msg17223 has some details on talking to these chips.

The DIY Christmas site has some detail on these chips as well.

From the DIY Christmas URL:

Re: WS2811 pixel compatibility
First of all, I don't think this signalling scheme is NRZ. Basically, all of these pixels (1804 and 2811 and even the GE ColorEffects chips) work essentially the same way. There is a low-to-high transition at the start of each bit cell, then at the center of the bit cell the chip samples the data line to determine if the bit is a 1 or a 0. So all that's required is that some time after the start of the bit cell, and prior to the center of the bit cell, the sender has to (in the case of a 0) return the data line to 0. In the case of a 1 the sender must return the data line to 0 some time *after* the mid-point of the bit cell.

The 1804s recommended timing uses a scheme which essentially divided the bit cell into three segments. For a nominal 800kbps data rate, the bit cell is 1250ns long. For an 1804 the recommendation was to send 833ns high (2/3) followed by 417ns low (1/3) for a 1 or 417 ns high followed by 833ns low for a 0.

The WS2811 recommended timing essentially divides the bit cell into fifths. A 1 is sent as 1000ns high (4 segments) followed by 250ns low (1 segment), while a 0 is sent as 250ns high and 1000 ns low. The fact is that either approach will work, the only thing the pixel chip really cares about is the state of the data line at 625ns.

The "1804" apprpach has the advantage that less bandwidth is required on the wiring between pixels since the narrowest pulse we are ever sending is 417ns, while the 2801 technique requires more bandwidth since we are sending 250ns pulses. OTOH, the 2811 technique has better noise immunity since the transition time of the data line is farther away from the sample point.

Both data sheets spec timings as +/- 150ns. So let's look at the worst case:

With an 1804, worst case is a 0 sent as 567ns high (417+150) followed by a transition to low. That means the time where the data line transitions from 1 to 0 (567ns) is only 58ns from the point where the chip samples the data line (625ns). With a 2811, say a 0 is sent as 400ns high (250+150). Now there's still 225ns between the time the data line transitions to 0 and the sample point, so much better in terms of noise immunity.

At this point I'm using the WS2811 recommended timing for both 2811s and 1804s, and the 1804s appear to be happy. Likewise the 2811s will work with the 1804 timing recommendations as long as the data rate is very close to 800kbps.

Back to the store.