Forum: Mikrocontroller und Digitale Elektronik Multiplexing nur über HC595 ohne extra Digitansteuerung


von Rolle (Gast)


Lesenswert?

Hallo,

ich habe 12 Stück 7-Segmentanzeigen (Low Current) die ich nun um Pins 
und Layoutaufwand zu sparen mittels Multiplexing ansteuern will.
Problem: Der Tiny2313 hat leider nicht genug "Füße" für 8 
Segmentausgänge und 12 Digitausgänge.
Ich habe mir deshalb folgendes Überlegt:
Ich Verwende kaskadierte 74HC595, ich möchte damit nicht nur die 
Segmente Ansteuern sondern auch noch die Selektierung des Digits machen. 
Als Treiber für die Anoden der Digits würde ich NPN-Transistoren in 
Emitterschaltung verwenden (Spart auch noch den Basiswiderstand), die 
Segmente werden normal über einen ULN2803 gefüttert. Ich gebe also in 
den HC595 nicht nur die Bitmuster für die Segmente sondern schalte damit 
auch die betreffenden Digits weiter. Das ganze läuft interruptgesteuert, 
und ich habe dadurch auch noch einige Pins am uC frei für andere Zwecke.
Leider konnte ich im Forum nichts dazu finden, ob das schon mal jemand 
gemacht hat der eventuell eine Aussage darüber treffen kann ob das so 
komplikationslos geht oder mit welchen Problemen ich rechnen muss...

Grüße
Rolle

von holger (Gast)


Lesenswert?

>Leider konnte ich im Forum nichts dazu finden,

Dann such mal weiter.

von Reinhard Kern (Gast)


Lesenswert?

Rolle schrieb:
> Leider konnte ich im Forum nichts dazu finden, ob das schon mal jemand
> gemacht hat

Jemand? Tausende.

Noch ein Hinweis dazu: man braucht keine 12 Digit-Pins. Es reichen 4, 
die man dekodiert, weil ja nur ein Digit auf einmal an sein darf.

Gruss Reinhard

von Matthias L. (Gast)


Lesenswert?

> Als Treiber für die Anoden der Digits würde ich NPN-Transistoren in
> Emitterschaltung verwenden (Spart auch noch den Basiswiderstand),

Emitterschaltung ohne Basiswiderstand? Du meinst Kollektorschaltung, die 
würde ich für die Segmentansteuerung raten.


> Segmente werden normal über einen ULN2803 gefüttert.

Puh. Die Sch**teile. Welche Seganzeigen nimmst denn eigentlich? Wenn du 
LowCurrent-Typen verwendest (HDN175), dann kann der 595 die Segmente 
direkt treiben..

von Volker S. (volkerschulz)


Lesenswert?

Matthias Lipinsky schrieb:
>> Als Treiber für die Anoden der Digits würde ich NPN-Transistoren in
>> Emitterschaltung verwenden (Spart auch noch den Basiswiderstand),
>
> Emitterschaltung ohne Basiswiderstand? Du meinst Kollektorschaltung, die
> würde ich für die Segmentansteuerung raten.
>
>
>> Segmente werden normal über einen ULN2803 gefüttert.
>
> Puh. Die Sch**teile. Welche Seganzeigen nimmst denn eigentlich? Wenn du
> LowCurrent-Typen verwendest (HDN175), dann kann der 595 die Segmente
> direkt treiben..

Du redest ja als haette Dir ein ULN2803 mal die Frau ausgespannt... ;) 
Vielleicht musst Du die Teile auch nur mal richtig kennenlernen. Dann 
macht naemlich auch Rolles Aussage mit dem Weglassen des 
Basiswiderstands wieder Sinn, die ULN2803 haben naemlich schon einen 
integriert.

Dass der 595 eine Low-Current-LED pro Pin direkt treiben kann, stimmt 
allerdings. Bis 5mA, wenn ich nicht irre...


Volker

von Matthias L. (Gast)


Lesenswert?

>Dass der 595 eine Low-Current-LED pro Pin direkt treiben kann, stimmt
>allerdings. Bis 5mA, wenn ich nicht irre...

