Binär codierte Dezimal-ICs

Gibt es einen IC, mit dem 9-Bit-Binärcode in eine Sieben-Segment-Anzeige umgewandelt werden kann? Bsp.: 100101100->300 Ich möchte 300 in einer Sieben-Segment-Anzeige anzeigen, wenn der Binärcode 100101100 auf die Eingabe angewendet wird. Ich möchte dies nur mit ICs tun, die keine Mikrocontroller verwenden.

Warum willst du keinen Mikrocontroller verwenden? Das wäre wohl die beste und günstigste Variante.
Ein Mikrocontroller ist die offensichtliche Wahl. Da Sie keine Begründung dafür angegeben haben, warum Sie keine verwenden möchten, können wir nur annehmen, dass dies aus dummen religiösen Gründen geschieht, und diese Spezifikation daher ignorieren.
100101100 ist nicht BCD für 300, 001100000000 ist es
100101100 ist nur binär ... nicht binär codierte Dezimalzahl. und das IC, nach dem Sie suchen, wird Mikrocontroller genannt, zumal Sie eine Division (oder Multiplikation mit 1/10) durchführen müssen, wenn Sie eine Dezimalzahl wünschen.

Antworten (7)

Ich kann mir drei Möglichkeiten vorstellen, dies zu tun. Ich beginne mit dem teuersten und kompliziertesten und arbeite mich nach unten vor.

  1. Alle Logik-ICs: Verwenden Sie einen parallel geladenen 9-Bit-Binärzähler (z. B. 3x 74hc190) und einen 3-stelligen rücksetzbaren BCD-Zähler (3x 74hc163). Laden Sie den Binärzähler mit Ihrer 9-Bit-Zahl und löschen Sie den BCD-Zähler auf 0. Takten Sie beide Zähler, bis der Binärzähler Null erreicht. Laden Sie den Ausgang des BCD-Zählers in einen Latch und speisen Sie ihn dann in einen BCD-7seg-Decoder ein. Wiederholen.
    • Vorteile:
      • Erfüllt die Anforderung, nur Standard-Logik-ICs zu verwenden
      • Erfordert keine Programmierung
    • Nachteile:
      • Teuer (Die Zählerchips kosten jeweils etwa 1-2 $)
      • Anfällig für Verdrahtungsfehler
      • Benötigt ein Taktsignal von 31 kHz für eine 60-Hz-Aktualisierung
      • Benötigt 8-12 Logik-ICs (ich werde später einen Schaltplan zeichnen)

  2. ROM-Nachschlagetabelle: Verwenden Sie einen kleinen parallelen asynchronen FLASH-Speicher (wie diesen ), um alle Dateneingaben als Adresse zu nehmen, und programmieren Sie dann das ROM, um BCD-Ausgaben für 2 Ziffern zu erzeugen. Geben Sie das Ergebnis in einen BCD-zu-7seg-Decoder ein. Alternativ können Sie ein ROM verwenden, um eine einzelne Dezimalziffer zu generieren, die in 7-Segment-Pins decodiert wird.
    • Vorteile:
      • Ziemlich günstiger Preis pro Ziffer
      • Skaliert besser
      • Schnell (aber Geschwindigkeit spielt keine Rolle)
      • Einfach zu verdrahten/auszulegen
    • Nachteile:
      • Jedes ROM erfordert eine andere Programmierung
      • Sie müssen ein viel größeres ROM kaufen als benötigt
      • Die Programmierung erfordert Computerautomatisierung.

  3. Mikrocontroller: Ein einfacher Mikrocontroller mit genügend Ein- und Ausgängen kann die Binärzahl in BCD umwandeln und sie dann in 7-Segment-Steuersignale codieren. Die billigste Lösung (Meine digikey-Suche hat diesen PIC herausgesucht ) multiplext die Ausgabeziffern. Möglicherweise benötigen Sie Transistoren, um die gemeinsame Anode / Kathode Ihrer 7-Segment-Anzeigen anzusteuern, aber das können billige Transistoren sein.
    • Vorteile:
      • Die günstigste Lösung für insgesamt 1,50 bis 2,00 US-Dollar
      • Einfache Verdrahtung
      • Einfache Implementierung des Binär->BCD-Algorithmus in Software
      • Einfaches Hinzufügen weiterer Funktionen
      • Kostengünstigstes System zum Ansteuern der Anzeige
    • Nachteile:
      • Ein Chipprogrammierer ist erforderlich
      • Sie müssen Software schreiben (nicht nur ein Hardwareproblem)
      • Die billigste Lösung erfordert ein Ziffernmultiplexen, das komplizierter ist als ein Direktantrieb.

