Forum: Mikrocontroller und Digitale Elektronik Arduino mega und ws2801 LED Strip 1m


von Andreas S. (andreas_s86)


Lesenswert?

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

von Udo H. (physudo)


Lesenswert?

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

von Sebastian W. (wangnick)


Lesenswert?

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
Noch kein Account? Hier anmelden.