Pro Pin bis 20mA, in Summe bis 80mA. Also 10mA pro Pin dauerhaft.
Reicht für angegebene Seg-Anzeigen locker bis 10:1


>u redest ja als haette Dir ein ULN2803 mal die Frau ausgespannt... ;)
>Vielleicht musst Du die Teile auch nur mal richtig kennenlernen.

Hehe..
Lt. Datenblatt haben die Widerstände am Eingang. Das nützt allerdings 
nichts, wenn man dahinter eine Emitterschaltung bauen will.

von Volker S. (volkerschulz)


Lesenswert?

Matthias Lipinsky schrieb:
>>Dass der 595 eine Low-Current-LED pro Pin direkt treiben kann, stimmt
>>allerdings. Bis 5mA, wenn ich nicht irre...
>
> Pro Pin bis 20mA, in Summe bis 80mA. Also 10mA pro Pin dauerhaft.
> Reicht für angegebene Seg-Anzeigen locker bis 10:1

Hab gerade nochmal schnell in ein Datenblatt geschaut. Da waeren es max. 
8.75mA pro Pin (weil Summe <= 70mA). Zur Not koennte man das ja noch 
verdoppeln, wenn man 4x Source und 4x Sink macht... Aber fuer 
Low-Currents reicht es in jedem Fall.


>>u redest ja als haette Dir ein ULN2803 mal die Frau ausgespannt... ;)
>>Vielleicht musst Du die Teile auch nur mal richtig kennenlernen.
>
> Hehe..
> Lt. Datenblatt haben die Widerstände am Eingang. Das nützt allerdings
> nichts, wenn man dahinter eine Emitterschaltung bauen will.

Hae? Die Widerstaende am Eingang sind logischerweise die 
Basiswiderstaende... Warum sollten die nichts nuetzen?


Volker

von Matthias L. (Gast)


Lesenswert?

>Hae? Die Widerstaende am Eingang sind logischerweise die
>Basiswiderstaende... Warum sollten die nichts nuetzen?

Diese sind im ULN drin.
Aber bei dem Satz hier:

>>Als Treiber für die Anoden der Digits würde ich NPN-Transistoren in
>>Emitterschaltung verwenden (Spart auch noch den Basiswiderstand),

bin ich davon ausgegangen, dass er eine diskrete Emitterschaltung als 
Ansteuerung der COMMON-Leitung verwenden will.

von Route_66 (Gast)


Lesenswert?

Hallo!
> Ansteuerung der COMMON-Leitung

Bei der Ansteuerung deiner Matrix gibt es zwei COMMON Leitungsgruppen:
Spalten und Zeilen. Bei Siebensegmentanzeigen sind das Segment- bzw. 
Digit-Leitungen. Je nachdem wo die anoden und katoden der LEDs sind 
müssen die spalten gegen GND und die Zeilen gegen Plus geschaltet werden 
oder umgekehrt. Gegen GND kann man ganz gut die ULN2803 verwenden.

von Peter D. (peda)


Lesenswert?

Rolle schrieb:
> Ich Verwende kaskadierte 74HC595, ich möchte damit nicht nur die
> Segmente Ansteuern sondern auch noch die Selektierung des Digits machen.

Ja, kein Problem, brauchst dann 3 Stück HC595 kaskadiert.

Ich würde die Segmente multiplexen, dann ist das Tastverhältnis 
günstiger (1:8 statt 1:12).
Du mußt dann die 12 Stromeinstellwiderstände in die Digitanschlüsse 
legen.
Die Software wird dann nen Tick aufwendiger.

Die ULN sind sehr langsam, d.h. es könnte nötig werden, immer erstmal 
alles aus auszugeben, damit es keine Geister gibt.

Transistoren in Kollektorschaltung sind deutlich schneller, da kannst Du 
Segment+Digit gleichzeitig umschalten.


Peter

von Route_66 (Gast)


Lesenswert?

> Die ULN sind sehr langsam, d.h. es könnte nötig werden, immer erstmal
> alles aus auszugeben, damit es keine Geister gibt.

Das sollte man sich bei Multiplexansteuerung generell angewöhnen, denn 
es gibt auch "träge" Anzeigeelemente (z.B. VFD).

von Peter D. (peda)


Lesenswert?

