Forum: Mikrocontroller und Digitale Elektronik Multiplexing bei 7-Segmentanzeige


von Inu0815 (Gast)


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;
  }
}

von MaWin (Gast)


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"

von Inu0815 (Gast)


Lesenswert?

HIGH bedeutet bei 7-Segmwent-Anzeigen mit gemeinsamer Anode, dass die 
jeweils gesteuerte LED aus ist. Bei LOW ist diese LED an.

Wie kann ich nun erreichen, das LOW wirklich 0 und HIGH auch wirklich 
5Volt sind?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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?

von Falk B. (falk)


Lesenswert?

@  Lothar Miller (lkmiller) (Moderator) Benutzerseite

>Inu0815 schrieb:
>> geschalten
>Bist du aus Österreich?

Oweh, jetzt hast du ihn gescholten! ;-)

von Karl H. (kbuchegg)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

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


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

von fredl (Gast)


Lesenswert?

Hallo inu0815

Lass den Treibertransistor pro Digit ruhig fort u. mach die Digit-Ports 
zu den gemeinsamen Anoden H-aktiv.
Die zusammengefassten Segmente jeweils über einen Widerst. zum L-aktiven 
Segment-Port.

Siehe hier:
    Beitrag "DCF / DCF77 UHR - LCD LED Samplingverfahren ATmega8 ASSEMBLER"
    --> SCHALTPLAN_DCF77_LED_2012.pdf

von Malte S. (maltest)


Lesenswert?

Port nicht als Ausgang konfiguriert und nur über die Pull-Ups "oben"?

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


Lesenswert?

fredl schrieb:
> Lass den Treibertransistor pro Digit ruhig fort u. mach die Digit-Ports
> zu den gemeinsamen Anoden H-aktiv.
Auf dass die Pintransistoren brennen, amen.

von Inu0815 (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Wie wärs denn so langsam mal mit einen SCHALTPLAN mit BauteilNAMEN und 
BauteilWERTEN statt dieser andauernden und elend ausufernden textuellen 
Beschreibung?

Elektroniker kommunizieren nun mal in Schaltplänen und nicht mit 
textuellen Netzlisten (oder beliebigen Abarten davon)...  :-/

von Joachim .. (joachim_01)


Lesenswert?

Ich hatte mal an nem PIC beobachtet, dass ich ihn beim peweemmen 
(0..255) nicht auf 0 sondern nur auf 1 runterbekam. Das hat ausgereicht 
um ein Glimmen deutlich wahrzunehmen. Schau doch mal mitm Oszi ob die 
Ausgänge auch wirklich das machen was sie sollen.

von Inu0815 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

und hier ist noch der Schaltplan. Erbitte weitere Hilfe.

von Helmut L. (helmi1)


Lesenswert?

Bei den Transistoren ist Kollektor und Emitter vertauscht.

von Inu0815 (Gast)


Lesenswert?

Ist als Kollektorschaltung gedacht. Wenn ich Emitter und Kollektor 
tausche (Emitterschaltung), so wird das Mitleuchten schlimmer.

von Malte S. (maltest)


Lesenswert?

Dann brauchst Du aber NPNs...

von MaWin (Gast)


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.

von Matze0001 (Gast)


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

von Unixer (Gast)


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.

von Unixer (Gast)


Lesenswert?

Nachtrag zu meinem letzten Kommentar zu Punkt 2:
Der Strom sollte natürlich nicht die Ports vom AVR brennen lassen.
Hänge einen ULN2003 dazwischen, dann kannst Du die Widerstände 
entsprechend
verkleinern.

von Inu0815 (Gast)


Angehängte Dateien:

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.

von Karl H. (kbuchegg)


Lesenswert?

Inu0815 schrieb:
> @MaWin:
> wieso kommst Du auf lediglich 3.3mA für ein Segment?

Weil dein Vorwiderstand von 160Ohm bei einem Multiplex von 1:6 nun mal 
Im Schnitt nicht mehr zulässt.

5-1.7 = 3.3V, die über dem Widerstand abfallen
3.3 / 160 = ca 20mA

gemultiplext: 20 / 6 -> 3mA

deine LED leuchten also so hell, als ob du den Strom auf ca. 3mA 
einstellt hättest.

von Karl H. (kbuchegg)


Lesenswert?

Und zeig bitte mal das ganze Programm.

von Willi (Gast)


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.

von Inu0815 (Gast)


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.

von Inu0815 (Gast)


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?

von MaWin (Gast)


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

von MaWin (Gast)


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.

von Karl H. (kbuchegg)


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.

von Willi (Gast)


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 :-)

von Willi (Gast)


Lesenswert?

Willi schrieb:
.. es sein denn, man würde die Kapazität der einzelnen Segment gezielt 
entladen.

Soviel Zeit muß sein!

von Inu0815 (Gast)


Angehängte Dateien:

Lesenswert?

So, dann hier mal als dateianhang noch den kompletten Code.

von Peter D. (peda)


Lesenswert?

Inu0815 schrieb:
> und hier ist noch der Schaltplan. Erbitte weitere Hilfe.

Der ist völlig falsch.
T1 .. T6 müssen npn sein (BC337).
Und R8 .. R13 müssen weg.


Peter

von Karl H. (kbuchegg)


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!

von Inu0815 (Gast)


Lesenswert?

@Karl Heinz Buchegger:

Das war der Fehler!!!

Jetzt läuft es wunderbar - so wie es soll!

Danke an alle für eure Anregungen, Hinweise und Meinungen.

Viele Grüße

von Karl H. (kbuchegg)


Lesenswert?

Inu0815 schrieb:
> @Karl Heinz Buchegger:
>
> Das war der Fehler!!!

Willi mit seinen Kapazitäten hat mich auf die Idee gebracht, das zu 
checken.

Genau deshalb mag ich deine Schaltpläne nicht. Im Eagle sind auch die 
Alternate-Functions an jedem Pin aufgeführt und da wärs schneller 
aufgefallen.

von Willi (Gast)


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.

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


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

von Axel (Gast)


Lesenswert?

Welchen Grund gibt es, sich die Arbeit zu machen ein Foto nach png zu 
konvertieren?

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.