Forum: Mikrocontroller und Digitale Elektronik Datenblatt für IC: LPD6803 (Nur chinesisch?)


von Corny (Gast)


Angehängte Dateien:

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

von Corny (Gast)


Lesenswert?

Ups, aus Versehen den Anhang doppelt drangehängt.. wenn einer der Admins 
das sieht, bitte den Anhang einmal löschen.

Es dankt
ein µC.net-Newbie ;-)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von holger (Gast)


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.

von Corny (Gast)


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...

von samc (Gast)


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!

von Corny (Gast)


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.

von samc (Gast)


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!

von Corny (Gast)


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

von samc (Gast)


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

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Manchmal kann der automatische Übersetzer von Google ein bißchen 
weiterhelfen, mit viel Phantasie kann man erahnen, was eigentlich 
gemeint ist.

von Corny (Gast)


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

von Borys M. (2mb13r)


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!

von Borys M. (2mb13r)


Lesenswert?

hey!
hat nun einer i-ein erfolg mit den LPD6803 ?
ich bekomm die dinger nicht wirklich zum laufen! hat einer ein c-code 
beispiel? wäre super dankbar!

von Mario (Gast)


Lesenswert?

Wir hätten auf Arbeit nen feritgen Controller der die Dinge ansteuern 
kann. Aber ich denke hier gehts wohl eher um Bastelaktionen ;) Da ist ja 
ein Fertigprodukt nicht so toll...

von Herbert K. (avr-herbi)


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

von Herbert K. (avr-herbi)


Lesenswert?

Was mich ein wenig stutzig macht ist:

const int clk = 3;
const int data = 2;

Wenn dahinter ein "ARDUINO board" steckt, ist es doch wo möglich ein 
ATmega__.
Wo ist denn die Zuordnung zu den physikalischen PINs?

CLK / DATA müssen doch irgendwo PB[0..7],PC[0..6],PD[0..7] zugewiesen 
werden.

von Road R. (mickmack)


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

von Leopold B. (leo1969)


Angehängte Dateien:

Lesenswert?

Hier auf Englisch - falls es mal jemand braucht.

von yatko (Gast)


Lesenswert?

@ Markus Schlegel
ist zwar jetzt 1 jahr her, aber vielleicht ließt du oder jemand der ein 
sample C code hat mit. Kann mal wer was posten bitte?

Danke und Grüße
yatko

von Road R. (mickmack)


Lesenswert?

Hallo Yatko,
schicke mir einfach eine kurze Mail an MSchlegel@T-Online.de, dann sende 
ich dir etwas C-Code.

Schöne Grüße, Markus

von Yatko J. (denim)


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

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.