Hallo ich möchte einen LED-Schriftzug mit ca. 400 LEDs bauen und habe dafür mal einen Schaltplan erstellt. Ich würde mich freuen, wenn jemand mal drüber schauen könnte ob das so passt, ins besondere die Cascaden-Schaltung der TLC5947 und mir sagt was ich noch verbessern kann. Hier noch die Eckdaten: Netzteil 24V, 1,8A Schaltregler LM2576 12 LEDS in einer Reihe ca. 35 Reihen(noch nicht ganz klar) LEDs 1,8V - 20mA - 4000mcd - 25° LED-Treiber TLC5947 Vielen Dank! Gruß Carsten
DB siehe http://www.ti.com/product/tlc5947 400 Stück gibt schöne Fläche und somit auch etwas Störstrahlung?
> und mir sagt was ich noch verbessern kann. Ich sehe 48 maximal 30mA Ausgänge, und wenn 12 LEDs a 1.8V in Reihe sollen brauchen die 21.8V, was knapp unter 24V liegt. Den Schriftzug machst du nun über die Anordnung der LEDs ? Wozu dann jeden Buchstaben einzeln dimmen können ?
@MaWin Carsten M. schrieb: > 12 LEDS in einer Reihe Ich denke das sollte "Spalten" heißen!? Glaube auch, das Er eine LED-Laufschrift meint, sonst macht das doch keinen Sinn was Er da gebaut hat?
Den Schriftzug will ich über die Anordnung der LEDs erzeugen, es soll also keine Matrix werden, da habe ich mich etwas falsch ausgedrückt. Ich will jeden Buchstaben einzeln ansteuern können und pro Buchstaben brauche ich, je nach Buchstaben, so 30-60 LEds. Also brauche ich pro Buchstaben ca. 3-6 Reihen, muss dann halt immer ein vielfaches von 12 sein. Sind die 2v Überschuss pro reihe zu viel? Sollte ich lieber 13 LEDs nehmen? Das man die dimmen kann ist ein schöner Nebeneffekt aber nicht ganz so wichtig. Ist der Schaltplan soweit ok, kann ich mich an das Layout setzten? Gruß Carsten
@Carsten M. (carsten_m) >Sind die 2v Überschuss pro reihe zu viel? Nein, eher zu wenig. Kann man drüber streiten. >Ist der Schaltplan soweit ok, kann ich mich an das Layout setzten? Dein KONZEPT ist fragwürdig. Was dort zu sehen ist, ist KEINE Matrix, da fehlen noch die Digittreiber, siehe LED-Matrix. Bis zum Layout ist noch viel zu tun.
Ich drücke mich glaube immer etwas falsch aus. Ich will gerade kein Matrix haben sondern so eine Punktschrift wie in dem Beispiel. Die LEDs befinden sich auf einem extra Brett. Von der Stiftleiste geht dann jeweils ein Signal zu einer Reihe auf dem Brett, dafür wollte ich dann ein Flachbandkabele mit Pfostenstecker verwenden und die 24v Versorgungsspannung wollte ich immer von Reihe zu Reihe auf dem Brett verlegen. Ich hoffe ich könnte mein vorhaben etwas verständlicher darstellen. Gruß Carsten
@ Carsten M. (carsten_m) >Ich drücke mich glaube immer etwas falsch aus. Sieht so aus. >Ich will gerade kein Matrix haben sondern so eine Punktschrift wie in dem >Beispiel. AHA! >Die LEDs befinden sich auf einem extra Brett. Von der Stiftleiste geht >dann jeweils ein Signal zu einer Reihe auf dem Brett, dafür wollte ich >dann ein Flachbandkabele mit Pfostenstecker verwenden und die 24v >Versorgungsspannung wollte ich immer von Reihe zu Reihe auf dem Brett >verlegen. Also jeder Buchstabe = 1 Reihe LEDs, die alle in Reihe geschaltet sind und gemeinsam ein- und ausgeschaltet werden sollen, ggf. noch mit Dimmung. Richtig? Bzw. ein Buchstabe besteht aus einigen Reihen LEDs, weil es sonst zuviele pro Reihe werden.
> muss dann halt immer ein vielfaches von 12 sein. Nein, musst du nicht, der TLC5749 regelt den Strom auf gleichen Strom auch wenn nicht dieselbe Anzahl von LEDs an jedem Ausgang hängt. Nur die Gesamtbelastung (ca. 1.8W je nach Montage) sollte nicht zu hoch werden, an 24V dürften also insgesamt 18 LEDs a 20mA fehlen.
Ja genau so ist es geplant. :) Ich hoffe, dass ich den mit dem Schaltplan so umsetzten kann
@ Carsten M. (carsten_m) >Ja genau so ist es geplant. :) Na dann mal los. >Ich hoffe, dass ich den mit dem Schaltplan so umsetzten kann Geht klar. Denk dran, das die TLC viel Kupfer zum Kühlen brauchen, siehe Kühlkörper. Und wähle die Flußspannung der LEDs so, dass ca. 2-3V noch übrig bleiben, nicht viel mehr und nicht viel weniger. Hmm, mal rechnen. Wenn der IC 1,8W verkraftet sind das 75mW/Kanal, macht maximal 3,75V Restspannung. Passt.
Falk Brunner schrieb: > Geht klar. Denk dran, das die TLC viel Kupfer zum Kühlen brauchen, siehe > Kühlkörper. Und wähle die Flußspannung der LEDs so, dass ca. 2-3V > noch übrig bleiben, nicht viel mehr und nicht viel weniger. Ok und wenn das gerade nicht passt, weil ich nur noch 6 oder 7 LEDs in einer Reihe brauch um den Buchstaben voll zu bekommen, hänge ich einfach noch ein Widerstand rein richtig? Gut dann mach ich mich mal an das Layout, was ich euch dann aber auch nochmal vorlegen werde. :) Vielen Dank erst mal. Gruß Carsten
@Carsten M. (carsten_m) >einer Reihe brauch um den Buchstaben voll zu bekommen, hänge ich einfach >noch ein Widerstand rein richtig? Ja, oder normale Dioden, Z-Dioden.
Hallo so habe jetzt auch das Layout fertig und würde mich freuen, wenn da nochmal jemand drüber schauen könnte, man kann da ja doch ne ganze menge falsch machen. Ich habe auch noch mal den Schaltregler extra mit angehängt, hier sollen ja die Strome auch sehr wichtig sein. Ich hoffe ich habe die Layoutregeln einigermaßen befolgt. Also schlagt auf mich ein :) Edit: Oh ich sehe gerade ich habe die Ebene tPlace nicht mit drauf, wenn die noch benötigt wird hole ich das noch nach. Gruß Carsten
> Also schlagt auf mich ein Die eine oder andere Durchkontaktierung in der Nähe der Elkos des Schaltreglers zur Masseseite der Platine hin könnte nicht schaden, sonst besteht die nächstgelegene Verbindung nur über den Pin des Stromversorgungsanschlusses. Auch beim LM2576 konnte noch die eine oder andere Durchkontaktierung hion, schliesslich leiten Vias nicht so besonders.
@ Carsten M. (carsten_m)
>Geht Klar wurde gemacht. Weitere Änderungen?
Die Verbindungsleitungen zwischen den TLC müssen nicht so dick sein, das
sind einfache Signale. Wenn man es selber ätzt 0,3mm, bei
Profiproduktion auch 0,2mm Breite. Bestenfalls die 5V Versorgung kann
man 0,5mm breit machen.
Die zwei senrechten Letungen auf Bottom in der Mitte weiter
zusammenrücken, das dort KEINE Masseinsel entsteht.
Die wenigen Leitungen auf Bottom bekommt man zu 90% auch noch auf TOP
gezogen, nur wo es WIRKLICH nicht durchgeht einen kurzen Umstieg auf
Bottom machen. Vor allem was die lange Leitung rechts angeht. Dann hast
du eine nahezu durchgehende Massefläche.
Das mit der Kühlung für die TLC sieht gut aus.
Warum wird hier unnötigerweise nicht der Hardware SPI des AVR für die Datenversorgung der TLC genutzt?
So habe mal versucht eure Vorschläge umzusetzen, ich hoffe so ist es besser. Ich habe hier nicht die Hardware SPI des Atmega genommen, weil im dem C-Code die Pins der Datenversorgung vorab definiert werden und ich dachte dann das der Atmega noch genug freie Pins hat und ich das einfach verteile. Ist das ein Problem? Gruß Carsten
@ Carsten M. (carsten_m) >Ich habe hier nicht die Hardware SPI des Atmega genommen, weil im dem >C-Code die Pins der Datenversorgung vorab definiert werden und ich >dachte dann das der Atmega noch genug freie Pins hat und ich das einfach >verteile. >Ist das ein Problem? Nein, aber man verschenkt ein wenig Rechenleistung. Spielt bei dem Projekt aber keine Rolle. Ist mehr Ästhetik.
Ach ja, zum Layout. Schalte bei den Polygonen die Option ORPHANTS OFF, denn die kleinen Masseflecken ohne elektrische Verbindung bringen nix, im Zweifelsfall Ärger. Die Leiterzüge in die usseren Kontakte der Stiftleiste JP3 erzeugen stumpfe Winkel, das sieht komisch aus un kann ggf. leichte Probleme beim Ätzen machen. Besser man geht rechtwinklig vom Pad nach links weg, dann schräg runter und weiter nach links. Pin 16 am oberen TLC das Gleiche. Es fehlen Name und Value bei deinen TLC Packages. Zum Themas Schaltregler und Layout gibt es ja den Klassiker vom Lothar. http://www.lothar-miller.de/s9y/categories/40-Layout-Schaltregler ICh persönlich bevorzuge achteckige VIAs, da kriegt man auch mehr auf engen Raum und sie sehen für mich irgendwie besser aus. Man kann noch mehr Leitungen von Bottom auf TOP verschieben. Man kann die Gesamtschaltung komplett nach recht schieben, der Abstand zu JP3 ist verschwendet. Es fehlen Befestigungslöcher, die nimmt man aus der Lib holes.lbr
Hi nochmal, ich bin codetechnisch etwas ratlos. Die Platine ist wie oben besprochen geätzt und beschalten - nun versuche ich die LEDs anzusteuern, erziele aber keinen Erfolg. Manche LEDstränge gehen nicht an, eine Änderung des angegebenen Wertes ändert nicht die Lichtstärke etc. Den Code habe ich von https://code.google.com/p/monash-wsrnlab/source/browse/trunk/ebug/drivers/tlc5947/tlc5947.c?r=67 übernommen. Ich gebe zu, dass ich nicht wirklich verstehe, wie die Ansteuerung gemacht wird (das Datenblatt zum TLC5947 lässt mich weitgehend ratlos zurück) und hatte eigentlich gehofft, mit dem bestehenden Code arbeiten zu können. Kann mir jemand sagen, was ich falsch mache? Grüße
1 | #include <stdlib.h> |
2 | #include <stdint.h> |
3 | #include <avr/io.h> |
4 | #include <avr/interrupt.h> |
5 | #include <string.h> |
6 | #include <math.h> |
7 | |
8 | |
9 | |
10 | #define F_CPU 8000000UL // processor clock frequency
|
11 | |
12 | |
13 | #include <util/delay.h> |
14 | #define nop() __asm__ __volatile__("nop")
|
15 | |
16 | // Number of cascaded TLC5947 chips
|
17 | #define TLC5947_N 2
|
18 | |
19 | |
20 | |
21 | //XLAT - PB2 SS
|
22 | #define SET_RGB_XLAT_HIGH {PORTC |= (1 << PC5);}
|
23 | #define SET_RGB_XLAT_LOW {PORTC &= ~(1 << PC5);}
|
24 | |
25 | //BLANK - PB1
|
26 | #define SET_RGB_BLANK_HIGH {PORTC |= (1 << PC1);}
|
27 | #define SET_RGB_BLANK_LOW {PORTC &= ~(1 << PC1);}
|
28 | |
29 | #if (36 * TLC5947_N > 255)
|
30 | #define gsData_t uint16_t
|
31 | #else
|
32 | #define gsData_t uint8_t
|
33 | #endif
|
34 | |
35 | #if (24 * TLC5947_N > 255)
|
36 | #define channel_t uint16_t
|
37 | #else
|
38 | #define channel_t uint8_t
|
39 | #endif
|
40 | |
41 | #define gsDataSize ((gsData_t)36 * TLC5947_N)
|
42 | #define numChannels ((channel_t)24 * TLC5947_N)
|
43 | |
44 | extern uint8_t gsData[gsDataSize]; |
45 | |
46 | void TLC5947_SetGS(channel_t channel, uint16_t value); |
47 | void TLC5947_SetAllGS(uint16_t value); |
48 | |
49 | #if (3 * 24 * TLC5947_N > 255)
|
50 | #define channel3_t uint16_t
|
51 | #else
|
52 | #define channel3_t uint8_t
|
53 | #endif
|
54 | |
55 | uint8_t gsData[gsDataSize]; |
56 | |
57 | void TLC5947_SetGS(channel_t channel, uint16_t value) |
58 | {
|
59 | channel = numChannels - 1 - channel; |
60 | channel3_t i = (channel3_t)channel * 3 / 2; |
61 | switch (channel % 2) |
62 | {
|
63 | case 0: |
64 | gsData[i] = (value >> 4); |
65 | i++; |
66 | gsData[i] = (gsData[i] & 0x0F) | (uint8_t)(value << 4); |
67 | break; |
68 | default:
|
69 | gsData[i] = (gsData[i] & 0xF0) | (value >> 8); |
70 | i++; |
71 | gsData[i] = (uint8_t)value; |
72 | break; |
73 | }
|
74 | }
|
75 | |
76 | void TLC5947_SetAllGS(uint16_t value) |
77 | {
|
78 | uint8_t tmp1 = (value >> 4); |
79 | uint8_t tmp2 = (uint8_t)(value << 4) | (tmp1 >> 4); |
80 | gsData_t i = 0; |
81 | do
|
82 | {
|
83 | gsData[i++] = tmp1; // bits: 11 10 09 08 07 06 05 04 |
84 | gsData[i++] = tmp2; // bits: 03 02 01 00 11 10 09 08 |
85 | gsData[i++] = (uint8_t)value; // bits: 07 06 05 04 03 02 01 00 |
86 | } while (i < gsDataSize); |
87 | }
|
88 | |
89 | |
90 | void init(void) //initialise ports |
91 | {
|
92 | |
93 | //set port output
|
94 | DDRB = 0xFF; |
95 | DDRC = 0xFF; |
96 | DDRD = 0xFF; |
97 | nop(); |
98 | |
99 | //ports initialize low
|
100 | PORTB = 0x00; |
101 | PORTC = 0x00; |
102 | nop(); |
103 | |
104 | }
|
105 | |
106 | int main(void){ |
107 | |
108 | uint8_t i; |
109 | |
110 | init(); |
111 | PORTD = 0xFD; |
112 | |
113 | |
114 | |
115 | while (1) |
116 | {
|
117 | |
118 | TLC5947_SetAllGS(1000); |
119 | |
120 | }
|
121 | |
122 | }
|
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.