BC517 zu langsam für Matrix?

OP #3047623
Lesenswert?

Hallo!

Ich habe eine Matrix (5 x 22) erstellt.
D.h. es wurden 5 BC517 verwendet und als Spaltentreiber habe ich den 
TLC5916 verwendet. Funktioniert soweit auch.
Es wird Zeilenweise gemultiplext. D.h. Daten der ersten Zeile in den TLC 
geschrieben, 1. Transistor ein und dann gleiches für die anderen Zeilen.

Aber wenn ich z.b. in der ersten Zeile ein paar LEDs leuchten lasse, 
leuchten genau die selben LEDs in der nächsten und übernächsten Zeile 
auch, nur dass die LEDs ganz schwach leuchten.

Dazu meine Frage: Kann es sein, dass der BC517 vielleicht zu lang 
braucht, um vollständig zu sperren?


Gruß
Mathias
OP #3047639
Lesenswert?

Geizkragen schrieb:
> R5, R8 und R9 sind zu groß gewählt.

Richtig, Schaltung vergessen. Auf seite 1 sollte alles soweit 
beschrieben sein.
http://www.mikrocontroller.net/wikifiles/9/9c/Wordclock_variante3_schaltplan.pdf

Teo Derix schrieb:
> Hört sich nach "Ghosting" an.
> Mach mal ne Pause wischen der Zeilenumschaltung.

Ja, dass hier das Problem liegen könnte habe ich mir auch gedacht. Werds 
mal mit einer Pause versuchen.
OP #3047737
Lesenswert?

Ich habe nun probiert immer die gleiche Zeile zu toggeln pro 
Timer-Interrupt.
1
ISR(TIMER0_OVF_vect){
2

3
   invert(CSEL0_PORT, CSEL0_PIN);  
4
}

Jedoch werden kurzzeitig die anderen Spalten eingeschaltet. Woran könnte 
das liegen. Im Programm werden diese nirgends eingeschaltet. Vielleicht 
Massefehler?


____________________________________________

Blau: Der getoggelte Transistor
Restlichen Farben: Transistoren welche auf 0 liegen sollten
Angehängte Dateien:
Gast #3047790
Lesenswert?

Mathias S. schrieb:
>    invert(CSEL0_PORT, CSEL0_PIN);

invert ist kein Opcode, kommt drauf an, was der Compiler draus macht, 
wahrscheinlich irgendeine Form von Read-Modify-Write. Wie sich das 
auswirkt kann man ohne Schaltplan sowieso nicht beurteilen, aber 
möglicherweise musst du eben selbst bestimmen, was nacheinander 
passiert: alle Spalten abschalten(!!), Segmente umschalten, dann die 
neue Spalte einschalten. Da kann man auch noch kurze Delays einfügen, 
aber das ist sicher garnicht notwendig. Deine gemessenen Spaltenimpulse 
müssen jedenfalls weg.

Gruss Reinhard
OP #3047801
Lesenswert?

#ifndef invert
#define invert(sfr, bit)  (_SFR_BYTE(sfr) ^= _BV(bit))
#endif

invert inviert ganz normal ein Bit. Mehr ist das nicht.


Reinhard Kern schrieb:
> was nacheinander
> passiert: alle Spalten abschalten(!!), Segmente umschalten, dann die
> neue Spalte einschalten.

Momentan gehts aber mal darum, das ich immer nur EINE Zeile ein und aus 
schalte und die restlichen Zeilen sollten aus bleiben, was sie aber 
nicht tun.

Schaltplan für die Matrix sieht man hier auf Seite 1 und 2
http://www.mikrocontroller.net/wikifiles/9/9c/Wordclock_variante3_schaltplan.pdf
Gast #3047805
Lesenswert?

Mathias S. schrieb:

> Dazu meine Frage: Kann es sein, dass der BC517 vielleicht zu lang
> braucht, um vollständig zu sperren?

