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
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
> 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..
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
>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.
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
>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.
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.
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
> 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).
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
> 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?
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
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.
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
> 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.
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
>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
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
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...
:-)
@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... :-)
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
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
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
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
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
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