Multiplexing bei 7-Segmentanzeige

Gast #2980570
Lesenswert?

Hallo Leute,

beim Bau einer kleineren 6-stelligen Digitaluhr mit dem Atmega8 im 
Multiplexbetrieb ist mir aufgefallen, dass die einzelnen LEDs eine 
jeweiligen Segments auch immer dann noch minimal mitleuchten, wenn 
eigentlich das Signal auf "aus" steht.

Ich nutze sechs 7-Segmentanzeigen mit gemeinsamer Annode, die über 
PNP-Transisteoren (BC560C) geschalten werden, wobei die Basis mit einem 
1kOhm-Widerstand am jeweiligen PIN des ATmega liegen und der Emitter 
direkt mit Vcc verbunden ist. Der Kollektor geht somit an die gemeinsame 
Anode. Die Multiplexfrequenz beträgt ca. 67 Hz je Segment. Ein Flimmern 
ist nicht zu sehen.

Wie kann man sich dieses minimale Mitleuchen erklären. Schalte ich 
zwischen der Basis des Transistors und Vcc einen weiteren Widerstand 
(z.B. 10kOhm), so verschwindet das Mitleuchten. Wäre diese 
Vorgehensweise mit den zusätzlichen Widerständen korrekt?

Hier mal ein kurzer Code-Auszug des Interrupts, der das Multiplexen 
steuert:

ISR (TIMER0_OVF_vect)
{
  TCNT0    = 256-39;  // 16 Mhz:Vorteiler(1024):39 = 400Hz
  PORT_DIGIT  = 0xff;    // Port ausschalten
  PORT_SEGMENT    = bcd_7_ca[zeitanzeige[positionMultiplex]];
  PORT_DIGIT  = digit[positionMultiplex];
  positionMultiplex++;
  if (positionMultiplex == 6)
  {
    positionMultiplex=0;
  }
}
Gast #2980580
Lesenswert?

> Wäre diese Vorgehensweise mit den zusätzlichen Widerständen korrekt?

Eigentlich überflüssig, denn ein auf HIGH geschalteter Ausgang
hat wesentlich weniger als 10k nach +5V, nämilch deine 1k
Basisvorwiderstand.

Also ist vermtulicu dein Port nur "LOW" oder "Offen" und nicht
"LO=0V" und "HIGH=5V"
Moderator (Firma: Titel) Persönliche Seite #2980649
Lesenswert?

Inu0815 schrieb:
> geschalten
Bist du aus Österreich?

> Ich nutze sechs 7-Segmentanzeigen mit gemeinsamer Annode, die über
> PNP-Transisteoren (BC560C) geschalten werden, wobei die Basis mit einem
> 1kOhm-Widerstand am jeweiligen PIN des ATmega liegen und der Emitter
> direkt mit Vcc verbunden ist.
> Schalte ich zwischen der Basis des Transistors und Vcc einen
> weiteren Widerstand (z.B. 10kOhm), so verschwindet das Mitleuchten.
Elektroniker verständigen sich nicht mit Prosa, sondern mit 
Schaltplänen.

> Wäre diese Vorgehensweise mit den zusätzlichen Widerständen korrekt?
Hört sich eher nach "Murks" an...

> HIGH bedeutet bei 7-Segmwent-Anzeigen mit gemeinsamer Anode, dass die
> jeweils gesteuerte LED aus ist. Bei LOW ist diese LED an.
Definiere "High" und "Low".

Inu0815 schrieb:
> Wie kann ich nun erreichen, das LOW wirklich 0 und HIGH auch wirklich
> 5Volt sind?
Wozu brauchst du das? Eigentlich willst du nicht 0V und 5V, sondern eine 
leuchtende und eine dunkle LED. Oder nicht?
#2980707
Lesenswert?

Gib halt dem Transistor nach dem Abschalten noch ein bischen Zeit.

Leg die Berechnung des nächsten Index zwischen Ausschalten und 
Einschalten.
1
ISR (TIMER0_OVF_vect)
2
{
3
  PORT_DIGIT  = 0xff;    // Port ausschalten
4

5
  TCNT0    = 256-39;  // 16 Mhz:Vorteiler(1024):39 = 400Hz
6
  positionMultiplex++;
7
  if (positionMultiplex == 6)
8
  {
9
    positionMultiplex=0;
10
  }
11

12
  PORT_SEGMENT    = bcd_7_ca[zeitanzeige[positionMultiplex]];
13
  PORT_DIGIT  = digit[positionMultiplex];
14
}

Probier mal, ob das schon reicht.
Moderator (Firma: Titel) Persönliche Seite #2982519
Lesenswert?

Karl Heinz Buchegger schrieb:
> Gib halt dem Transistor nach dem Abschalten noch ein bischen Zeit.
Das geht nur, wenn er tatsächlich ein Problem mit Ghosting (das wäre 
dann ein feines Stichwort für die Fehlersuche) hat. Die Beschreibung im 
ersten Post hört sich für mich aber nach "immer und alle" an:
Inu0815 schrieb:
>>> dass die einzelnen LEDs eine
>>> jeweiligen Segments auch immer dann noch minimal mitleuchten

Falk Brunner schrieb:
> Oweh, jetzt hast du ihn gescholten! ;-)
Augenscheinlich zuviel der Schelte, denn er meldet sich nicht mehr... 
:-o
(Firma: fritzler-avr.de) #2982590
Lesenswert?

Mal abgesehen davon, dass du den BC560 total überlastest.
Der kann nur 100mA aber selbst ohne Multiplex fließen schon bei 
7x20mA=140mA
Jetzt den Strom noch mal 6 wegen 6 fach Multiplex, gleich noch ne hohe 
Pulsbelastung.

Guck dir mal den BF421 an.

1k Basiswiderstand isn bissel klein, der Transe ist daher schön in der 
Sättigung und braucht länger zum Abschalten.
Mit den 10k gegen VCC bauste dir nen Spannungsteiler und damit ist der 
Transe nimemr so stark gesättigt -> Ghosting weg
Gast #2983508
Lesenswert?

Hi,

so ich habe jetzt folgende Änderungen vorgenommen:

1.
Aus der Emitterschaltung habe ich eine Kollektorschaltung gemacht. Damit 
war das Mitleuchten verschwunden.

2. Jetzt habe ich den Ratschag von Martin berücksichtigt und die 
Transistoren ersetzt. (Hatte leider keinen BF421 - habe statt dessen 
einen BC327-40) genommen. Die Folge war, dass die Leuchtstärke 
zugenommen hat. Hier jedoch sehe ich nun wieder ein geringes Mitleuchten 
der einzelner, eigentlich abgeschalteten LEDs.

Vergrößere ich nun den 1k-Widerstand an der Basis der Transistoren, 
verschwindet zwar das Mitleuchten, jedoch wird auch die Leuchtstärke 
insgesamt wieder geringer. Vor den einzelnen LEDs hängen 
330-Ohm-Widerstände, da ich mir nicht sicher bin, ob die chinesischen 
Anzeigen vom Typ JGD390407AY 10mA- oder 20mA-Versionen sind.

Viele Grüße
Gast #2985980
Lesenswert?

Wie wenig Milliampere soll denn so eine Anzeige abbekommen, wie dunkel 
darf es sein ?

Die meisten sind für 10mA gebaut, aber du schickst nur 3.3mA durch die 
Segmente, falls deine BC327 das überhaupt schalten, denn die bekommen 
nur 4mA Basisstrom für 140mA geschalteten Strom, also 1:35 statt den 
normalerweise verwendeten 14mA.
Gast #2986221
Lesenswert?

Stimmt die Geschwindigkeit von 67 Hz?
Hatte auch öffters schon das Problem mit ULN´s als LED-Treiber...
Weis auch nicht genau woran es liegt. Bei mir hat nur immer 
"runterschrauben"
Der Multiplexgeschwindigkeit geholfen...
Gast #2986242
Lesenswert?

Das Problem ist

1. Die Transistoren für die Anoden, das solltest Du erstmal korrigieren.
   Hinweise gab es schon genügend.

2. Beim Multiplexen nimmt man nicht die üblichen Vorwiderstandswerte
wie im konstanten Betrieb, sonder wesentlich kleinere, damit
der Helligkeitsverlust, der durch das Multiplexen entsteht, ausgeglichen
wird. In Deinem Fall würde ich auf 1/3 oder etwas weniger gehen.
Steht oft in den Datenblättern drin, mit welchem Strom beim Multiplexen 
gefahren werden darf und mit welcher Impulsdauer.
67 Hz sind m.E. ein bissel langsam.
Gast #2986809
Lesenswert?

@MaWin:
wieso kommst Du auf lediglich 3.3mA für ein Segment? Der PNP BC327-40 
kann 800mA schalten. Sollte also reichen. Die Verstärkung ist hier mit 
typ. 320 und mind. 170 bei 300mA im Datenblatt angegeben. Selbst nur 170 
sollte reichen.

@Matze0001:
Die 67Hz sind auf eine einzelne 7-Segment-Anzeige bezogen. Das 
Multiplexing ist über einen Timer/Interrupt gelöst. Der Timer steuert 
alle 2,5ms (400 Hz) den Interrupt an.
Ich habe auch schon versucht von 67Hz auf ca. 50Hz runter zu schrauben. 
Brachte aber keinen Erfolg.

@Unixer:
Wenn ich die Anoden wieder mit dem Emitter verbinde, ist daas 
Mitleuchten noch viel stärker. Mit Vorwiderständen meinst Du sicher die 
für die abcdefg-LEDs. also mit 160 Ohm ist die Anzeige mehr als hell. 
Ein Datenblatt für diese JGD390407AY habe ich leider nicht. Im Internet 
kann ich auch nichts finden.

Ich habe noch mal ein Bild mit angehangen, um den Effekt irgendwie zu 
zeigen. Im übrigen ist das Mitleuchen von links nach rechts abnehmens, 
wobei die letzten beiden Stellen nie mitleuchten. Dieser Effekt tritt 
auch auf, wenn ich die beiden 4-stelligen 7-Segment-Anzeigen vertausche; 
hat also nichts mit den Exemplaren selbst zu tun.
Angehängte Dateien:
Gast #2986881
Lesenswert?

Ein wunderschönes Bild, und soooo groß ;-)

Es liegt nicht am Programm, sondern daran, dass die BC327 nicht 
vollständig sperren. Erkennen läßt sich das an den linken Anzeigen, wo 
die Segmente der 4 und der 7 mitleuchten.
Ein zusätzlicher Widerstand basis-emitter würde sie vollständig 
ausschalten.
Ferner ist es nicht gut, den Basisstrom der BC327 zu hoch zu wählen. 
1/100stel des Emitterstroms reichen völlig aus und verringern die 
Sättigung und damit auch die Freiwerdezeit.

Abschließend muß auch noch ein Filterglas vor die Anzeige kommen, sonst 
ist der Kontrast immer zu gering.
Gast #2986887
Lesenswert?

Okay, das scheint logisch.

Folgende Versuche habe ich jetzt gemacht:

1.
Emitter aller PNP-Transistoren wieder an PLUS gelegt. Kollektor ist 
somit an den Anoden angeschlossen.
--> das Mitleuchten wird stärker

2.
Jetzt habe ich mal die Vorwiderstände in den einzelnen LEDs verringern 
(47 Ohm).
--> Mitleuchten wird noch stärker und die Ziffernausgabe ist kaum noch 
sinnvoll zu erkennen.
Gast #2986896
Lesenswert?

@Willi:
Ich habe festgestellt, dass ein zusätzlicher Widerstand zwischen Basis 
und Emitter bzw. zwischen Basis und Kollektor diesen Erfolg hat (siehe 
Threadbeginn). Was ist nun bei den PNPs sinnvoller? 
Basis-Emitter-Widerstand oder Basis-Kollektor-Widerstand? Wie hoch 
sollte ich den dimensionieren?
Gast #2986906
Lesenswert?

> wieso kommst Du auf lediglich 3.3mA für ein Segment?

Weil du 150 Ohm geschriebe hast, und ich rote/grüne 2.1V LEDs 
vorausgesetzt ahbe. Bei blauen/weissen 3.6V LEDs wäre es natürlich noch 
weniger

>  Die Verstärkung ist hier mit typ. 320 und mind. 170 bei 300mA
> im Datenblatt angegeben

EINE Verstärkung, nämlich hFE BEI Linearverstärkeranwendungen.

Im Schaltbetrieb gilt eine andere, im Diagramm Collector-emitter 
saturation voltage VCEsat = f (IC) hFE = 10
Gast #2986913
Lesenswert?