Route_66 schrieb:
> Das sollte man sich bei Multiplexansteuerung generell angewöhnen, denn
> es gibt auch "träge" Anzeigeelemente (z.B. VFD).

Die Trägheit der Anzeigesegmente ist schnurz. Ein einmal angesteuertes 
Segment kann ruhig nachleuchten. Aber es darf kein Segment beim neuen 
Digit leuchten, was dunkel sein soll.
Enscheidend ist daher nur die Trägheit der Ansteuerung.

Beim VFD ist die Ansteuerung sauschnell, es ist ja eine Elektronenröhre 
und die können bis zu GHz.


Peter

von Route_66 (Gast)


Angehängte Dateien:

Lesenswert?

> Beim VFD ist die Ansteuerung sauschnell, es ist ja eine Elektronenröhre
> und die können bis zu GHz.

Das ist leider ein Irrtum.
Warum wohl geben die Hersteller von VFD ein Tastverhältnis für das 
Multiplexen an, das nicht der Anzahl der Stellen entspricht.
Oder wozu dienen die Angaben: Pulse Duration / Blanking Duration?

von Peter D. (peda)


Lesenswert?

Route_66 schrieb:
> Oder wozu dienen die Angaben: Pulse Duration / Blanking Duration?

Tja, Das geht ja aus Deinem Datenblatt nicht hervor.
Und nichtmal, ob ein Blanking überhaupt nötig ist.
Das Blanking könnte ja eine Maximalzeit sein, damit nicht alles mit 
Elektronen geflutet wird und das erste Digit nach dem Blanking heller 
leuchtet als die anderen.


Hier ein Datenblatt ohne Blanking:

http://www.newhavendisplay.com/index.php?main_page=redirect&action=url&goto=www.newhavendisplay.com%2Fspecs%2FD0116LD-29-1602.pdf

Und das Tastverhältnis entspricht auch der Gitterzahl.



Peter

von Route_66 (Gast)


Lesenswert?

> Und das Tastverhältnis entspricht auch der Gitterzahl.

Wer lesen Kann ist klar im Vorteil_

Duty Cycle 1/17 bei 16 Gittern???

von Route_66 (Gast)


Angehängte Dateien:

Lesenswert?

... oder hier: 12 Gitter -> Duty cycle 1/15

von Route_66 (Gast)


Lesenswert?

Hallo!
Fairerweise werde ich Dir mal erklären woher das kommt. Ich dachte, Du 
entstammst einer Generation, wo die Röhre noch Schulstoff war.

Die Elektronen werden von der Kathode (hier direkt geheizt) emittiert. 
Wenn das entsprechende Gitter die Stelle freigibt - also nicht negativ 
ist - fliegen die Elektronen zu den Anoden die leuchten sollen und 
deshalb auf Anodenspannungspotential liegen. Beim Auftreffen werden die 
Leuchtstoffe aktiviert und geben Licht ab. Gleichzeitig werden aber auch 
an den Anoden Elektronen "herausgeschlagen", die so genannten 
Sekundärelektronen. Es bildet sich die eine "Wolke" im Fachkreis als 
Raumladungswolke bezeichnet. Deshalb erfand man in der 
Elektronenröhrengeschichte das Bremsgitter und das Schirmgitter. Das 
führt hier aber zu weit.

Angenommen, beim VFD sollen an einer Stelle die Segmente E und F 
leuchten und an der nächsten nur das Seg G. Wird jetzt die erste Stelle 
aktiviert, bildet sich um E und F eine Elektronenwolke. Wenn man jetzt 
mit dem Gitter zur nächsten Stelle schaltet und gleichzeitig die Anode 
für das Segment G aktiviert, dan fliegt die Raumladungswolke der 
Segmente E und F der ersten stelle zu der jetzt aktiven Anode "G" dieser 
Stelle und das sieht man.

von Peter D. (peda)


Lesenswert?

Route_66 schrieb:
> Fairerweise werde ich Dir mal erklären woher das kommt. Ich dachte, Du
> entstammst einer Generation, wo die Röhre noch Schulstoff war.

