LED Treiber WS2803 Pinbelegung und Ansteuerung

OP #3394034
Lesenswert?

Hallo!
Eine Weile versuche ich jetzt schon einen WS2803 LED Treiber im SOP28 
Treiber ans laufen zu bekommen, eigentlich sollte das kein Problem sein. 
Hab ich doch schon wesentlich umständlicheres Programmiert bekommen.

Zum einen gibt es das Problem das das Datenblatt zwei verschiedene 
Pinbelegungen angibt.
Damit meine ich ausdrücklich NICHT die unterschiede zwischen dem DIP 
und SMD Package.
Seite drei "Fig2.a SOP28package" gibt IREF mit Pin3 an aber Seite 4 "Pin 
Description SOP28" sagt IREF ist pin 2.
Nachdem ich ursprünglich PIN3 als IREF verwendet habe habe ich 
zuguterletzt einfach einmal PIN2 ausprobiert aber da passiert auch 
nichts.
1
// led stuff
2
#define LEDDDR DDRC
3
#define LEDPORT PORTC
4
#define LEDCKI 1
5
#define LEDSDI 0
6

7
// init LEDs
8
void led_init(void) {
9
  
10
  // set pins as output
11
  LEDDDR = 0xFF;
12
  // set pins high
13
  LEDPORT = 0xFF;
14
  
15
  LEDPORT &= ~(1<<LEDCKI);
16
  _delay_ms(10);
17
  
18
  for(int i = 0; i < 145; i++){
19
    LEDPORT |= (1<<LEDCKI);
20
    _delay_us(1);
21
    LEDPORT &= ~(1<<LEDCKI);
22

23
  }
24
  
25
  LEDPORT &= ~(1<<LEDSDI);
26
  LEDPORT &= ~(1<<LEDCKI);
27
  _delay_ms(10);
28
}

SDI ist auch munter High wenn ich nachmesse und CKI wackelt munter vor 
sich hin. Nach datenblatt liegen die Signale auch an den richtigen Pins 
an, wenn ich CKI und SDI vertausche ändert das nichts.
Es fängt aber nichts an zu leuchten, wo habe ich den offentlichtlichen 
Fehler eingebaut? :)

Grüße,
Peter
Gast #3395649
Lesenswert?

Laut diesem Datenblatt:
http://www.noodlehed.com/ebay/datasheets/WS2803.pdf

im SOP Gehäuse ist IREF an Pin2 oder Pin3. Da hast du recht. Ist nicht 
eindeutig.
Da aber einer der beiden Pinne NC ist, könntest du beide Pinne verbinden 
ohne das es der Funktion schadet. Um ganz sicher zu sein, müßtest du den 
Hersteller world-semi.com schon direkt anfragen was da denn richtig ist. 
Die werden dann das Datenblatt berichtigen.
OP #3405880
Lesenswert?

Hoi Hoi!

Es geht wenn man drauf achtet genau 144 Bits zu verschieben und PIN3 für 
IREF benutzt.
Nun kommen die Daten in den Chip, jetzt muss ich mir nurnoch einig 
werden wie ich die Animationen erstellen möchte :)

Grüße,
Peter
1
// generate led clock
2
void led_clk(void) {
3
  LEDPORT &= ~(1<<LEDCKI);    
4
  LEDPORT |= (1<<LEDCKI);
5
  LEDPORT &= ~(1<<LEDCKI);
6
}
7

8
// update led values
9
void led_update(void) {
10
  
11
  // for every byte 
12
  for (int byte = 0; byte <=17; byte++) {
13

14
    // clock out every bit
15
    for ( int bit = 7; bit >= 0; bit--) {
16
      if ( ledarray[byte] & (1UL << bit)) {
17
        // shift out 1
18
        LEDPORT |= (1<<LEDSDI);
19
        led_clk();
20
      }
21
      else {
22
        // shift out 0
23
        LEDPORT &= ~(1<<LEDSDI);
24
        led_clk();
25
      }
26
    }  
27
  }
28
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren