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
>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
@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!
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...
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
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
typedefunsignedcharBYTE;
13
14
voidBrushOut(BYTEnDots,BYTEdr,BYTEdg,BYTEdb)
15
{
16
BYTEi,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
elseSDO0;
29
SCLK1;SCLK0;
30
mask>>=1;}
31
32
mask=0x10;
33
for(j=0;j<5;j++)
34
{if(mask&dg)SDO1;
35
elseSDO0;
36
SCLK1;SCLK0;
37
mask>>=1;}
38
39
mask=0x10;
40
for(j=0;j<5;j++)
41
{if(mask&db)SDO1;
42
elseSDO0;
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
charnDots=6;// ich habe erstmal nur 6 dran, wollte nicht alle kaputt machen :)