Forum: Mikrocontroller und Digitale Elektronik 2-stellig Dualzahl BCD8421 Addierer


von Bernd91 (Gast)


Lesenswert?

Hallo Community,

ich habe die Aufgabe eine Addiererschaltung aufzubauen, die zwei 
2-stellige BCD8421 Zahlen addiert und im BCD8421 Code ausgibt. Dabei 
soll das Carry-In Signal auf einen Schalter gelegt werden.   Außerdem 
soll der Überlauf in die 3. Stelle durch eine LED angezeigt werden.
Für die Realisierung stehen mir 4-Bit Volladdierer (74 LS 283), and und 
or gatter zur verfügung.

Nun zuerst Verständnisfragen:

Kann ich maximal 15 + 15 rechnen (1111 + 1111) ?


Der Überlauf in die 3. Stelle bedeutet, wenn das 3. Bit gesetzt wird
(zum Beispiel bei 0011 + 0001 = 0100 ) ?

von Bernd91 (Gast)


Lesenswert?

Nachtrag:

Ich habe auf Google folgende Schaltung gefunden:
https://de.wikibooks.org/wiki/Digitale_Schaltungstechnik/_Addierer/_BCD

Ist dies nicht genau die Schaltung, die ich brauche?

von Thomas E. (picalic)


Lesenswert?

Bernd91 schrieb:
> Kann ich maximal 15 + 15 rechnen (1111 + 1111) ?

Nach meinem Verständnis darf die Zahl 1111b bei BCD (Binary Coded 
Decimal) gar nicht vorkommen. Wenn in der Aufgabenstellung von BCD die 
Rede ist, würde ich davon ausgehen, daß
    0000 1001 (09)
  + 0000 0001 (01)
nicht
    0000 1010, (0A)

sondern 0001 0000 (10) ergeben soll!

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

In BCD gibts keine 15, also was willste denn nu wirklich rechnen?

Ansonsten:
http://www.6502.org/users/dieter/bcd/bcd_0.htm
http://www.6502.org/users/dieter/bcd2/bcd2_0.htm

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Bernd91 schrieb:
> Kann ich maximal 15 + 15 rechnen (1111 + 1111) ?

Was du rechnen kannst, weiss ich nicht. Die Schaltung sollte imho 
maximal  99 + 99 + 1 (binaer 10011001 + 10011001 + 1) rechnen koennen.

> Der Überlauf in die 3. Stelle bedeutet, wenn das 3. Bit gesetzt wird
> (zum Beispiel bei 0011 + 0001 = 0100 ) ?

Ich wuerd' den Ueberlauf an die 3. Stelle so definieren, dass das 
Ergebnis >99 ist, also 100 und mehr.

> Ist dies nicht genau die Schaltung, die ich brauche?

Koennte zumindest ein Teil davon sein. Ist aber eben nur einstellig.

Gruss
WK

von Bernd91 (Gast)


Angehängte Dateien:

Lesenswert?

Das ganze soll so funktionieren:

Scheinbar also 2 dualzahlen von 0 bis 99 o.0

von Bernd91 (Gast)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Bernd91 schrieb:
>> Kann ich maximal 15 + 15 rechnen (1111 + 1111) ?
>
> Was du rechnen kannst, weiss ich nicht. Die Schaltung sollte imho
> maximal  99 + 99 + 1 (binaer 10011001 + 10011001 + 1) rechnen koennen.
>
>> Der Überlauf in die 3. Stelle bedeutet, wenn das 3. Bit gesetzt wird
>> (zum Beispiel bei 0011 + 0001 = 0100 ) ?
>
> Ich wuerd' den Ueberlauf an die 3. Stelle so definieren, dass das
> Ergebnis >99 ist, also 100 und mehr.
>
>> Ist dies nicht genau die Schaltung, die ich brauche?
>
> Koennte zumindest ein Teil davon sein. Ist aber eben nur einstellig.

Danke für deine Antwort :)

Das was du sagst ergibt für mich auch Sinn.
Aber wie mache ich aus dem einstelligen Addierer denn nun einen 
Zweistelligen?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Bernd91 schrieb:
> Aber wie mache ich aus dem einstelligen Addierer denn nun einen
> Zweistelligen?

Hm, schon mal ueberlegt, warum der 74LS283 einen CarryIn und einen 
CarryOut Pin hat?

Gruss
WK

von Bernd91 (Gast)


Lesenswert?

Dergute W. schrieb:
> Hm, schon mal ueberlegt, warum der 74LS283 einen CarryIn und einen
> CarryOut Pin hat?

Nein, das weiß ich leider nicht. Das ist das erste mal, dass ich mit 
diesem oder Ähnlichen Bausteinen etwas zu tun habe.

Meine Idee war jetzt folgende, die Dualzahlen erst einmal aufzuteilen:

wenn ich eine 99 + 99 rechne habe ich ja theoretisch:

