www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Codierer, 1-aus-10-Code zu BCD


Autor: Michael H. (itse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

Ich möchte Schaltunktionen (f8,f4,f2,f1) entwerfen und dann einen 
Codierer mit einem DigitalSimulator realisieren. Ich habe nun eine 
Wertetabelle aufgestellt:

        1-aus-10-Code         BCD
     9 8 7 6 5 4 3 2 1 0    8 4 2 1
f8   0 1 0 0 0 0 0 0 0 0    1 0 0 0
f4   0 0 0 0 0 1 0 0 0 0    0 1 0 0
f2   0 0 0 0 0 0 0 1 0 0    0 0 1 0
f1   0 0 0 0 0 0 0 0 1 0    0 0 0 1

Nun wollte ich per Disjunkter Normalform auf einen Ausdruck kommen, um 
die Schaltung zu realisieren. Die Werte 9,8,7,6,... bitte als 
Eingangsvariablen denken, somit 10 Eingangsvariablen mit Belegung 0,1 
und 4 Ausgangsvariablen mit Belegung 0,1.

Für die 8,4,2,1 habe ich folgende Ausdrücke:   (n = negiert)

f8(9,8,7,6,5,4,3,2,1,0) = n9*8*n7*n6*n5*n4*n3*n2*n1*n0

f4(9,8,7,6,5,4,3,2,1,0) = n9*n8*n7*n6*n5*4*n3*n2*n1*n0

f2(9,8,7,6,5,4,3,2,1,0) = n9*n8*n7*n6*n5*n4*n3*2*n1*n0

f1(9,8,7,6,5,4,3,2,1,0) = n9*n8*n7*n6*n5*n4*n3*n2*1*n0

Stimmen diese Ausdrücke?

Auf mehr komme ich nicht. Wie kann ich denn diese Schaltfunktionen 
(UND-Gatter) realisieren?

Besten Dank

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:

> Auf mehr komme ich nicht. Wie kann ich denn diese Schaltfunktionen
> (UND-Gatter) realisieren?

Das kommt zb auch drauf an, welche UND Gatter deine SImulation dir 
anbietet (ANzahl der Eingänge).
  a * b * c  = ( a * b ) * c
anstelle eines UND Gatters mit 3 Eingängen kann man also auch 2 UND 
Gatter mit je 2 Eingängen benutzen, wenn man den Ausgang des ersten 
Gatters auf einen Eingang des zweiten legt.

Ansonsten gibt es dann auch noch den De Morgan
    na * nb   =  n ( a + b )

Durch 'Hinschauen' kann man in deinem Beispiel zb erkennen, dass man aus 
den Signalen 9, 7, 6, 5, 3 und 0 ein 'Hilfssignal' bauen könnte, welches 
1 ist, wenn irgendeines dieser Signale auf 1 steht. Da in diesem Fall 
weder f8, f4, f2 noch f1 jemals auf 1 sein können, kann dann diese 1 
dafür sorgen, dass die f Ausgänge in diesem Fall auf jeden Fall 0 sind. 
Damit bist du dann schon mal 6 von deinen Eingangsleitungen zugunsten 
eines einzigen zusätzlichen Signals in deinem f-Ausdrücken los, was die 
Ausdrücke enorm vereinfacht.

(amthematisch betrachtet, ist es einfach nur das Herausheben von n9, n7, 
n6 etc aus jeder einzelnen Gleichung und dem erkennen, dass dieser 
herausgehobene Faktor in allen 3 Gleichungen identisch ist)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
> Stimmen diese Ausdrücke?

Nur für die 4 Zustände, die Du oben genannt hast.

In der Regel decodiert ein 1 aus 10 Decoder aber 11 Zustände.
Und dabei gibt es noch unterschiedliche Decodierungen der restlichen 
1013 Zustände:
- egal (sind verboten)
- Priorität (höchster)
- Fehlercode (z.B. 0)


Peter

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
>         1-aus-10-Code         BCD
>      9 8 7 6 5 4 3 2 1 0    8 4 2 1
> f8   0 1 0 0 0 0 0 0 0 0    1 0 0 0
> f4   0 0 0 0 0 1 0 0 0 0    0 1 0 0
> f2   0 0 0 0 0 0 0 1 0 0    0 0 1 0
> f1   0 0 0 0 0 0 0 0 1 0    0 0 0 1
Gibt es nur diese Zustände? Oder noch mehr?
Wenn ersterer, ist doch garkeine Logik notwendig.
Einfach die vier 1-aus-10 Eingänge an den BDC-Ausgang verdrahten.

Ich gehe aber mal davon aus, dass es 10-Eingangszustände (bzw 11, wenn 
der Zustand ALLES-0 existiert) gibt.

Autor: Michael H. (itse)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die komplette Liste sieht, die ich aufgestellt habe sieht so aus:

Deziamlzahl     1-aus-10-Code          BCD-Code
              9 8 7 6 5 4 3 2 1 0      8 4 2 1
   0          0 0 0 0 0 0 0 0 0 1      0 0 0 0
   1          0 0 0 0 0 0 0 0 1 0      0 0 0 1
   2          0 0 0 0 0 0 0 1 0 0      0 0 1 0
   3          0 0 0 0 0 0 1 0 0 0      0 0 1 1
   4          0 0 0 0 0 1 0 0 0 0      0 1 0 0
   5          0 0 0 0 1 0 0 0 0 0      0 1 0 0
   6          0 0 0 1 0 0 0 0 0 0      0 1 1 0
   7          0 0 1 0 0 0 0 0 0 0      0 1 1 1
   8          0 1 0 0 0 0 0 0 0 0      1 0 0 0
   9          1 0 0 0 0 0 0 0 0 0      1 0 0 1

Nun soll daraus ein Codierer entstehen, der den 1-aus-10-Code in den 
BCD-Code umwandelt.

Zudem soll ich die Schaltfunktionen f8,f4,f2 und f1 entwerfen.

Ich habe nun die Funktion für f8, f4, f2 und f1 soweit fertig und 
funktioniert auch.

Die Zustände 9,7,6,5,3,0 sind ODER-verknüpft, der Ausgang negiert. Diese 
Zusatzsignal (Hilftsignale) habe ich dann UND-verknüpft mit den 
Funktionen f8, f4, f2, f1.

Ich habe ein Bild meiner Schaltung angehängt. Ich entschuldige mich 
schon im voraus für die Unübersichtlichkeit.

Wie kann ich denn den ganzen Codierer realisieren?

Bedankt.

Autor: brumbaer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Zeile mit dem Wert  5 ist ein Fehler. Das Ergebnis muss 0101 
statt 0100 sein.

Ich muss leider gestehen, dass ich das Problem nicht verstanden habe.

Was ich verstanden habe. Du sollt eine Schaltung mit diskreten Gattern 
aufbauen bzw. einen entsprechenden Term aufstellen.

Was ich nicht verstanden habe ist, was passieren soll, wenn nicht genau 
1 Eingang gesetzt wurde und, ob du bei der Wahl der Operationen 
eingeschränkt bist z.B nur Nands ?

mfg
SH

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:

> Ich habe nun die Funktion für f8, f4, f2 und f1 soweit fertig und
> funktioniert auch.

Gut

> Die Zustände 9,7,6,5,3,0 sind ODER-verknüpft, der Ausgang negiert. Diese
> Zusatzsignal (Hilftsignale) habe ich dann UND-verknüpft mit den
> Funktionen f8, f4, f2, f1.

klingt doch gut

> Wie kann ich denn den ganzen Codierer realisieren?

Wie meinst du das jetzt?
Du hast doch jetzt alles was du brauchst!

Der Rest ist nur noch Bausteine im Simulationsprogramm eingeben, 
miteinander verdrahten, testen und fertig.

Oder meinst du real Aufbauen?
(Einen BCD Decoder baut man nicht aus Gattern. Den kauft man fertig)

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Oder meinst du real Aufbauen?
> (Einen BCD Decoder baut man nicht aus Gattern. Den kauft man fertig)

Ist zwar kein De- sondern ein En-coder, aber trotzdem gibt es so was 
fertig - z.B. 74147.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieter Werner schrieb:
> Ist zwar kein De- sondern ein En-coder, aber trotzdem gibt es so was
> fertig - z.B. 74147.
Ich glaube, es geht nicht darum, sowas aufzubauen, sondern es zu 
entwickeln.
Außerdem ist es immer gut, zu wissen, wie solch ein Dekoder 
funktioniert.

Wärend meiner Ausbildung (Lehre und Studium) haben wir oft solche 
Schaltungen entwickelt. Damit lernt man doch so einiger. Außerdem ist 
das auch sehr hilfreich, wenn man FPGAs programmieren möchte (obwohl man 
dort auch mit fertigen Modulen arbeiten kann).

Autor: Michael H. (itse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein nicht real aufbauen. Diese Schaltung soll nur simuliert werden.

Also ich kann nun aus dieser bestehenden Schaltung, also alle weiteren 
aufbauen für zum Beispiel 7? Dazu müssten 3 von 4 Anzeigen aufleuchten.

Was allerdings passieren soll, wenn mehrere Eingänge gesetzt sind, ist 
nicht angegeben. Somit würde ich einfach annehmen, es darf immer nur 
einer gesetzt sein.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1-aus-10 bedeutet ja auch, dass nur einer von 10 gesetzt ist. Ansonsten 
müsste es anders heißen.

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich glaube, es geht nicht darum, sowas aufzubauen, sondern es zu
> entwickeln.
> Außerdem ist es immer gut, zu wissen, wie solch ein Dekoder
> funktioniert.

Dem stimme ich vorbehaltlos zu, mein Beitrag war eher als Kommentar zu 
dem vorhergehenden Post von Karl Heinz gedacht.

Zudem lässt sich in manchen Datenblättern auch ein wenig spicken wenn 
die innere Schaltung mit angegeben ist (hier National Semi 74HC Logic 
Family).

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael H. schrieb:
> Nein nicht real aufbauen. Diese Schaltung soll nur simuliert werden.
>
> Also ich kann nun aus dieser bestehenden Schaltung, also alle weiteren
> aufbauen für zum Beispiel 7?

Äh nein.
Die Schaltung, die du gepostet hast, ist ja dein Spezialencoder, der 
sich um die F8, F4, F2, F1 kümmert.

Für einen richtigen, kompletten 1-aus-10 zu BCD Encoder, geht dassselbe 
Spielchen wieder von vorne los.
Du hast deine Tabelle, daraus entwickelst du die Gleichungen, 
vereinfachst diese und wenn du denkst, das ist einfach genug bzw. du mit 
Vereinfachen nicht mehr weiter kommst, dann baust du das in der 
Simulation auf.

Sinn der Übung ist bei solchen Sachen ja normalerweise nicht die 
Simulation an sich, sondern der Vorgang des Vereinfachens. Das ist der 
Knackpunkt und das muss man üben, um Praxis zu bekommen.
Das ist wie Mathe. Im Prinzip ist Gleichungen mit 1 Variable lösen ganz 
einfach und trotzdem muss man das immer wieder üben, weil man am Anfang 
ständig Vorzeichenfehler macht.

Also rann an die Bulleten:
Gleichungen aufstellen: Wann muss das Lämpchen für die Nummer 1 
leuchten? Welche Bedingungen gelten da.
Selbiges für 2, 4, und 8
Du hast dann 4 Gleichungen. Die versuchst du mit De'Morgan zu 
vereinfachen. Vielleicht finden sich auch Teile in den 4 Gleichungen, 
die identisch sind und herausgezogen werden können. Vielleicht muss man 
auch einen Teil einer Gleichung erst mal mit einem De'Morgan umformen, 
bis sich gemeinsame Teile ergeben etc.

Wenn man nicht übt entwickelt man keinen Blick dafür, in welche Richtung 
das Umformen einer Gleichung sinnvoll ist und in welche nicht. Genauso 
wie in Mathe.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pst, musst Du doch nicht verraten :-o

Autor: Michael H. (itse)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab das Ganze nun so realisiert: (n = negiert)

Gleichungen mit Vereinfachung

f8 = n(7+6+5+4+3+2+1+0)*(n9*8+9*n8)

f4 = n(9+8+5+4+3+2+1+0)*(7*n6+n7*6) + n(9+8+7+6+3+2+1+0)*(5*n4+n5*4)

f2 = n(9+8+5+4+3+2+1+0)*(7*n6+n7*6) + n(9+8+7+6+5+4+1+0)*(3*n2+n3*2)

f1 = n(8+6+4+2+0)*(9+7+5+3+1)


Bei f4 und f2 sind die beien Glieder:

n(9+8+5+4+3+2+1+0)*(7*n6+n7*6) gleich, somit spart man sich eines.

Habe diese Schaltung nun mal umgesetzt und getestet, soweit funktioniert 
es.

Kann man dies noch weiter vereinfachen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.