Hallo Andreas,
zum Thema PWM: Du benutzt ja einen Streifen mit einem WS2801 für jede
RGB-LED, oder? Die WS2801 machen das Dimmen, also das Erzeugen der
PWM-Signale, für dich! Du musst einfach nur jedem WS2801 die gewünschte
Farbe mitteilen.
Dann solltest du beachten, dass jede der 5050-LEDs auf deinem Streifen
bis zu 20mA pro Farbe verbrauchen kann. Bei einem typischen Streifen mit
30 LEDs pro Meter ergeben sich bei voller Helligkeit dann 20mA x 3
Farben * 30 LEDS = 1.8A pro Meter. Dass wird der USB-Port nicht
hergeben.
Zum Testen der Stromaufnahme kannst du folgenden Sketch-Schnipsel
versuchen. SD (Serial Data) gehört an Arduino Mega Pin 37, CK (Clock) an
Arduino Mega Pin 41:
1 | void setup() {
|
2 | // PORT C is Arduino Mega Pins 37 (LSB) to 30 (MSB)
|
3 | // PORT G is Arduino Mega Pins 41 (LSB) to 39, unused, 4, unused, unused, unused (MSB)
|
4 | DDRC = 1;
|
5 | DDRG = 1;
|
6 | Serial.begin(115200);
|
7 | Serial.setTimeout(10000);
|
8 | }
|
9 |
|
10 | void loop() {
|
11 | static byte pixels = 10;
|
12 | Serial.write("# Pixels: ");
|
13 | byte val = (byte) Serial.parseInt();
|
14 | if (val>0) pixels = val;
|
15 | Serial.println(pixels);
|
16 | for (byte pixel=0; pixel<200; pixel++) {
|
17 | byte on = pixel<pixels;
|
18 | for (byte gray=0; gray<24; gray++) {
|
19 | PORTC = on; // IN, COM, OUT: Three cycles
|
20 | PORTG = 1; // OUT: One cycle at 16Mhz: 62.5 ns
|
21 | __asm__("NOP\n"); // NOP: One cycle
|
22 | PORTG = 0; // OUT: One cycle, total HIGH time of pin 41: 125 ns
|
23 | } // RJMP back: 2 cycles
|
24 | }
|
25 | delay(1);
|
26 | }
|
LG, Sebastian