60 LED rgb klok code probleem

algemene C code
Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: 60 LED rgb klok code probleem

Berichtdoor pjh » 12 Apr 2014, 00:31

Nico schreef:
...een strip WS2812 of WS2811 RGB leds. Dat zijn SPI leds. Hebben 3 pinnen (5V, data en GND)

Heb me wel eens iets verdiept in die dingen.
Zou instinker kunnen zijn, vandaar dat ik mijn info hier deel.

Bottom line: het is niet zo eenvoudig een LED-strip met ingebouwde PWM controllers als de WS2812 of WS2811 met een 16MHz Arduino aan te sturen.
Reden: het is géén SPI. Meer specifiek: er is geen separate clock-pin. Alleen 5V, data en GND, zoals Nico correct schrijft. Consequentie is dat de duur van de signalen bepaalt of iets een één of een nul wordt. En dus niet de toestand van de data-pin op het moment dat de klok-pin hoog (of laag) gaat, zoals we bijvoorbeeld bij een schuif (shift-) register als de HC595 gewend zijn. Niet simpel dus.

Neem de WS2812. Uit de Datasheet:
Data transfer time( TH+TL=1.25µs±600ns)
T0H 0 code, high voltage time 0.35us ±150ns
T1H 1 code, high voltage time 0.7us ±150ns
T0L 0 code, low voltage time 0.8us ±150ns
T1L 1 code, low voltage time 0.6us ±150ns
RES low voltage time Above 50µs

Wat er staat is dat wanneer je een NUL wilt in"klokken", je signaal 350 nanoseconden hoog moet zijn en daarna 800 nanoseconden laag. Bij een EEN respectievelijk 7 en 6 tienden van een micoseconden. De tollerantie is met 150 ns breed, maar een arduino op 16.000.000 Hertz tikt iedere 62,5 nanoseconde.
==> één Arduino-klok-tik = helft vd tolerantie om de timing van de WS2812 goed te houden.
Succes!

Bij de WS2811 is het niet anders. Heeft wel tragere stand. En er zijn libraries voor.

Dan heb je nog de WS2801. En dat is wél een handige chip ingebouwde PWM controller met data-in, data-out en, jawel: een clock. Kun je zo traag werken als je wil. Deze zitten geloof ik in de (dure) LED pixels van Lady adafruit.

Waar ik gek op ben is de WS2803. Het grotere broertje van de WS2801. Deze zit niet "handig" op een LED strip, maar heeft wel 18 (!) constant current 8-bits PWM kanalen. Dus één WS2803 komt overeen met 6 WS2801, die 3 kanalen heeft (R-G-B). Met één weerstand zet je de stroom voor alle kanalen. Per kanaal is dit maximaal 30 mA, 30 Volt.

Ter info datasheet:
WS2801: http://www.adafruit.com/datasheets/WS2801.pdf
WS2803: http://www.jarzebski.pl/datasheets/WS2803.pdf
WS2811: http://solderingsunday.com/wp-content/uploads/2014/01/ws2811.pdf
WS2812: http://www.adafruit.com/datasheets/WS2812.pdf

Terug naar TS:
Wil je ieder LEDje van je 60 RGB klok 3x8-bits = 24-bits-kleur geven, dan behoef je 3 x 60 / 18 = precies 10 x een WS2803. Dit i.t.t. 3 x 60 / 8 = 22,5 = 23 shiftregisters. Tien WS2803 kosten samen € 8,27 incl verz. Drieëntwintig schuifregistertjes kost € 3, maar dan heb je geen PWM en moet je nog een zooi extra weerstandjes bestellen.

Alternatief: de MAX7219 en MAX7221 Led drivers. Ontworpen voor een 8 x 7 segment display of 8 x 8 = 64 dot matrix. Dus 60+ LEDjes. Maar "geen" PWM, geen RGB.

