Go Down

Topic: WS2803 versus WS2801 (Read 18687 times) previous topic - next topic


Well, if you insist on putting resistors on your LEDs it might be fun to see what happens.

Like I mentioned in my previous post, I put 150 on the red, and 100 on the blue and green. This was for running them from 5volts. My LEDs did not list the forward voltage, so I had to solder up some resistors, measure the voltage drop, and calculate how much current. the goal was to find out what resistance I need from 5 volts to get 20ma current draw on each LED.

Im not an engineer, but my guess is that with the resistors on the LED like that will cause the WS2803 chip to send more current than it would otherwise, and may overload that chip. It will be interesting to see what happens.



What happens, when I connect the LED color without resistance, AFTER
A few minutes to observe that empesé started flashing LED.
RED LED consumes less volt OTHERS, SO LETS GO TO CHIT more volts.

What resistance should I put for these specs I described?


According to the datasheet on the 2803:
"The WS2803 ownes 18 output channels, each channel can
drive a constant current up to 30mA."

You can control the current at 20ma to the LED, you dont need to control the voltage.


Hi, if anyone could get the ws2803 to work beautifully with Vixen light sequencer using the generic serial plugin I'd love them to bits. The WS2803single library would be a good candidate I think? or FastSPI. Running 3x hex inverters > 18 N type mosfets increases the current capability considerably as well. Just need it to talk to Vixen and my setup will be good to go!


The comments below are from initial testing only and are subject to change based on feedback.

The 144 bit requirement means this chip needs to be fed in full 18 LED values.  So if you have 52 LEDs, you have to say 54 LEDs in the setup and then just turn the last two off in your code if using the old library.  I created a version of the single library that buffers the last part automatically allowing you to use 52 in your code.  

Other notes:
The data does not go into the chips the say way.  The order of the ports is normal 0 through 17 but the data is sent to each chip backwards.  So if you have three chips, the first chip data should be chip 3 and the final chip data should be chip 1.   An updated version of the library attached below - replacing the old one.

Updated Library:
Attached is the WS2803Single library:
Update 1) This version will buffer the difference if an increment of 18 LEDs is not used. Note that when you use numPixels() it will return the new LED count, not the value passed in. So if you start with 37 - it is buffered to 54 .. so numPixels() will return 54.  In your code you can simply use the same value originally instantiated .. just do not rely on the numPixels method for this unless you want to include buffered LEDs not attached in your patterns.
Update 2) This library sends the data in the correct order (chips backwards - ports forward).  This should make using the original library for WS2801 .. the singleWS2801 and this library work with no other change needed in the code outside the class and library names. Tested both SPI and bigbang methods.

I'm trying to get your code to work, but I get the following messages:

strandtest:28: error: 'WS2803Single' does not name a type
strandtest.ino: In function 'void setup()':
strandtest:31: error: 'strip' was not declared in this scope
strandtest.ino: In function 'void loop()':
strandtest:43: error: 'strip' was not declared in this scope
strandtest:45: error: 'strip' was not declared in this scope
strandtest:47: error: 'strip' was not declared in this scope
strandtest:54: error: 'strip' was not declared in this scope


Apr 01, 2013, 06:49 am Last Edit: Apr 01, 2013, 06:55 am by Omnimusha Reason: 1
good, so long as you start this project.

I have a problem and do not know how to fix it. the problem is the issue of
data storage.

for example, for an image of 24bits generarar, I have 3bytes separately for RGB. the image is 54 * 360Pixels. LedsRGB 54, which
R for a single channel, the data amount is 19440.

arduino which says that I have occupied 74% of the memory.

Would there be any way to store this data in a more efficient?
one could compress the image and then decompress when painting?

uint8_t R [] = {number of data = 19440}.
uint8_t G [] = {249,149,49,149,149,249,449, ............................ amount of data = 19440}
uint8_t B [] = {}

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131