Forum: Mikrocontroller und Digitale Elektronik 400er LED-Schriftzug Schaltplan


von Carsten M. (carsten_m)


Angehängte Dateien:

Lesenswert?

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

von oszi40 (Gast)


Lesenswert?

DB siehe http://www.ti.com/product/tlc5947
400 Stück gibt schöne Fläche und somit auch etwas Störstrahlung?

von Jörch (Gast)


Lesenswert?

Wie entstehen denn die Buchstaben in Deinem Schriftzug?

von Falk B. (falk)


Lesenswert?

Sieht OK aus. Aber Signale zeichnet man nicht durch Bauteile.

von MaWin (Gast)


Lesenswert?

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

von Teo D. (teoderix)


Lesenswert?

@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?

von Carsten M. (carsten_m)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Carsten M. (carsten_m)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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

von Carsten M. (carsten_m)


Lesenswert?

Ja genau so ist es geplant. :)

Ich hoffe, dass ich den mit dem Schaltplan so umsetzten kann

von Falk B. (falk)


Lesenswert?

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

von Carsten M. (carsten_m)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Carsten M. (carsten_m)


Angehängte Dateien:

Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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

von Carsten M. (carsten_m)


Angehängte Dateien:

Lesenswert?

Geht Klar wurde gemacht. Weitere Änderungen?

von Falk B. (falk)


Lesenswert?

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

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Warum wird hier unnötigerweise nicht der Hardware SPI des AVR für die 
Datenversorgung der TLC genutzt?

von Carsten M. (carsten_m)


Angehängte Dateien:

Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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

von Carsten M. (carsten_m)


Lesenswert?

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
Noch kein Account? Hier anmelden.