Ich hab schon mit Röhren gebaut und dabei auch mal 350V angefaßt.
Das Multiplexen von VFDs habe ich aber nicht selber gemacht, die kauft 
man in der Regel fertig mit Controller und 5V-Eingang.


> Angenommen, beim VFD sollen an einer Stelle die Segmente E und F
> leuchten und an der nächsten nur das Seg G. Wird jetzt die erste Stelle
> aktiviert, bildet sich um E und F eine Elektronenwolke. Wenn man jetzt
> mit dem Gitter zur nächsten Stelle schaltet und gleichzeitig die Anode
> für das Segment G aktiviert, dan fliegt die Raumladungswolke der
> Segmente E und F der ersten stelle zu der jetzt aktiven Anode "G" dieser
> Stelle und das sieht man.

Wäre es dann nicht einfacher, nicht direkt benachbarte Digits zu 
multiplexen?
Z.B. 1, 5, 2, 6, 3, 7, 4, 8, 1 ...

Wohin fliegen die Elektronen denn beim Blanking?


Bei LEDs kann man aber gleichzeitig umschalten, wenn die Transistoren in 
Kollektorschaltung sind.


Peter

von Route_66 (Gast)


Lesenswert?

> Wohin fliegen die Elektronen denn beim Blanking?

Das zum Zweck des Sperrens negative Gitter "drückt" die Wolke in die 
Segmente E und F da sie sich ja hauptsächlich um diese Segmente gebildet 
hatte. Natürlich werden auch nach G Elektronen gedrückt. Weil aber beim 
Blanking weder E noch F noch G an Anodenspannung liegen, ist die 
Auftreffenergie nicht ausreichend, den Leuchtstoff zum Leuchten zu 
bringen und es werden auch keine neuen Sekundärelektronen erzeugt.

Multiplexing 1,5,2... löst das Problem nicht, weil die Elektronen nicht 
zur Nachbarstelle fliegen sondern in der gleichen anzeigestelle bleiben. 
Es wird ja beim Multiplexing im oben genannten Beispiel nicht nur Die 
Anode G der nächsten Stelle auf Anodenspannung gelegt, sondern Alle G's.
Deshalb findet man diesen Effekt auch beim Multiplex von 
Einzelröhren-VFD und bei Nixi's.

> Bei LEDs kann man aber gleichzeitig umschalten, wenn die Transistoren in
> Kollektorschaltung sind.
Das sit unbestritten richtig.

von Rolle (Gast)


Lesenswert?

Reinhard Kern schrieb:
> Noch ein Hinweis dazu: man braucht keine 12 Digit-Pins. Es reichen 4,
> die man dekodiert, weil ja nur ein Digit auf einmal an sein darf.

Hmmm und wie soll ich das machen? Zur Decodierung bräuchte ich doch 
wieder ein externes IC oder nicht? Ich hab so was schon mal mit einem 
74HC138 gemacht, allerdings nur 8-Stellig... :-)


Matthias Lipinsky schrieb:
> Emitterschaltung ohne Basiswiderstand? Du meinst Kollektorschaltung, die
> würde ich für die Segmentansteuerung raten.

Ups, sorry ich meinte natürlich die Kollektorschaltung.


@all

ich verwende als Anzeigen die Kingbright SA39-11SRWA von Tante Angelika 
(oder wem der Laden jetzt gehört, ist Frau Reichelt nicht mehr 
Geschäftsführerin, ich dachte die wollte das trotz Aufkauf von Farnell 
weiterführen?)

Zur Erklärung:
1 HC595 füttert über den besagten ULN2803 (warum hasst ihr die Teile 
denn so? Wenn ich das Diskret aufbaue ist das viel mehr Platinenfläche 
für Einzeltransistoren...) die Segmente. Die Common Anode wird über 
einen NPN in Kollektorschaltung bestromt. Diese NPNs will ich ebenfalls 
über HC595 füttern. Da ich alle Schieberegister Kaskadieren kann (macht 
ja sonst keinen sinn...) habe ich genau 4 Pins, Data_in, Clock, Enable, 
RCK.
Damit habe ich zwar mehr Programmieraufwand aber die Hardware bleibt 
schön klein und übersichtlich. Spezialbausteine von Maxim und wie die 
alle heißen sind zwar eine schöne Sache aber sehr teuer und teilweise 
schwer zu bekommen. Ich möchte gerne das an Bauteilen Verwenden was ich 
da habe.