Ich werde später ein paar Schaltpläne erstellen

Ich fürchte, es gibt keine solchen Standard-Chips. Es gibt zwar BCD- bis 7-Segment-Chips, aber es wird schwierig sein, einzelne Ziffern zu extrahieren, da dies „Teilen durch 10“-Chips erfordern würde.

Auch CPLDs sind für Sie da.

Wenn Sie separate Ziffern anstelle einer einzelnen 9-Bit-Zahl generieren können, können Sie Standardchips verwenden.

+1 für den Hinweis, dass die Quelldaten binär und nicht binär kodiert dezimal sind, was logikbasierte Konvertierungen kompliziert macht. Aber jede Art von ROM-Chip für eine Nachschlagetabelle ist eine einfache Lösung.

Der einfachste Weg wäre vielleicht, eine Konvertierungstabelle zu erstellen und sie mit mindestens 9 Adress- und 12 Datenleitungen in EPROM oder FLASH zu speichern. Ansonsten CPLD oder kleines FPGA ( opencores.org hat einige HDL dafür).

Wenn Sie dies wirklich mit diskreten ICs tun wollten, müssten Sie eine Zustandsmaschine konstruieren, die den Algorithmus implementiert, was die komplexeste Lösung wäre und sich nicht wirklich von Mikrocontrollern unterscheidet, abgesehen von erhöhtem Preis, Größe und Komplexität.

Eine ROM-basierte Nachschlagetabelle ist die traditionelle Lösung, wobei die programmierbare ROM-Technologie verwendet wird, die für Sie am billigsten und am einfachsten zu handhaben ist. Obwohl es wahrscheinlich teurer sein wird und mehr Arbeit erfordert, einen Geräteprogrammierer zu bauen, als moderne Mikrocontroller. Mehrstellige Anzeigen werden oft gemultiplext - einfach mit einem Mikro, obwohl Sie mit einem ROM einen Zwei-Bit-"Ziffern" -Adresseingang haben könnten, der von einem Oszillator und Zähler angesteuert wird, und diesen verwenden, um abwechselnd eine der drei Ziffern nachzuschlagen, während er an der Reihe ist angezeigt werden. Andernfalls benötigen Sie ein ziemlich breites ROM.

Ihre Beispieleingabe, 100101100, ist eine rohe Binärdatei für 300, keine binär codierte Dezimalzahl; BCD für 300 wäre 0011 0000 0000. Wenn Sie Zahlen anzeigen möchten, die tatsächlich BCD sind, ist das relativ einfach. Aber wenn Ihre Eingaben wirklich binär sind, ist es ein komplexeres Problem.

Um von rohen binären zu dezimalen Gruppierungen zu gelangen, die zum Ansteuern der Anzeige erforderlich sind, müssen Sie effektiv eine Basiskonvertierung durchführen, was eine ganzzahlige Division zur Folge hat. Sie können dies zwar mit logischen ICs erreichen, es wird jedoch eine ganze Schiffsladung von ihnen benötigt, was eine MENGE Verkabelung impliziert, was viele Möglichkeiten zum Debuggen bedeutet.

Sofern es keinen zwingenden Grund gibt, Logik-ICs zu verwenden, wäre dies eine ideale Aufgabe für einen 8-Bit-Mikrocontroller.