Ander alternatief: meer de gewone manier: multiplexen.
Voorbeeld: (aanname: RGB = min, Gezamelijke plus)
Je neemt 4 x HC595 = 4 x 8 outputs = 32 pinnen = 30 minuten + 2 pinnen over.
Sluit je zowel de Rood, Groen en Blauw van minuut 1 en 31 aan op pin 1, RGB van minuut 2 en 32 op pin 2 etc. Is dus zes lijnen naar één HC595 pin. Totaal 30 x 6 = 180 aansluitingen voor de kathodes (-).
De Anodes (+) van de "zes groepen van half-uren" sluit je aan op een zogenaamde darlington array zoals de UDN2981A. Deze kan 15 x RGB = 45 LEDjes = 45 * 20 mA = 900 mA SOURCEN.
Ik koos de LEDjes met een gezamelijke PLUS, zodat de afvloed van al die electronen via het veel bredere netwerk van de kwetbaardere HC595 kan gaan.

Voor wat het waar is. :P

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: 60 LED rgb klok code probleem

Berichtdoor nicoverduin » 12 Apr 2014, 08:18

Wel eens van fastLed gehoord....Google maar eens... heb ze van de week nog laten draaien :)

En dan krijg je ook van die ingewikkelde programma's :

Code: Alles selecteren
#include "FastLED.h"

// How many leds in your strip?
#define NUM_LEDS 60

// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806, define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 11
//#define CLOCK_PIN 13

// Define the array of leds
CRGB leds[NUM_LEDS];

void setup() {
   FastLED.addLeds<WS2811, DATA_PIN>(leds, NUM_LEDS);
}

void loop() {
   // First slide the led in one direction
   for(int i = 0; i < NUM_LEDS; i++) {
      // Set the i'th led to red
      leds[i] = CRGB::Red;
      // Show the leds
      FastLED.show();
      // now that we've shown the leds, reset the i'th led to black
      leds[i] = CRGB::Black;
      // Wait a little bit before we loop around and do it again
      delay(30);
   }

   // Now go in the other direction. 
   for(int i = NUM_LEDS-1; i >= 0; i--) {
      // Set the i'th led to red
      leds[i] = CRGB::Red;
      // Show the leds
      FastLED.show();
      // now that we've shown the leds, reset the i'th led to black
      leds[i] = CRGB::Black;
      // Wait a little bit before we loop around and do it again
      delay(30);
   }
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: 60 LED rgb klok code probleem

Berichtdoor pjh » 12 Apr 2014, 09:16

Precies: ingewikkeld
:D

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: 60 LED rgb klok code probleem

Berichtdoor nicoverduin » 12 Apr 2014, 10:08

ik geef het op ..... Hij moet maar kiezen wat ie wilt....
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: 60 LED rgb klok code probleem

Berichtdoor pjh » 12 Apr 2014, 23:35

Wel blij dat jij een stukje code erbij zet. Maakt de informatiedichtheid van dit topic haast compleet.
En inderdaad. Ik ben benieuwd wat hij gaat doen. Het lijkt simpel: een RGB klok. Heb er zelf ook wel eens aan gedacht. En dan denk ik: hoe zou je dat kunnen doen. Maar doen? Geen denken aan! ;)

Gebruikers-avatar
Berichten: 270
Geregistreerd: 30 Dec 2012, 11:42

Re: 60 LED rgb klok code probleem

Berichtdoor Rudi » 13 Apr 2014, 13:18

En waar kom ik zonet eerder toevallig op terecht:
http://werk-schau.blogspot.com/2014/01/ ... clock.html, compleet met schema en sketch.
Arduinows!
Why do computer programmers confuse Halloween with Christmas? Because Oct 31 = Dec 25
I got 01100011 problems but a bit ain't 00000001

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: 60 LED rgb klok code probleem

Berichtdoor nicoverduin » 13 Apr 2014, 14:00

En inderdaad stelt geen kl.te voor :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3
Geregistreerd: 10 Apr 2014, 11:39

Re: 60 LED rgb klok code probleem

Berichtdoor rickkert » 14 Apr 2014, 21:02

bedankt,
Ik ben inderdaad dezelfde klok tegen gekomen, maar het idee dat ik heb werkt niet met een ledstrip, omdat ik de ledlampjes wil kunnen zien en de blokjes er niet mooi uit zien. Is het mogelijk deze code toe te passen wanneer het om losse RGB-LEDs gaat die met elkaar zijn verbonden?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: 60 LED rgb klok code probleem

Berichtdoor nicoverduin » 14 Apr 2014, 21:20

Ja, maar ik ben bang dat je nogal wat ervaring mist voor deze keuze.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Vorige

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 36 gasten