Das ganze wird dann noch mit einem Goldcap gegen Stromausfall abgeblockt 
(wird so eine Art zähler). Sobald ein Spannungseinbruch mittels 
interrupt detektiert wird werden sofort alle HC595 disabled (über den 
G-Pin) und der Controller vergleicht die aktuellen Werte mit denen die 
im EEPROM stehen, wenn die aktuellen Werte größer sind werden die ins 
EEPROM gebraten und der Controller legt sich anschließend Schlafen.

MfG
Rolle

von Matthias L. (Gast)


Lesenswert?

>Hmmm und wie soll ich das machen? Zur Decodierung bräuchte ich doch
>wieder ein externes IC oder nicht? Ich hab so was schon mal mit einem
>74HC138 gemacht, allerdings nur 8-Stellig... :-)

74NC138 oder 74HC238l, je nach Polarität.


>noch mit einem Goldcap gegen Stromausfall abgeblockt

Vor paar Tagen gabs hier nen Tread, wo der Eröffner genau bei sowas mit 
nem Goldcap Probleme hatte. Such mal danach.


>aufbaue ist das viel mehr Platinenfläche für Einzeltransistoren

Ist das wirklich so? Achtmal BC8x7 ist nocht unbedingt größer als DIP16

von Rolle (Gast)


Lesenswert?

Matthias Lipinsky schrieb:
> 74NC138 oder 74HC238l, je nach Polarität.
>
>
>>noch mit einem Goldcap gegen Stromausfall abgeblockt
>
> Vor paar Tagen gabs hier nen Tread, wo der Eröffner genau bei sowas mit
> nem Goldcap Probleme hatte. Such mal danach.
>
>
>>aufbaue ist das viel mehr Platinenfläche für Einzeltransistoren
>
> Ist das wirklich so? Achtmal BC8x7 ist nocht unbedingt größer als DIP16


Hallo,
das mit dem Goldcap geht, allerdings nur wenn man zwei sachen beachtet:
1. Keine Billigen Dinger wo der Innenwiderstand riesig ist.
2. Alles Stromsauger außer dem uC werden blitzartig bei 
Spannungseinbruch abgeschaltet.
Alternativ sind noch supercaps zu nennen die bringen problemlos 1A und 
mehr. Sind allerdings nicht billig die teile. Als ich mit so einem Ding 
mal experimentiert habe (22F Type bei 2,7V) hat es bei einem Kurzschluß 
als ich auf der Platine eine Lötstelle nachgearbeitet habe (Hab zwei 
Leiterbahnen mit dem Lötkolben kurzgeschlossen und nicht dran gedacht 
das der Supercap noch geladen war) hat es diese zwei Leiterbahnen (0,6mm 
breit) mit lautem Knall verdampft. Danach brauchte ich erst mal nen 
Kaffee... :)
Wenn ich den Goldcap über eine Diode abblocke so das er nur den uC 
versorgt sollte das mit dem auch gehen.

Zum ULN2803, ich habe vergessen zu erwähnen das ist alles wo es möglich 
ist mit SMD-Bauteilen aufbauen werde. (Hab keinen Bock mehr auf 
Löcher-Bohr-Orgien) Weiterhin sind ja einige Bauteile nur noch als SMD 
zu haben.
Zu den BC8x7 Transistoren würden dann noch die Basiswiderstände dazu 
kommen und eventuell jeweils einen Pull-Down der beim ULN ebenfalls 
schon im Chip integriert ist. :-)

Rolle

von Rolle (Gast)


Lesenswert?

Ups zu früh auf Absenden geklickt,

Einen 74NC138 kann ich nicht finden, ich habe wie schon oben geschrieben 
einen HC138 verwendet, allerdings hat der nur 8 Ausgänge und ist somit 
auf 8 Digits beschränkt. Eventuell hast du dich bei der Bezeichnung 
vertippt?

Einen 4 to 12 Decoder habe ich bis jetzt leider noch nicht gesehen... 
:-)

von Peter D. (peda)


Lesenswert?

