This is my first post and I hope some of you could help me with this one.
My project is to make a social clock. And for this I have to control 576 RGB Leds, these RGB leds are the WS2812
Every Led needs to be controlled individually, this happens through a bus en everything can be connected to one single pin of
the arduino. Now the problem is if I have to control 576 Leds with the arduino this means its almost 600 times 3 byte of data
this means I already used up almost 2 kb and the arduino yun has only 2.5 kb RAM. Can I solve this by using 2 pins and control 2 times 300 LEDS or do i need to use a mega or teensy for this?
Another problem is the timing is it possible to send all this data through?
Also how do I test this without using all 576 leds because they aren't connected yet and this would take a lot of work.
What do the three bytes of data do? Can that be reduced by mapping some of the data into bits? For example the present state of any given LED can be represented by a single bit.
How do you control that many LEDs with a single line? Are you using some sort of serial stream of data?
Is any of the three bytes of data fixed? If so you should be able to store that in fixed memory (e.g. EEPROM or on chip flash.)
Without knowing more about what you want to do it is difficult to offer suggestions.
Each led takes 3 byte, these 3 byte contain the brightness of the 3 colors.
They are in one serial. The ws2812 takes the first 3 byte and sends the other data to the other leds
So if you want to control 4 Leds you have to send 4*3 byte, the first bytes go to the first led and the other 9 bytes go to the next led who also takes the first 3 bytes, and sends the other 6 byte to the next en so on.
If you don't understand my explanation maybe the datasheet I posted would help. On the last page it's explained how the data reaches each LED.
But to control all the leds you always have to send all the data through because each led takes 24 bit (3 byte) and sends the next through.
The data off which led that needs to light up and which color is saved in the EEPROM
I think the question you're asking is where to store the data for the LEDS - and that depends on where the data going to come from. How is the LED sequence going to be defined? With that many LEDs it would hardly be practical to define every transition manually and perhaps you're going to generate them from some sort of rendering application. Is that going to be done on the Arduino, or done in advance and with the output made available to the Arduino in some form? You need to know what sort of formats the data will be available in, and how much data there will be. Given that the number of LEDs, even a single state is going to require 1800 bytes of data and that will increase substantially if the display is going to change. You might want to store the data on an SD card and have the Arduino read it as requires, or store it on a PC and send it in real time over the serial port. If your Arduino has a wireless or network interface, you could send it over either of those, too.
As I understand it these LEDs are programmed by shifting the display states out over a serial data bus. With a very large number of LEDs, the propagation time for all that shifting would restrict your update frequency and might become a problem. In that case you could divide the LEDs up into several shorter strands to make them easier to manage. But that would only be required if you have performance issues.
This is what it should look like
The different rings represent each family member and where the ring lights up it means that this person will be home at that time.
This data comes from google calendar. And then this data will be converted to the the What Led should light up with the arduino.
The arduino yun has an ethernet shield. So i can get the google data.
The data can than be saved on the arduino's flash memory i Guess.
But my main question is if I'm going to have trouble sending so much data to so much LEDS, because i think i need my ram to run the program and all the data that needs to be send already takes 1.8 kb or more. so i have only 0.7 kb left.
Is this to few?
And I don't need verry fast performances to refresh the LEDS do i have a problem then with sending so much data?
I don't care if it takes a second or 1 millisecond to refresh all the leds.
I don't see that sending the data is a problem - since you only send it one byte at a time, it doesn't really matter how much you want to send. But it sounds as if you plan to generate that data at runtime on the Arduino, and that implies you need to be able to store the whole thing somewhere persistent. As SD card would be the easiest choice in my opinion - it also means you have the option of view and altering the data on a PC if required for test purposes. If you are willing to involve a PC in your solution then you can offload any or all of the google lookup, conversion to LED control sequence and persistent storage to the PC. If this is intended to be a mobile device, that might not be practical though.
So if I understand it correctly it's no problem to send all the bytes because they are send after each other.
I thought if I want to control 576 that i should have enough RAM to send all the data in one time?
Also I heard that there would be possible timing problems but i don't know how. The data is put on a serial
and shifted to the other Leds but they don't use a clock or latch.