Forum: Mikrocontroller und Digitale Elektronik sieben-Segment über Shiftregister


von pumpkin (Gast)


Lesenswert?

hallo forum,

ich möchte 7-segment elemente jeweils über ein 8-bit shiftregister 
ansteuern. meine frage: kann man die beiden intelligent miteinander 
verschalten um am ASCII (oder BCD) code nicht mehr zu viel änderns zu 
müssen (am besten natürlich ganichts) und trotzdem die richtigen 
segmente leuchten?

thx, pumpkin

von Stefan G. (steg13)


Lesenswert?

wenn ich mir die Warheitstabelle des CMOS4055 ansehe würde ich sagen:
das kann nicht gehen.

von Michael U. (Gast)


Lesenswert?

Hallo,

naja, 7-Segmentdecoder in Hardware enthalten eigentlich etliche 
Gatterverknüpfungen und die Wahrheitstabellen sehen auch nicht so 
sonderlich systematisch aus.

Wenn Du das geschickt mit Drahtbrücken erstzen kannst... ;)

Sind doch letztlich nur ein paar Byte im µC, um das zu erschlagen.
Tabelle mit den gewünschten Darstellungen im Flash, ASCII-Wert - 0x30 
zum Tabellenanfang dazu und Du hast den Code zumindest bei Ziffern.
Bei Multiplex lege ich die schon codierten Zechen für alle Stellen im 
Ram ab und schicke die nur im Kreis mit dem Stellenwert raus.

Jenach Stellenzahl spart ein MAX7219.
Ansonsten an das Schieberegister einen 7-Segmentdekoder an 4Bits ran und 
einen 1 aus 8 Dekoder an die nächsten 3 Bit und die Dezimalpunkte an das 
letzte Bit. Reicht dann für 8 Stellen im Multiplex, bedingt aber eben 
etliches IC-Zeug...

Gruß aus Berlin
Michael

von pumpkin (Gast)


Lesenswert?

eben, genau dieses IC zeuch wollte ich mir sparen. hab gerade auch mal n 
bissl gefummelt und mir den code angeschaut. ein system habe ich nicht 
ausmachen können. werd ich dann wohl leider per code machen müssen, 
leider ist die zeit auf dem uC extrem knapp...aber war mutt dat mutt.

trotzdem danke

pumpkin

von holm (Gast)


Lesenswert?

Das ist nicht dramatisch.
Ich habe so ein Pollin 14 Segment (oder 16?) Display auf diese Weise
angesteuert, halt den Chraktergenerator im Flash, dafür gibt es eh
keinen fertigen Decoder. Die Anoden und die Gitter der Röhre werden
aus einem einzigen langen Schieberegister befeuert, das an der USI hängt
und mit 4Mhz Takt aktualisiert.

Für ein LED Display ist das nicht anders, die Treiberei muß halt anders 
aussehen, das Prinzip ist das Selbe.

Gruß,

Holm

von Ralf Kellerbauer (Gast)


Lesenswert?

ASCII bzw. unsere Schreibweise von Zahlen und Buchstaben unterscheidet 
sich deutlich vom 7-Segment Design. Da bleibt nur die Tabelle im Flash 
übrig, was bei 0-9 und einigen Sonderzeichen kaum Aufwand bedeutet.

Sind nur wenige Stellen und seltener Update der Anzeige nötig kann man 
per xx164 mit 2 Leitungen (Takt und Data) arbeiten.
Bei häufigen Update der Anzeige leuchten auch die anderen 'off' Digits 
nach, dann ist ein Schieberegister mit Latch nötig.

Multiplex bei einem eh schon gut ausgelastetem uC erscheint mir knifflig 
bzgl. sichtbaren Flackern der Anzeige.

von pumpkin (Gast)


Lesenswert?

ich werde es per daisychain angeordneten shiftregistern (latched) und 
switch-case machen. ich denke das ist die eleganteste methode.

pumpkin

von Karl H. (kbuchegg)


Lesenswert?

> switch-case machen. ich denke das ist die eleganteste methode.

Das denke ich nicht.
Die eleganteste Methode ist mit Sicherheit eine Lookup Tabelle.
Mit der Zahl als Index in die Tabelle gehen und damit
das Byte abgreifen, dass zur Anzeige muss. Ist in C
ein 1-Zeiler + eine kleine Tabelle.

von Stefan W. (wswbln)


Angehängte Dateien:

Lesenswert?

...Du kannst Dir evtl. hier ein paar Anregungen holen: 
http://elm-chan.org/docs/avr/avrisp.html

Das angehängte Bildchen zeigt meine Implementierung mit 6 St. 
7-Segmentanzeigen. Wird von meinen Kollegen und mir immer gerne für's 
Debugging genommen :-)

von Peter D. (peda)


Lesenswert?

Ralf Kellerbauer wrote:

> Multiplex bei einem eh schon gut ausgelastetem uC erscheint mir knifflig
> bzgl. sichtbaren Flackern der Anzeige.


Flackern tuts nur, wenn Du die Timerinterruptzeit zu lang wählst.
Ich nehme so 200Hz..1000Hz * Digitzahl.

Auch bei "guter Auslastung" ist es oft keine Problem die Anzeige einfach 
im Timerinterrupt mit reinzupappen.

Ich nehme immer einen Timerinterupt fürs Multiplexen, Tastenentprellen 
und Uhrzeit (RTC), Scheduler (Timeouts) usw. zusammen.


Peter

von pumpkin (Gast)


Lesenswert?

wie oft die anzeige bei mir aktuallisiert wird ist eigentlich sekundär 
(ist nur eine frequenzanzeige). wichtig ist die zeitkritische 
interruptroutine die sehr knapp bemessen ist.
das mit dem lookup ist auch ne gute alternative. danke für die tips 
jungs!

pumpkin

von Peter D. (peda)


Lesenswert?

Karl heinz Buchegger wrote:

> Die eleganteste Methode ist mit Sicherheit eine Lookup Tabelle.
> Mit der Zahl als Index in die Tabelle gehen und damit
> das Byte abgreifen, dass zur Anzeige muss. Ist in C
> ein 1-Zeiler + eine kleine Tabelle.

Jau aber ganz genau.

Umkodierungen macht man immer nur über ne Tabelle, alles andere ist 
Quatsch.

Selbst die ollen PICs haben ja sogar schon nen Tabellenlesebefehl 
(RETLW), wenn auch etwas durch die Brust ins Auge (extra Pageberechnung 
erforderlich).


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.