Vergiß das mit dem Decoder, das macht alles nur unnötig kompliziert.


Peter

von Rolle (Gast)


Lesenswert?

@peda,
hmm der Meinung schließe ich mich an. Verstehe ich das richtig das du 
ebenfalls die "direkte" methode Methode favorisierst? Wenn ich jetzt 
halt 12 Leiterbahnen mehr Routen muss ist das kein Problem, so viel 
Aufwand ist das auch nicht. Wichtig ist nur das ich am uC Pins spare. 
Ich will für diese Schaltung bei der das Programm recht klein ist nicht 
nur wegen der Pinknappheit einen größeren uC nehmen. Der Tiny2313 reicht 
mir für die Software bis jetzt problemlos (Speicher ist nicht mal halb 
voll) nur hat der Käfer zu wenig Füße... :-)

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Anbei mal ne besonders einfache Variante:

Du schiebst die 8 Segmentbits raus und dann legst Du an den Datenpin ne 
0 oder 1 je nachdem, wie die Digits aktiv sind.
Mit dem Strobe werden dann gleichzeitig die Segmente übernommen und die 
Digits weiter geschoben.
Die Digits sind um 1 versetzt, da das Strobe erst einen Takt später 
übernimmt.

Das geht allerdings nur mit der Kollektorschaltung (die keine 
Basiswiderstände benötigt) ohne Totzeit beim Weiterschalten.

Mit den langsamen ULN müßte man am Segment-Output-Enable noch ne Totzeit 
programmieren.


Peter

von Rolle (Gast)


Lesenswert?

Hallo peda,

danke für die Zeichnung das sieht sehr interessant aus. Ich glaube ich 
habs jetzt kapiert, vielen Dank an dich. Ich werde also mal anfangen das 
Layout zu erstellen. Allerdings nicht mehr heute (ist mir zu spät...:-D) 
sondern erst "Morgen". Die Totzeit die ich brauche da die ULNs durch die 
Darlington-Schaltung nicht so schnell sind werde ich sicherheitshalber 
mal über den Enable des HC595 einbauen, sprich diesen auch auf den uC 
führen.

Grüße
Rolle

von Reinhard Kern (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Vergiß das mit dem Decoder, das macht alles nur unnötig kompliziert.

Wieso? man kann z.B. 2 x 6 Digits multiplexen, dann hat man 2 x 595 und 
1 x 138 - 8 Widerstände mehr, dafür nur halb so viele 
Digittreiber-Transistoren. Meistens gibt es nehr als eine Lösung und 
Denkverbote führen ganz bestimmt nicht zu optimalen Lösungen.

Ich behaupte ja auch nicht, dass das das einzig Richtige wäre. Fanatiker 
haben in der Technik nix zu suchen.

Gruss Reinhard

von Peter D. (peda)


Lesenswert?

Reinhard Kern schrieb:
> Wieso? man kann z.B. 2 x 6 Digits multiplexen, dann hat man 2 x 595 und
> 1 x 138 - 8 Widerstände mehr, dafür nur halb so viele
> Digittreiber-Transistoren.

Egal, ob 8 X 12 oder 16 X 6 Multiplex, in jedem Fall gehts mit 3 * 
74HC595 und nur 3 IO-Pins des MC.
Der 74HC138 ist dabei fehl am Platze.

Ich hab nix gegen andere Lösungen, sie sollten halt wenigstens einen 
einzigen Vorteil haben.


Peter

von Reinhard Kern (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Egal, ob 8 X 12 oder 16 X 6 Multiplex...

Immerhin Bewegung. Bis jetzt wurden in diesem Thread nur 12 Digittreiber 
akzeptiert.

Gruss Reinhard

von Peter D. (peda)


Lesenswert?

Reinhard Kern schrieb:
> Immerhin Bewegung. Bis jetzt wurden in diesem Thread nur 12 Digittreiber
> akzeptiert.

Nö, ich hatte auch 12 * 8, also Segmentmultiplex vorgeschlagen, wobei 
zugegeben die Software etwas Sortierarbeit leisten muß.
Bis zu 1:16 Multiplex sehe ich aber keine großen Probleme bezüglich der 
Spitzenströme.


Peter

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.