Forum: Mikrocontroller und Digitale Elektronik LED Treiber WS2803 Pinbelegung und Ansteuerung


von Peter F. (peter_f)


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

von Peter F. (peter_f)


Lesenswert?

Keiner? :-(

von Greg (Gast)


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.

von Peter F. (peter_f)


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
}

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.