1001      1001  +      1001      1001
 b2        b1           a2        a1

Jetzt müsste ich ja b2 zu a2 addieren, was ja dann den 100er bzw 10er 
bereich darstellt (im Beispiel wäre es 180). Also müsste ein Carry Out 
Signal ausgegeben werden, wenn b2 + a2 > 9 , was den Überlauf in die 3. 
Stelle (100-er bereich) darstellt oder?

Ähnlich wäre es ja bei b1 und a1, nur dass dort der 10-er und 1er 
Bereich betroffen ist ( im Bsp: 18 ) Carry out = übertrag in den 10er 
Bereich?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Bernd91 schrieb:
> Nein, das weiß ich leider nicht. Das ist das erste mal, dass ich mit
> diesem oder Ähnlichen Bausteinen etwas zu tun habe.

Hm, ja. Das ist dann natuerlich bisschen schwieriger. Bewaehrt hat sich 
eine Lernreihenfolge evtl. ungefaehr so:
*UND/ODER/Inverter, etc.
*Halbaddierer
*Volladdierer
*Kaskadierung mehrerer Addierer

Und nicht gleich mit 4bit-Addierern und BCD-Faxen am Anfang...

> Meine Idee war jetzt folgende, die Dualzahlen erst einmal aufzuteilen
Gute Idee.
Nur von der Reihenfolge solltest du vorgehen, wie auch beim 
schriftlichen Addieren: mit der Least significant Digit (also hier der 
1er Stelle) anfangen; dann gucken, wann in deinem Fall ein Carry von der 
1er auf die 10er Stelle auftreten kann, was dann alles zu tun ist...

Gruss
WK

von Bernd91 (Gast)


Lesenswert?

Dergute W. schrieb:
> Gute Idee.
> Nur von der Reihenfolge solltest du vorgehen, wie auch beim
> schriftlichen Addieren: mit der Least significant Digit (also hier der
> 1er Stelle) anfangen; dann gucken, wann in deinem Fall ein Carry von der
> 1er auf die 10er Stelle auftreten kann, was dann alles zu tun ist...


Macht der Baustein das nicht Automatisch?
mal angenommen ich addiere a1=5=0101 und b1 =0101 , dann habe ich einen 
Übertrag zur 10er Stelle, die über den Carry out ausgegeben und zur 
Summe von a2+b2 addiert wird, richtig? Dieser Carry out müsste die Summe 
von a2+b2 um 10 erhöhen, also um + 1010 ?

Zum Beispiel 55+55   :
a1+b1 = 5+5 =  0101 + 0101 = 0 mit Carry out 1 (für 10er Stelle)
a2+b2 = 5+5 = 0101 + 0101  = 0 mit Carry out 1 (für 100er Stelle)

Denke ich so richtig?


Das Carry out bei a2+b2 wird lediglich durch eine LED dargestellt, bzw 
Durch eine 1, die dem gesamten Ergebnis vorangestellt wird (100er 
Stelle,
wenn a2+b2 > 9 ) ?

von Thomas E. (picalic)


Lesenswert?

Bernd91 schrieb:
> Dieser Carry out müsste die Summe
> von a2+b2 um 10 erhöhen, also um + 1010 ?

Wie kommst Du auf +10? Denk mal an's Rechnenlernen in der Schule zurück: 
Wenn Du die Zahlen untereinander schreibst und bei der Addition der 
Einerstelle einen Übertrag hast, welche Zahl behältst Du dann "im Sinn", 
um sie auf die Zehnerstelle zu addieren? 1 oder 10?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Bernd91 schrieb:
> Macht der Baustein das nicht Automatisch?
> mal angenommen ich addiere a1=5=0101 und b1 =0101 , dann habe ich einen
> Übertrag zur 10er Stelle, die über den Carry out ausgegeben und zur
> Summe von a2+b2 addiert wird, richtig? Dieser Carry out müsste die Summe
> von a2+b2 um 10 erhöhen, also um + 1010 ?

Ja, das sollte deine Schaltung machen. Im Datenblatt zum 74283 steht 
aber "binary full adders.."  und nicht "bcd full adders".
Wenn du dem 0101+0101 zum addieren gibst, wird dabei 1010 (=10 dezimal, 
also in BCD schon nicht mehr gueltig) rauskommen, denn der weiss nix von 
BCD. Der Witz an der Aufgabe wird sein, dass du von aussen per 
verschiedenen Gattern erkennst, wann das Ergebnis noch einer Korrektur 
bedarf, um wieder BCD zu sein. Fuer diese Korrektur wirst du noch einen 
4bit Addierer brauchen.
Der Z80 Prozessor hat einen Assemblerbefehl: DAA - der macht das, was 
deine Schaltung auch machen soll. Vielleicht hilfts dir weiter, das mal 
zu googlen/lesen, was dieser Befehl bewirkt.

>
> Das Carry out bei a2+b2 wird lediglich durch eine LED dargestellt, bzw
> Durch eine 1, die dem gesamten Ergebnis vorangestellt wird (100er
> Stelle,
> wenn a2+b2 > 9 ) ?
Ja, wuerd' ich mal so sehen. Oder man koennte es z.b. als CarryIn Signal 
fuer die naechsten Stellen verwenden, wenn du deine Komplettschaltung 2x 
aufbauen wuerdest, um 2 4 stellige BCD zahlen zu addieren.

Gruss
WK

von Bernd91 (Gast)


Lesenswert?

Dergute W. schrieb:
> Wenn du dem 0101+0101 zum addieren gibst, wird dabei 1010 (=10 dezimal,
> also in BCD schon nicht mehr gueltig) rauskommen, denn der weiss nix von
> BCD. Der Witz an der Aufgabe wird sein, dass du von aussen per
> verschiedenen Gattern erkennst, wann das Ergebnis noch einer Korrektur
> bedarf, um wieder BCD zu sein. Fuer diese Korrektur wirst du noch einen
> 4bit Addierer brauchen.


Das Ergebnis muss ja immer korrigiert werden, wenn Die Summe > 9 ist.
Wenn ich das Ergebnis korrigieren will, kann ich dann das hier nutzen ?
https://de.wikibooks.org/wiki/Digitale_Schaltungstechnik/_Addierer/_BCD

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Dazu hab ich oben 2 Links gepostet...

von Dergute W. (derguteweka)


Lesenswert?

Mw E. schrieb:
> Dazu hab ich oben 2 Links gepostet...

Ich schrub schon auf die Frage:
>> Ist dies nicht genau die Schaltung, die ich brauche?
Diese Antwort:
>Koennte zumindest ein Teil davon sein. Ist aber eben nur einstellig.

;-D

Gruss
WK

von Bernd91 (Gast)


Lesenswert?

Die links sind für mich leider nicht sehr verständlich.

Ich habe eine andere Seite entdeckt, die mir dies verständlicher 
erläutert:
https://kowa.hs-augsburg.de/medium/text/lehre/2009wise/csa/VCAI-03-zahlen.pdf

( Seiten 5-7 )
Das ist ja das selbe, wie in dem link von Wikibooks, also könnte ich 
diese Korrekturschaltung nutzen ?

Das Prinzip der Schaltung habe ich nun verstanden, jetzt fehlt noch die 
Umsetzung... :

Ich brauche also insgesamt 5 Volladdierer für
 -   a2+b2 (+ anschleießende korrektur)
 -   a1+b2 (+ anschleießende korrektur)
 -   Übertrag von a1+b1 zu a2+b2 addieren

Eine LED am Ausgang von Co des Volladdierers von a2+b2

Einen Schalter am Ci Eingang ( an a2+b2 oder a1+b1 ? )

2 Eingaben für Dezimale Zahlen
1 Ausgabe für Dezimale Zahlen
und / oder Gatter

Habe ich etwas vergessen / falsch gemacht?

von Bernd91 (Gast)


Lesenswert?

Dergute W. schrieb:
> Ich schrub schon auf die Frage:
>>> Ist dies nicht genau die Schaltung, die ich brauche?
> Diese Antwort:
>>Koennte zumindest ein Teil davon sein. Ist aber eben nur einstellig.
>
> ;-D

Aber ich trenne die Zweistelligen Zahlen ja auf, in jeweils Einstellige 
(a1 a2 b1 b2) und füge diese später wieder zusammen, geht das so nicht?

von Dergute W. (derguteweka)


Lesenswert?

Moin,
Bernd91 schrieb:
>
> Aber ich trenne die Zweistelligen Zahlen ja auf, in jeweils Einstellige
> (a1 a2 b1 b2) und füge diese später wieder zusammen, geht das so nicht?

Ja, genau so wird's laufen. Bei der Einerstelle kommt noch von aussen 
dein CarryIn. Das CarryOut der Einerstelle (Also nicht das Carryout des 
Addierers, sondern ein Carryout genanntes Ausgangssignal deiner 
"Korrektureinheit") wird dann mit dem CarryIn der Zehnerstelle 
verbunden. Das Carryout der 10erStellenKorrektureiheit ist dann der 
"Ueberlauf in die 3. Stelle".

Wenn ich's recht ueberblicke, brauchst du fuer den ganzen Zirkus 4 von 
deinen 4bit-Binaer-Addierern. Jeweils einen fuer die Addition einer 
Stelle und dann noch einen fuer die eventuelle Korrektur. (Kleiner Tipp 
- wenn man nicht korrigieren muss, dann kann man auch einfach 0000 
dazuaddieren. Dann brauchst du noch aus UND und ODER 
zusammengeschusterte Logik, die erkennt, ob eine Korrektur noetig ist 
und ein CarryOut fuer die naechste Stelle generiert.

Das wird' ne schwere Geburt :-D

Gruss
WK

von Peter D. (peda)


Lesenswert?


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.