Datenblatt für IC: LPD6803 (Nur chinesisch?)

Gast #1436825
Lesenswert?

Hallöchen zusammen,

hat jemand eine Ahnung, wo ich das angehängte Datenblatt (es ist ein 
LED-Treiberbaustein, um den es sich handelt) in einer englischen Fassung 
bekommen kann?

Ich hab' mir schon die Finger blutiggegooglet, aber leider ist da nichts 
zu machen. verzweifelt guck

Danke schonmal!

Gruß,
Corny
Angehängte Dateien:
Gast #1436965
Lesenswert?

>Geh an die Uni, FB Elektrotechnik, und suche Dir einen chinesischen
>Studenten ...

Oder erst mal suchen wo man den Chip bekommt ;)
Dem Datenblatt kann man durchaus Informationen entnehmen
auch ohne Chinesisch zu können. Das Sourcecodebeispiel
gibt schon ein bißchen was her.
Gast #1437141
Lesenswert?

@Rufus: Die Idee mit dem Chinesen hatte ich auch schon - dem kam das da 
aber auch irgendwie nur chinesisch vor. :(

@Holger:
Ich muß den Chip nicht bekommen. Ich habe LED-Leuchtmittel, in denen er 
verbaut ist. Die Dinger müssen jetzt irgendwie angesteuert werden. 
Leider reicht das Sourcecodebeispiel und meine Kreativität nicht aus, um 
da was funktionierendes zusammenzubrezeln. :(

Vielleicht findet sich ja hier ein Sprachtalent...
Gast #1437170
Lesenswert?

Hi,
auch übersetzt klingts nach chinesich, hatte das mal.

Ist aber eigentlich ganz einfach:

- takte in das Ding zuerst 32 bit rein, lauter '0'
- dann, für jeden pixel zuerst eine '1' dann 5bit pro Farbe, also 5 für 
R, 5 für G und 5 für B.
- wenn alle Pixel gesendet sind, dann sende nochmal '0' bits, soviele 
wie du vorher für die RGB Daten gesendet hast.

Ach ja, die Ausgabe ist schon gamma Kalibriert, deshalb reichen 5bit um 
eine 8bit PWM zu erzeugen...

Viel Glück!
Gast #1437219
Lesenswert?

Danke, das sieht doch schonmal etwas vielversprechender aus.
Es bleiben nur die Fragen offen,

- ob die 32 Bit pro kaskadiertem Chip notwendig sind, oder nur als 
einmaliger "Header" für eine Synchronisation

- welche maximale Geschwindigkeit möglich ist für die seriellen Daten

Interessant, daß die von Pixeln reden. Der Chip scheint wohl 
ursprünglich für einen anderen Anwendungsbereich konzipiert zu sein, als 
ich ihn hier vor mir habe.
Gast #1437235
Lesenswert?

Hi,

nur 1x 32bit als header, dann soviele Pixel wie du willst.
Bei N Pixeln also N*16bit.
Zum latchen nochmal N*16bit '0'.
Clock darf max. 20MHz sein.

Der Chip ist eigentlich für Pixelketten gedacht, ja!

Grüße!
Gast #1438157
Lesenswert?

Ich nochmal...

Ich hab heute mal ein wenig damit rumgebastelt, auch mit einer Kette 
dieser Lampen, teilweise funktioniert es schon, teilweise auch nicht.

Zum einen habe ich mir mal den Beispielcode im Datenblatt nochmal unter 
die Lupe genommen - da ist die letzte Schleife von gesendeten 0-Bits 
nDots lang (ich vermute, damit ist Anzahl der LEDs gemeint). Bei 10 LEDs 
also 10 Nullen. Du schreibst N * 16 Bit. Ich habe beides probiert, und 
bei beidem bekomme ich sporadische Störungen, daß LEDs aus der Reihe 
tanzen.

Zum anderen scheint die Dimmfunktion nicht ganz so zu arbeiten wie man 
sie sich vorstellt. Solange ich für jeden Farbkanal entweder 0 oder 0x1F 
schreibe, funktioniert das. Die betreffende Farbe geht an oder aus.
Schreibe ich einen Wert dazwischen, blitzt die LED nur extrem kurz auf, 
mit Helligkeit je nach Wert, aber eben kein Dauerleuchten... Ich dachte 
eigentlich, genau das würde der Chip von alleine übernehmen, ohne daß 
der µC dauernd die Daten neu reintakten muß, solange sich der Zustand 
der LEDs nicht ändern soll...

Hast Du noch eine schlaue Idee?

Auf jeden Fall schonmal ein dickes DANKE!

Grüße aus dem Feierabend,
Corny
Gast #1440345
Lesenswert?

Hi,

hab nachgeschaut:
wenn er nur dann PWM macht wenn du Daten reintaktest, dann liegt CMODE 
(pin13) vermtl. auf LO. Den musst du dann entweder auf HI bekommen, oder 
dauernd Daten reintakten...floaten kannst du ihn auch lassen, sofern du 
hinkommst.

nDots ist die Anzahl der Datenbits, die du geschickt hast.

Grüße
Gast #1440833
Lesenswert?

@samc: Danke, da werd ich nichts dran ändern können, die Dinger sind 
vergossen - rechts und links kommen Kabel raus und vorne Licht. Muß ich 
also damit leben, daß ich permanent Daten reintakte. Hat der AVR 
wenigstens was zu tun im Main-Loop. :D
Allerdings scheint numdots doch die Anzahl der einzelnen Elemente zu 
sein, nicht die Anzahl der Bits. Wenn ich genau so viele Nullen 
nachschiebe, wie Lampen da sind, klappts.

@Christoph Kessler: Wie krieg ich das PDF-Datenblattt da rein? Per 
Copy&Paste kommen da jedenfalls keine chinesischen Zeichen an, sondern 
nur kleine Rechtecke. Die sind natürlich nicht übersetzbar.

Damit wäre eigentlich so weit alles klar, was klar sein muß, ich bedanke 
mich recht herzlich bei Euch, und wenn samc mir mal über'n Weg läuft, 
gibt's ein Getränk nach Wahl. ;-)

Bunt leuchtende Grüße,

Corny
#1505598
Lesenswert?

hab hier grad dieselben LEDs (PIXEL, MODULE wie auch immer), krieg die 
aber gar nicht zum laufen!
versuch grad mitm ARDUINO board überhaupt i-was ...

CODE:

const int clk = 3;
const int data = 2;
const int n = 10;
int i,j;

void setup(){
  pinMode(clk, OUTPUT);
  pinMode(data, OUTPUT);
}

void loop(){
  // first output 32 “0” start frame
  digitalWrite(clk, 0);
  digitalWrite(data, 0);
  for(i=0;i<32;i++){
    digitalWrite(clk, 1);
    digitalWrite(clk, 0);
  }
  // then output nDots data
  for(i=0;i<n;i++){
    //first output one “1” as start bit
    digitalWrite(data,1);
    digitalWrite(clk,1);
    digitalWrite(clk,0);

    //output 5 bits red data
    digitalWrite(data,0);
    for (j=0;j<5;j++){
      digitalWrite(clk,1);
      digitalWrite(clk,0);
    }

    // output 5 bits green data
    digitalWrite(data,0);
    for (j=0;j<5;j++){
      digitalWrite(clk,1);
      digitalWrite(clk,0);
    }
    //output 5bits blue data
    digitalWrite(data,1);
    for (j=0;j<5;j++){
      digitalWrite(clk,1);
      digitalWrite(clk,0);
    }
  }
  // after output all nDots data, need add nDots pulse
  digitalWrite(data,0);
  for (i=0;i<n;i++){
    digitalWrite(clk,1);
    digitalWrite(clk,0);
  }
  //transport data finish
  delay(100);
}

passiert gar nichts! die leuchten einfach permanent und scheint als ob 
die gar keine daten bekommen!
#1755120
Lesenswert?

Hallo,
vielleicht hilft dieser Source.
http://read.pudn.com/downloads120/sourcecode/asm/509732/demo.c__.htm
http://read.pudn.com/downloads93/sourcecode/embed/368974/DEMO1/demo.c__.htm
Ich denke mal, Dots ist Anzahl der 6803 die hintereinander hängen. Bei 
einem also vielleicht 1.
DR = Rot, DG = Grün, DB = Blau.
Scheint ein Laufband/Lauflicht oder so ähnlich als Demo zu sein.
Kanns aber selbst nicht testen. Sieht aber plausibel aus.
Würde mich über eine Rückmeldung freuen, ob ich damit helfen konnte.
Viele Grüße Herbert
#1875264
Lesenswert?

Habe jetzt doch eine Weile mit den LPD6803 rumgemacht und jetzt funzt es 
mit einem ATMega88 endlich. Das Timing war (durch die klasse Info in 
diesem Thread) relativ schnell korrekt aber ich hatte Probleme mit dem 
Spannungspegel der Clock- und Datenleitung! Im chinesischen Datenblatt 
vom LPD6803 steht bei genauerer Durchsicht nämlich drin dass Vin (also 
der Pegel für diese beiden Signalleitungen nur um +-0,4V von der 
Versorgungsspannung des Controllers abweichen darf. Und der 6803 hängt 
bei meinem Aufbau nämlich via Z-Diode an 5V, mein ATMega war aber im 
STK500 EvalBoard von vorherigen Versuchen auf 3,3 V gesetzt und somit 
hingen seine Ausgangspegel zur Ansteuerung der Daten- und Clockleitung 
eben auch nur auf knapp über 3V. Mal kurz die Versorgungsspannung des 
ATMega auf 5V hochgezogen und schon hats geflutscht!

Gruß Markus
#2435171
Lesenswert?

Hi Markus,

das ist super nett, danke, Mail ist raus.



ich habe hier mal was zusammengeschustert (sorry, bin anfänger), Danke 
an Herbert K. für den Link.
1
// 
2
#define CLK 2 //GREEN
3
#define DTA 3 //YELLOW
4

5
#define SCLK1  PORTD |= ( 1 << CLK) 
6
#define SCLK0  PORTD &= ( 0 << CLK) 
7

8
#define SDO1   PORTD |= ( 1 << DTA) 
9
#define SDO0   PORTD &= ( 0 << DTA) 
10

11

12
typedef unsigned char BYTE;
13

14
 void BrushOut(BYTE nDots,BYTE dr,BYTE dg,BYTE db)   
15
{   
16
  BYTE i,j,mask;   
17
  SCLK0;
18
  SDO0;
19

20
    for(i=0;i<32;i++) { SCLK1;SCLK0; }  
21

22
    for(i=0;i<nDots;i++)   
23
    {   
24
    SDO1;SCLK1;SCLK0;   
25
    mask=0x10;   
26
    for(j=0;j<5;j++)   
27
    {    if(mask & dr)    SDO1;   
28
         else             SDO0;   
29
         SCLK1;SCLK0;   
30
         mask>>=1;      }   
31
   
32
    mask=0x10;   
33
    for(j=0;j<5;j++)   
34
    {   if(mask & dg)   SDO1;   
35
        else            SDO0;   
36
        SCLK1;SCLK0;   
37
        mask>>=1;       }   
38
   
39
    mask=0x10;   
40
    for(j=0;j<5;j++)   
41
    {   if(mask & db)   SDO1;   
42
        else            SDO0;   
43
        SCLK1;SCLK0;   
44
        mask>>=1;       }   
45
    }   
46

47
    SDO0;   
48
    for(i=0;i<nDots;i++) { SCLK1;SCLK0; }   
49

50
}   
51

52
// obige funktion später in  timerinterrrupt routine, und arrays als ausgabe
53

54
// in main dann, damit die LEDs mal überhaupt was tun
55
char nDots=6; // ich habe erstmal nur 6 dran, wollte nicht alle kaputt machen :)
56
      
57
    while(1)   
58
    {   
59
        for (b=0;b<nDots+1;b++)  
60
    for(i=0;i<32;i++) 
61
          for (a=0;a<300;a++) 
62
      BrushOut(b,i,0,0);  
63

64
     for(i=0;i<32;i++)   
65
     for (a=0;a<500;a++) 
66
             BrushOut(nDots,31-i,i,0);   
67
  }

Grüße.
yatkO

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