Breaking News
View Comments: Threaded | Newest First | Oldest First
Phononscattering
User Rank
Manager
Product placement?
Phononscattering   1/1/2014 9:22:21 AM
NO RATINGS
I'd like to point out that these so-called "Neopixels" are not a proprietary Adafruit product, but can be bought all over the web. The part name is WS2812 (6 pins) or WS2812B (4 pins) by worldsemi. (www.world-semi.com)
That said, these LEDs are really amazing.

Max The Magnificent
User Rank
Blogger
Re: Product placement?
Max The Magnificent   1/2/2014 10:38:59 AM
NO RATINGS
@Phononscattering: I'd like to point out that these so-called "Neopixels" are not a proprietary Adafruit product, but can be bought all over the web.

Very interesting -- thanks for sharing -- I see that you can get 100 of these little rascals as standalones for just $39 from eBay.

Duane Benson
User Rank
Blogger
Re: Product placement?
Duane Benson   1/2/2014 7:06:03 PM
NO RATINGS
Adafruit sells products of their own design and products of someone else's design. What I really like about them is the amount of value that add to whatever it is they're selling. The libraries and tutorials they provide are pretty incredible in terms of quality and breadth. They also give a lot of support to what used to be a re-emerging hobby community, but is now also a re-emerging small start-up business community.

David Ashton
User Rank
Blogger
Addressing
David Ashton   1/1/2014 2:42:55 PM
NO RATINGS
Max, you say that each pixel is individually addressable....but looking at your roll of them in the 3rd photo, along with your description of the Data in and Data out signals it seems to me that what happens is that you tell the first LED what colour you want, then when you tell it a different colour, it passes the previous settings on to the next LED, and so on.  Is that what happens?   Can you control the brightness as well as the colour (i'd imagine so....)

Very tasty goodies - as is the power adapter in photo 2.  I recently ordered some SMD mounting boards from Adafruit - had I known they had these I would have ordered a bunch of them as well.  Really handy.

 

Max The Magnificent
User Rank
Blogger
Re: Addressing
Max The Magnificent   1/2/2014 10:41:23 AM
NO RATINGS
@David: Very tasty goodies - as is the power adapter in photo 2.

My chum Brian LaGrave pointed out that you can get these power adapters all over the place, but as I said to him, I'd never seen one before and I was on the Adafruit site after selecting the power supply and I was thinking "I really could do with a ... oooh, look at that!" LOL

Max The Magnificent
User Rank
Blogger
Re: Addressing
Max The Magnificent   1/2/2014 11:15:40 AM
NO RATINGS
@David: Max, you say that each pixel is individually addressable....

Well, perhaps I should have said "Gives the appearance of being..."

Adafruit provide you with an Arduino library, so a lot of the nitty-gritty details are hidden for you.

When you are creating a Sketch that uses these NeoPixels, first you include their library. Next you declare / instantiate a string of these pixels -- let's say we name it "strip" -- using a type of function call. One of the parameters to this call is the number of the digital output pin you are using to drive this string; another parameter specifies the number of pixels in the string (say 60).

One of the things they do for you is to set up an array in memory -- in th ecase of our 60-pixel stribg, you can visualize this as an array  0-to-59 of 24-bit color fields (8-bits each for the red, green, and blue components).

Now you can use one of their functions to set the values assocaited with individual pixels. For example:

    strip.setPixelColor(i, c);

Where 'i' is an integer of variable specifying the number of the pixel in which you are interested (0 to 59, in our case) and 'c' is the 24-bit color value.

Alternatively, you can use:

    strip.setPixelColor(i, r, g, b);

Where 'i' is the number of the pixel in which you are interested and 'r,' 'g,' and 'b' are 8-bit color values specifying the red, green, and blue components of that pixel.

The important thing to note is that using the strip.setPixelColor() function doesn't actually upload values to the physical strip -- it just changes the values in the array stored in your Arduino's memery. When you are ready to update the physical strip, you call the strip.show() function -- this streams (a copy of) all of the values out of the array in memory into the physical strip -- I think the way to think about this is sort of like a shift-register -- as you start shoving data in one end, it gets passed "bucket brigade style" down the strip -- but I'm not sure as to the exact mechanism.


Does this help make things a bit clearer?

 

 

 

David Ashton
User Rank
Blogger
Re: Addressing
David Ashton   1/2/2014 2:44:12 PM
NO RATINGS
@Max, thanks for that, makes perfect sense.  I think you are right about the shift register  analogy - it would seem that you can stream the data to the strip so fast that to the human eye it seems as if you're addressing each pixel.  (ie you could change pixel no 32 without changing the others, and stream the new data, and it will appear as if only that one pixel has changed).  Very clever, I can think of all sorts of effects you could do with these things.

Do you know how fast the data is sent?  (sorry, I'm one of those irritating people who likes to know exactly how everything works....)

Max The Magnificent
User Rank
Blogger
Re: Addressing
Max The Magnificent   1/2/2014 2:53:19 PM
NO RATINGS
@David: Do you know how fast the data is sent?

By some strange quirk of fate I do, because one of the parameters to their function is the clock rate and we checked that on the scope ... it's a 800KHz clock for the data stream to the strip.

David Ashton
User Rank
Blogger
Re: Addressing
David Ashton   1/2/2014 3:01:03 PM
NO RATINGS
@Max...some simple math reveals that a 1m string of 60 pixels will be refreshed at 800000 / 24 bits / 60 pixels = 555 Hz - surely too fast for the eye to see.  You'd have to get up to about 50M before you could discern any delay.  Very clever.

Max The Magnificent
User Rank
Blogger
Re: Addressing
Max The Magnificent   1/2/2014 3:04:11 PM
NO RATINGS
@David: ...surely too fast for the eye to see [...] very clever


It is way too fast for the eye to see and it's very VERY clever ... also you can have multiple strips -- each cointrolled by it's own Arduino pin...

Marty MacGyver
User Rank
Rookie
Re: Addressing
Marty MacGyver   1/3/2014 1:12:22 PM
NO RATINGS
I was messing around with these LEDs long before they were called "NeoPixels". First, the LED units are the WS2812 (or WS2812b, which is better suited to the higher current paths large strips and arrays demand). That unit consists of a 5050 SMT RGB LED combined with a WS2811 controller.

The WS2811 protocol is detailed in the datasheets as well as numerous sites (I found http://hackaday.com/2012/12/07/driving-a-ws2811-rgb-led-pixel/ to be helpful when I was getting started with it). Conceptually, it works like this: at any point after a 50 us quiet period (data line held low) a given led is ready for input. The first WS2811 in the chain reads 24 bits (8 bits each for red, green, and blue), and after that it just forwards the rest of the bits downstream. The next WS2811 does the same, and so forth, until you stop sending data (obviously extra data beyond the last LED goes nowhere).

You can search for the WS2811 datasheet and see the exact timings involved (there's both a low and a high speed mode).

Keep in mind that the AVR at 16 MHz doesn't allow a lot of overhead for data processing. I managed at one point to marry the strip with a controller... but there wasn't a lot of room to do anything else:

http://www.falatic.com/index.php/72/github-long-time-user-first-time-contributor

I've pondered putting a small FPGA board between an Arduino (or RPi, or something else) and using it as a high-speed dedicated controller for my WS2812-based ring, matrix and strip.

PS: it's virtually impossible to directly control these with a Raspberry Pi... which is another reason I'm considering the FPGA idea as I revisit these projects.

 

Max The Magnificent
User Rank
Blogger
Re: Addressing
Max The Magnificent   1/3/2014 1:15:46 PM
NO RATINGS
@Marty: I've pondered putting a small FPGA board between an Arduino (or RPi, or something else) and using it as a high-speed dedicated controller for my WS2812-based ring, matrix and strip.

Thanks for the great information -- very interesting -- and if you do use an FPGA to do this, I woudl LOVE for you to write the project up and to post it for others to peruse and ponder here on EE Times.

George Hahn
User Rank
Rookie
Re: Addressing
George Hahn   1/3/2014 4:17:18 PM
NO RATINGS
@Marty MacGyver

You can control them with a BeagleBone Black though. Look into the pair of programmable realtime units on the SoC.

bobdvb
User Rank
Manager
Max The Magnificent
User Rank
Blogger
Re: Coax connector
Max The Magnificent   1/3/2014 11:20:31 AM
NO RATINGS
@bobdvb: Those coax power connectors are quite readily available...

I agree -- the thing was that I'd never looked for one before, so when I realized I could do with one and there was one on the Adafruit site I thought "Wow -- that's a good idea!"

sdtrent
User Rank
Rookie
Keep testing your NeoPixel ring, use the next pixel
sdtrent   1/3/2014 6:12:11 PM
NO RATINGS

You should not trash your NeoPixel ring just yet. Try powering the ring and sending your data into the data-in line on the second pixel, or third, etc. There is a chance that the first pixel is damaged and not flowing the signal data to the next pixel in the chain. Other than overvoltage, I would be surprised if you managed to kill all of the pixels.

Also, part of the perceived update speed is that the pixel LED data is updated for the desired pixels before SHOW is used to update the output currents of the whole strip at one time. This allows a flicker free update because you are not seeing the changes in each pixel each time the individual pixel's data is updated.

Shane

Max The Magnificent
User Rank
Blogger
Re: Keep testing your NeoPixel ring, use the next pixel
Max The Magnificent   1/6/2014 12:15:54 PM
NO RATINGS
@sdtrent: You should not trash your NeoPixel ring just yet. Try powering the ring and sending your data into the data-in line on the second pixel, or third, etc. There is a chance that the first pixel is damaged and not flowing the signal data to the next pixel in the chain.

That's actually a really good idea -- and, in fact, if that works, then it probably wouldn't be too difficult to simply replace the first pixel... thanks for the suggestion.

n7ray
User Rank
Rookie
Re: Keep testing your NeoPixel ring, use the next pixel
n7ray   1/7/2014 8:49:18 PM
NO RATINGS
I'll second that.  Have fixed two rings that I thought were toast by replacing the first LED in each.  

BTW: If you want an easy way to drive hundreds of them, check out this project:

 

(The PSOC 4 boards are only $25)

http://www.element14.com/community/message/89756/l/psoc-4-pioneer-kit-community-project100-psoc-4-times-square-led-billboard#89756

Max The Magnificent
User Rank
Blogger
Re: Keep testing your NeoPixel ring, use the next pixel
Max The Magnificent   1/8/2014 9:50:24 AM
NO RATINGS
@n7ray: I'll second that.  Have fixed two rings that I thought were toast by replacing the first LED in each.

Cool Beans -- I will have a bash at swapping my first pixel out -- also I'm going to take much better anti-static protection when handling the little scamps from here-on-in. 

 

Radio
NEXT UPCOMING BROADCAST
EE Times Senior Technical Editor Martin Rowe will interview EMC engineer Kenneth Wyatt.
Top Comments of the Week
Like Us on Facebook

Datasheets.com Parts Search

185 million searchable parts
(please enter a part number or hit search to begin)
EE Times on Twitter
EE Times Twitter Feed
Flash Poll