Ghosting ist durchaus denkbar, wie es schon jemand bemerkte. Auch eine 
viel zu hohe Multiplexfrequenz. Ich arbeitete einmal mit einer 
8-stelligen Siebensegmentanzeige, und hatte dort den ollen Intel 8279 
(Keyboard-Display-Interface) dran, der das Multiplexing von selbst 
macht, und nur den Datenbus zum µC braucht. Wenn ich mich recht 
erinnere, waren dort in den Umschaltungen Delays von 80µs drin, die der 
Baustein automatisch einfügt. Die Leistungs-Darlingtons BD675 als 
Spaltentreiber machten da überhaupt keine Probleme. Der Spannungsabfall 
am Darlington machte ebenfalls keine Probleme. Die Transistoren 
brauchten weder einen Kühlkörper, noch wurden sie warm. Energie wird da 
bei sowas ohnehin verbraten.

Der BC517 ist doch auch ein Darlington, wie er im Schaltbild nicht 
verwendet wird. Sie schalten etwas langsamer ab, als einfache 
Transistoren, besonders, wenn sie maßlos übersteuert waren.
#3047894
Lesenswert?

Das ist an so vielen Stellen schlecht...

1. der Schaltplan ist ein Witz. Eine ganze Seite wird verschwendet, um 
die (triviale) Verschaltung der LED-Matrix zu zeigen, aber dann tauchen 
da einzelne Transistoren auf bei denen lediglich Netznamen an den Pins 
stehen die man sich dann selber auf den 4 Seiten suchen darf. Falls das 
Programm (wie erwartet) genau so ein Spaghetti ist, dann möchte ich es 
gar nicht sehen.

2. der Schaltplan zeigt FZT-irgendwas, keine BC517. Ein Symbol für 
Darlington-Transen scheints auch nicht zu geben?

3. die Spaltentreiber werden als Emitterfolger betrieben. Selbstredend 
ohne Basiswiderstände.

4. noch dazu mit einer separaten Spannung für die LED. Und wir wissen 
noch nicht mal, ob nun höher oder niedriger oder gleich der 
Versorgungsspannung des µC ist. Streng genommen kann man die 
Spaltentreiber nur dann direkt mit dem µC ansteuern, wenn das die 
gleiche Spannung ist.

5. das invert() Makro ist nicht hilfreich. Viel eher hätte man ein Makro 
zum Ein- und ein zweites zum Ausschalten einer Zeile erwartet. Dann 
würde der (vereinfachte Pseudo)Code selbstdokumentierend sein:
1
ISR displaymux
2
{
3
  static int spalte;
4
  spalte_aus(spalte);
5
  spalte++;
6
  if (spalte>=anzahl_stellen)
7
    spalte=0;
8
  lade_zeile(spalte);
9
  spalte_an(spalte);
10
}

6. das Oszillogramm zeigt, daß alle Spalten mal kurz eingeschaltet 
werden. Es ist also kein Ghosting, sondern ganz klar ein Softwarefehler.


XL
Gast #3047906
Lesenswert?

> Nur in Emitterschaltung sind sie langsam.

Nein, sie sind ganz allmein beim Abschalten langsam weil aus dem zweiten 
Transistor die Basis nicht ausgeräumt wird.
Manche Leistungsdarlingtons haben deswegen BE-Widerstände drin.
Gast #3047929
Lesenswert?

MaWin schrieb:

> Manche Leistungsdarlingtons haben deswegen BE-Widerstände drin.

Und schon 35 Jahre alte Displaycontroller ein Delay in der Umschaltung.

Wenn man das ohne Controller direkt vom µC aus macht, da ist es doch 
aber kein Problem, in die Umschaltung ein Delay einzufügen.
Gast #3047931
Lesenswert?

MaWin schrieb:
> Nein, sie sind ganz allmein beim Abschalten langsam

Das mag ja sein, ist aber hier nicht relevant - nach seinen 
Oszillogrammen schaltet er irgendwo die anderen Spalten alle 
gleichzeitig sauber ein, er weiss aber nicht wo, weil er weder Hard- 
noch Software versteht. Ein Bit invertieren kann nicht alles sein um 
Spalten weiterzuschalten, aber wenn man dazu was sagt, wird er auch noch 
pampig.

Gruss Reinhard
OP #3047940
Lesenswert?

Habe nun alle c- und h-Files angehängt.

Ich habe das Programm darauf reduziert, dass immer nur eine Zeile aus 
und eingeschaltet wird, aber die anderen Zeilen werden auch immer kurz 
eingeschaltet. Nur warum?
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren