www.mikrocontroller.net

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


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: arc (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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#SECTION0...

Autor: Michael (Gast)
Datum:

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

hier der richtige Link:

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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.