Forum: Mikrocontroller und Digitale Elektronik Noch Fragen zu Binär in BCD


von Michael (Gast)


Lesenswert?

Hallo an alle

Ich habe schon dieses Forum durchsucht und mir die Artikel dazu
durchgelesen. Jedoch bin ich bis jetzt nicht ganz durchgestiegen. Hier
wird imm geschrieben, dass man nur die Zahl minus 10 nehemen muss. Der
Rest soll dann das Ergebniss sein. Das kann ich nicht verstehen.

Nehmen wir mal z.B. die Zahl 138

1.  138 - 10 = 128
2.  128 - 10 = 118
3.  118 - 10 = 108
4.  108 - 10 = 98
5.  98  - 10 = 88
6.  88  - 10 = 78
7.  78  - 10 = 68
8.  68  - 10 = 58
9.  58  - 10 = 48
10. 48  - 10 = 38
11. 38  - 10 = 28
12. 28  - 10 = 18
13. 18  - 10 = 8

Also bleibt als Rest 8 übrig. Was muss ich jetzt machen damit ich das
Ergebnis für die BCD-Ansteuerung in 3 7 Segmentanzeigen bekomme?

Grüsse

Michael

von arc (Gast)


Lesenswert?

Der Rest ist schonmal richtig...

138 % 10 = 8 bzw. das was bei deiner Rechnung übrigbleibt, wäre die
letzte Stelle

138 / 10 = 13

13 % 10 = 3
mittlere Stelle

13 / 10 = 1

1 % 10 = 1
erste Stelle

% = Rest der Division

von Michael (Gast)


Lesenswert?

1. warum nimmst du manchmal das Zeichen % für die Division und ein
anders mal das Zeichen / ?

2. Wenn ich keine Division berechen kann, wie gehe ich dann vor? Gibt
es da nicht eine andere Lösung?

Grüsse

Michael

von Markus (Gast)


Lesenswert?

@Michael
Na, dann schaue Dir doch mal Deine Tabelle genau an!

Nehmen wir mal z.B. die Zahl 138

1.  138 - 10 = 128
2.  128 - 10 = 118
3.  118 - 10 = 108
4.  108 - 10 = 98
5.  98  - 10 = 88
6.  88  - 10 = 78
7.  78  - 10 = 68
8.  68  - 10 = 58
9.  58  - 10 = 48
10. 48  - 10 = 38
11. 38  - 10 = 28
12. 28  - 10 = 18
13. 18  - 10 = 8

Also bleibt als Rest 8 übrig.

Nach was sieht das wohl aus? Richtig, nach einer Programm-Schleife. In
der letzten Zeile stehen beide erforferlichen Ergebnisse, der Quotient
und der Divisionsrest.

Markus

von johnny.m (Gast)


Lesenswert?

Zu 1.:
% ist der Modulo-Operator, der den Rest einer ganzzahligen Division
liefert (deshalb 138 % 10 = 8 weil 138 / 10 = 13 Rest 8).

Zu 2.:
Wenn Du keine Division kannst (ich weiß nicht, mit was für einem System
Du arbeitest, das eine Division nicht einmal durch eine Ersatzoperation
ersetzen kann), dann mach es so, wie Du selbst es oben gemacht hast:
Als sukzessive Subtraktion...

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>1. warum nimmst du manchmal das Zeichen % für die Division und ein
>anders mal das Zeichen / ?

Weil beide unterschiedliche Ergebnisse liefern:
% liefert den ganzzahligen Rest
/ liefert bei ganzen Zahlen (integer, char...) die ganzzahlige Division
(sozusagen alles was sonst vor dem Komma steht).

Wenn man sich deine Tabelle anguckt führt die zu zwei Schleifen:
Von 138 so oft 10 subtrahieren, bis das Ergebnis kleiner als 10 ist ==>
Das Ergebnis ist die kleinste Stelle.
Ist die Anzahl der Schleifendurchläufe auch noch >= 10, muß eine
weitere Schleife nach dem gleichen Prinzip durchlafuen werden.
Das muß man einfach so lange machen, bis die Anzahl der
Schleifendurchläufe kleiner als 10 ist.
Somit sollte es möglich sein, jede beliebige natürliche Zahl in ihre
Stellen mit nur 2 ineinandern verschachtelten Schleifen zu zerlegen.

von Michael (Gast)


Lesenswert?

Ich habe da was gefunden. Was sehr viel besser geht als dieser Vergleich
jedoch bin ich noch nicht ganz dahinter gestiegen, wie er vorgeht.
Vielleicht kann ja jemand von Euch was dazu sagen

hier der Link:

http://www.ingorohloff.de/tgi3/node7.html#SECTION00024100000000000000

von Michael (Gast)


Lesenswert?

Sorry der Link war es nicht :-) Ich meinte eigentlich die Umsetzung:

hier der richtige Link:

http://www.ingorohloff.de/tgi3/node8.html

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Das Ding ist von 1997, ob der Autor selbst überhaupt noch weiß, was er
damals mit der Grafik zeigen wollte (ich hab mir nicht die komplette
Seite angeguckt...).

Die 8 steht in deiner letzten Siebensegmentanzeige.
Die Anzahl der Durchläufe, die du bis zu diesem Ergebnis gebraucht
hast, bilden die beiden anderen (höherwertigen) Segmente.
Die kann man nach der gleichen Methode bestimmen. (Hatte ich oben schon
beschrieben...)

von Karl heinz B. (kbucheg)


Lesenswert?

<Zitat>
Da der zu implementierende Chip genau die Funktion des Vergleichens und
Subtrahierens übernimmt, kann man eine Division durch eine Kaskadierung
des Chips erreichen
</Zitat>

Er macht also genau das gleiche wie du. Nur macht er's in
Hardware und du in Software.

Komm schon. So schwer ist das nicht. In längstens 2 Stunden
hast du das implementiert.

Wenn es nur um Bytes geht:
Entweder ist die Zahl > 199 oder nicht. Wenn größer als 199,
dann ist die erste Stelle schon mal eine 2. Wenn nicht, dann
kann die Zahl noch größer als 99 sein, dann ist die erste
Stelle eine 1 ansonsten ist das eine 0.
Gleichzeitig hast du jeweils entweder 200 oder 100 oder 0 abgezogen
und damit deine Zahl in den Bereich 00 bis 99 gebracht.
Jetzt ziehst du in einer Schleife solange 10 ab, bis das Ergebnis
kleiner als 10 wird. Dabei zählst du mit wieoft du abgezogen
hast. Diese Anzahl ist die Zehnerstelle und das was nach der
ganzen Abzieherei übrig bleibt ist die Einerstelle.

Wenn wir nicht über Bytes reden, dann funktioniert die Erkennung
der Hunderterstellen genauso wie die der Zehnerstellen. Nur ziehst
du halt solange 100 ab, bis das Ergebnis kleiner als 100 geworden
ist und zählst mit wie oft du das gemacht hast.

Apropos: Worüber reden wir eigentlich? Assembler oder C?

von Michael (Gast)


Lesenswert?

Ich will es im FPGA realisieren :-)

Ok vielen Dank für Eure Hilfe. Ich werde es wie oben beschrieben
realsieren. Es stellt kein Problem mehr da. Zeit für die Berechnung
habe ich ich auch genügend. :-)

P.S. Ich weiß es ist nicht das Forum für FPGAs aber ich wollte auch nur
Ideen für die Umsetzung sammeln. 2 Werte voneinander zu subtrahieren ist
kein Problem.

DANKE

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.