Ich glaube nicht, dass Sie dies einfach mit 1 IC lösen können. Sie könnten sich die MAX7231-Chips ansehen, aber sie scheinen alt und sehr teuer zu sein. Sie können vielleicht den HEF4511 (oder DS8669) verwenden, wenn Sie einen 10-Bit <> BCD-Encoder finden. Außerdem würde es Ihnen schwer fallen, es auf diese Weise zu erstellen.

Möglicherweise können Sie auch die booleschen Formeln für den 10-Bit-Code auf 3x einen BCD-Ausgang schreiben. Ich würde nicht erwarten, dass das sehr einfach ist, weil 10 Eingänge zu 3x4 Ausgängen eine Menge Arbeit zu sein scheinen.

Ich nehme an, Sie tun dies "nur zum Spaß", dies in der Ingenieurwelt zu tun, ist nicht sehr kosteneffektiv. Sie benötigen wahrscheinlich ein 7-Segment-Signal + 3 Anzeigen und 10-Bit-Eingang. Das sind etwa 20 E/A. Ein einfacher PIC oder AVR mit 24 oder 28 Pins kann damit umgehen (oder ein CLPD, wenn Sie eine schnellere Verarbeitung benötigen - Displays sind jedoch für das menschliche Auge bestimmt, müssen also nicht ultraschnell sein).

Es ist nicht allzu schwer, ein CPLD oder FPGA einzurichten, um binäre Daten, die MSB-zuerst verschoben werden, in Dezimaldaten umzuwandeln. Der Kernbaustein ist ein Modul mit Takt-, Daten- und Löscheingängen, vier Latches D0-D3 und einem kombinatorischen Next-Carry-Ausgang. Kaskadieren Sie die Blöcke wie bei einem Schieberegister. Nachdem der Binärwert hineingeschoben wurde, halten die Register das Äquivalent in BCD.

; Übertrag wenn >= 5
NextCarry = D3 | D2 & D1 | D2 & D0

; Wird 8 oder 9 sein, wenn die Eingabe 4 oder 9 war
D3 := !D3 & D2 & !D1 & !D0 | D3 & D0

; Wird 4-7 sein, wenn die Eingabe 2-3 oder 7-8 war
D2 := !D3 & !D2 & D1 | !D3 & D2 & D1 & D0 | D3 & !D0

; Wird 2-3 oder 6-7 sein, wenn die Eingabe 1, 3, 6 oder 8 war
D1 := !D3 & !D2 & D0 | !D3 & D2 & D1 & !D0 | D3 & !D0

; Wird ungerade sein, wenn Carry-In eingestellt ist
D0 := CarryIn

Beachten Sie, dass das Register vor jeder Verwendung gelöscht werden muss; Das Verschieben von Nullen reicht NICHT aus. Eine Löschschaltung ist nicht gezeigt, sollte aber offensichtlich sein.

Zufälligerweise gibt es eine Schaltung, die genau das tut, was Sie wollen - vorausgesetzt, Sie verwenden TTL-Logikpegel und 4 DIP-ICs entsprechen Ihren "beliebigen IC" -Anforderungen. Diese Schaltung ist die 74185 , und die genaue gewünschte Konfiguration finden Sie in Abbildung 6 auf Seite 7. Es gibt natürlich ein paar Nachteile. Zunächst einmal ist die 74185 30 Jahre alt und definitiv veraltet. Allerdings bekommt man sie bei eBay. Zweitens benötigen Sie 4 davon, und das bringt Ihnen mehr als 20 Dollar. Drittens beträgt die erforderliche Gesamtleistung 5 Volt bei 300 bis 400 mA.

Aber ansonsten ist es ziemlich einfach. Und für das, was es wert ist, entspricht es tatsächlich dem Geist einiger anderer Antworten. Wie im Datenblatt angegeben, ist der IC eigentlich ein 32 x 8 PROM.

Andernfalls haben Sie bei Single-Chip-Speichern Pech. Obwohl das lsb keine Transformation erfordert, benötigt ein Ausgang von 300 9 IC-Ausgänge, und Sie werden einfach kein (E) (E) PROMS mit mehr als 8 Ausgängen finden.