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
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 ;-)
Geh an die Uni, FB Elektrotechnik, und suche Dir einen chinesischen Studenten ...
>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.
@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...
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!
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.
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!
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
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
Manchmal kann der automatische Übersetzer von Google ein bißchen weiterhelfen, mit viel Phantasie kann man erahnen, was eigentlich gemeint ist.
@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
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!
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!
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...
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
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.
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
@ 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.