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
wenn ich mir die Warheitstabelle des CMOS4055 ansehe würde ich sagen: das kann nicht gehen.
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
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
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
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.
ich werde es per daisychain angeordneten shiftregistern (latched) und switch-case machen. ich denke das ist die eleganteste methode. pumpkin
> 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.
...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 :-)
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.