Hallo,ich bin neu hier und komme einfach nicht weiter,ich hab schon viel zuviel Zeit beim suchen im Netz verbracht also möchte ich mich nun an euch wenden, ich hab mir einen Arduino Mega2560 und dazu einen ws2801 LED-Strip bestellt, nun möchte ich dies verbinden über PWM da es später möglich sein soll die LEDs zu dimmen. Ich hab folgende LED-Pins: 5V rot GND blau CK Grün SD Gelb ich hab auch keine externe Stromquelle, nur USB. Momentan habe ich den Strip an den Pins 52 CK und 51 SD. Also nun meine Frage wie muss ich dies nun verkabeln damit ich die LEDs dimmen kann? Vielen dank im vorraus MFG Andreas
Schau doch mal auf Seite 12 des Datenblatts (http://www.mikrocontroller.net/part/WS2801), da ist beschrieben, wie du mit 8 bit pro Farbe das einstellen kannst und wie das Timing für die Pins sein muss. Da das ähnlich wie SPI aussieht kannst du auch, falls du die Pins nicht einzeln an und aus machen willst, versuchen, das per SPI zu lösen. Du kannst auf meinem Blog nachlesen wie man Hardware-SPI am ATmega macht (falls dir das nicht sowieso schon klar ist): http://physudo.blogspot.de/2013/05/hardware-spi-mit-atmega.html
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.