P.S.: Auf dem Bild sieht man, daß die 4 und 7 korrekt dargestellt 
werden, nur die 1 haben mitleuchtende Segmente, und zwar alle 4 auf die 
gleiche Art (Segment a leuchtet mit, Segment d nicht). Damit ist ein 
übersprechen wegen zu lansgamer Schaltzeit nicht die Ursache, sondern es 
ist wohl ein Programmfehler.
#2986920
Lesenswert?

Willi schrieb:
> Ein wunderschönes Bild, und soooo groß ;-)
>
> Es liegt nicht am Programm,

Wenn seine Pins nicht auf Ausgang geschaltet sind, dann schon.

Sicher ist sicher.
Es kostet nichts, das Programm mal zu überprüfen.
Wär nicht das erste mal, dass sich ein Frager mit seiner 'Ich präsentier 
immer nur Minimalausschnitte' selber ins Knie schiesst.
Gast #2986933
Lesenswert?

Inu0815 schrieb:
> 1.
> Emitter aller PNP-Transistoren wieder an PLUS gelegt. Kollektor ist
> somit an den Anoden angeschlossen.
> --> das Mitleuchten wird stärker

Das ist die richtige Beschaltung der BC327, bei der sie ihre nominelle 
Stromverstärkung haben. Deine 1k würde ich auf 3k3 erhöhen und einen 
Widerstand 1k zwischen Basis-Emitter vorsehen.
Du mußt dahin kommen, dass die BC327 als schnelle Schalter arbeiten, und 
auch schnell ausschalten.

Dann betrachte die Anzeige hinter einer Filterglasscheibe. Nackt sehen 
7-Segment-LEDs immer bescheiden aus.

Karl Heinz Buchegger schrieb:
> Sicher ist sicher.
> Es kostet nichts, das Programm mal zu überprüfen.
> Wär nicht das erste mal, dass sich ein Frager mit seiner 'Ich präsentier
> immer nur Minimalausschnitte' selber ins Knie schiesst.

Schon, aber solange grundlegende Defizite bei der Beschaltung von 
Transistoren vorliegen, sollte erstmal die Hardware stehen, bevor am 
Programm geschliffen wird.
Ein bißchen Geisterbild hat man immer, es sein den man würde die 
Kapazität der einzelnen Segment gezielt entladen. Eine LED ist selbst 
mit 1µs Impulsen als schwach leuchtend zu erkennen - spätestens, wenn 
man schärfstens hinkuckt :-)
#2986983
Lesenswert?

Moment mal.
Port C beim Mega8 ist der ADC Port.
WEnn du AVcc nicht angeschlossen hast, dann arbeitet der Port nicht 
richtig!
Ja, auch dann wenn du den ADC gar nicht benutzt, musst du AVcc/AGND 
versorgen.

Es werden IMMER alle Vcc/GND Pärchen angeschlossen. Immer. Und jedes 
Pärchen kriegt 100nF als Blockkondensator!
Gast #2987028
Lesenswert?

Karl Heinz Buchegger schrieb:
> Genau deshalb mag ich deine Schaltpläne nicht.

... der ja auch nicht eindeutig ist.
PC4 und PC5 werden über Vcc versorgt, sollten daher schon immer 
funktionieren und A1 + A2 ansteuern, die ja ganz links gezeichnet sind.

Mit dem 'neuen Wissen' ist A1 wohl die Anzeige ganz rechts, bei der die 
'7' ohne Restleuchten der '4' angezeigt wird.
Vermutlich lieferten PC0-PC3 wegen fehlender AVcc keinen allzu hohen 
'1'-Pegel bzw. einen offenen Ausgang und ließen die BC327 immer leicht 
eingeschaltet.
(Firma: fritzler-avr.de) #2987142
Lesenswert?

Steht auch so im DB:

PC4 can also be used as ADC input Channel 4. Note that ADC input channel 
4 uses digital power.
• ADC3 – Port C, Bit 3
PC3 can also be used as ADC input Channel 3. Note that ADC input channel 
3 uses analog power.

Wobei sowas ja bissel doof is, wenn man dann nen Pin C als IO nimmt und 
ne LED steuert hat man ja wieder schön Ripple aufm AVcc...

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