www.mikrocontroller.net

Forum: FPGA, VHDL & Co. 2er Komplement


Autor: Fred Heidinger (fredheidinger)
Datum:
Angehängte Dateien:
  • RE.txt (7,06 KB, 1221 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Also ich hab das Problem das ich keine Ahnung habe wie ich von einem
8bit vektor am besten das zweier komplement darstelle. Ich habe einen
Binärzähler programmiert, der maximal bis 256 (8bit) zählt. Der Wert
kann mithilfe des rotary wheels eingestellt werden und dann wird der
Wert auf den 8LEDs binär angezeigt. (Beiliegend mein Programm). Jetzt
muss ich nit dem Taster des rotary wheels das zweier komplemnt bilden
und über die LEDs ausgeben. Ich weiß nicht wie ich das realisiere. Auch
das Vorzeichen soll angegeben werden.

Autor: Marius Wensing (mw1987)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch einfach ne signed signal mit der range -128 to 127. Wobei das 
doch eigentlich überhaupt keinen Unterschied machst, wenn du die Zahlen 
eh nur binär auf LEDs ausgibst. 2er-Komplement ist einfach eine 
bestimmte Interpretationsform von Binärwerten.

MfG
Marius

Autor: Fred Heidinger (fredheidinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke guter Hinweis aber ich muss von 8bit unsigned (256) auf das zweier 
Komplement signed. Mir ist klar das das eine eigentlich unnötige 
Aufgabenstellung ist aber es ist ein Schulbeispiel. :)

MFG

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fred Heidinger schrieb:
> Danke guter Hinweis aber ich muss von 8bit unsigned (256) auf das zweier
> Komplement signed.
????
Was willst du?
Das Zweierkomplement der Zahl 256 darstellen?

Autor: Nobbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Umwandlung ins 2er Komplement einer Binärzahl ist überhaupt kein 
großer Akt.
Siehe: 
http://de.wikipedia.org/wiki/Zweierkomplement#Dars...
Einfach den Wert den du Wandeln möchtest invertieren, dann noch 1 dazu 
addieren und fertig ;-). Steht aber alles auf dem Wikilink.
Ach und das hat überhaupt nix mit signed oder unsigned zu tun. Signed 
bedeutet nur, dass das MSB als das Vorzeichen der "Zahl" gewertet wird, 
ist dieses '1' dann ist das Vorzeichen negativ, bei '0' positiv. 
Wohingegen beim 2er Komplement ja die Zahl invertiert und mit eins 
addiert vorliegt.
Gruß Nobbi

Autor: Fred Heidinger (fredheidinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hab ich schon gemacht aber das Problem besteht darin, dass wenn man 
mit meinem Programm binär auf z.B. 125 zählt und dann den Rotary Button 
drückt (ist für das zweier Komplement zuständig) stimmt das Ergebnis 
nicht und solange man man über der Zahl 127 bleibt passt alles. Die Zahl 
127 muss doch in zweier komplement -1 sein.

MFG

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ehrlich gesagt immer noch ncht verstanden, was du umwandeln
willst.
Zweierkomplement ist eine Möglichkeit, negative Zahlen darzustellen.

Was soll dein Rotary Button machen?
Die Zahl negieren und dann das Bitmuster der negativen Zahl im
Zweierkomplement darstellen?
Also bei 125 das Bitmuster von -125 anzeigen?
Oder was?

Fred Heidinger schrieb:
> Die Zahl 127 muss doch in zweier komplement -1 sein.

127 ist positiv und egal ob Zweierkomplement oder nicht, die
binäre Darstellung davon ist 0b01111111.

Autor: Fred Heidinger (fredheidinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich beschreib mal mein ganzens Programm. Zuerst wird eine beliebige Zahl 
als Bitmuster auf den 8 LEDs von meinem Sparan 3E Board mithilfe des 
Rotary Buttons eingestellt. Z.B. wird die Zahl 256 angezeigt als 
11111111 (alle LEDs leuchten). Nun soll der Rotary Button geklickt 
werden und das Board soll dieses Bitmuster ins zweier komplement 
wandeln. in diesem Fall ergibt es dieses Bitmuster 00000001. Soweit ist 
ales in Ordnung. Bloß wenn man dann unter 128 (01111111) weißt ich nicht 
mehr weiter.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0b11111111 ist erstmal ein Bitmuster.

Das kann als unsigned betrachtet werden, dann ist es der Wert 255.
Oder man unterstellt, daß es eine signed (vorzeichenbehaftetete
Zahl) mit 8 Bit im Zweierkomplement ist, dann entspricht es dem
Wert -1.

Insofern gibt es da nicht "ins Zweierkomplement wandeln".
Wenn du sagst, dein Rotary Button soll das zu 0b00000001
wandeln:
Sehe ich das richtig, daß der Rotary Button dann das Bitmuster
zur jeweils negierten Zahl liefern soll?
(also aus -1=0b11111111 -> +1=0b00000001 und umgekehrt,
aus -2=0b11111110 -> +2=0b00000010 und umgekehrt, etc.?)

Dann macht es aber keinen Sinn, das auf Zahlen größer oder
gleich 128 anzuwenden, weil die in einem Byte gar nicht
negiert werden können.
Sie benötigen ja schon wegen ihres Werts das oberste Bit, also
bleibt nichts mehr für die Kennzeichnung "ist negativ".
In einem Byte kann man doch nur unsigned 0 bis 255 darstellen
oder signed -128 bis +127. Also kann ich z.B. 200 nicht negieren.

Autor: Nobbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du vielleicht deinen Code mal posten? Oder ist das .txt File ganz 
am Anfang der Code, kann da leider nichts von einem 2er Komplement 
finden. Wäre auch sehr nett, wenn du das nicht als .txt File sondern 
VHDL konform postest.

Autor: Fred Heidinger (fredheidinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Programm ist das obrige .txt File.
Der Teil mit dem 2er Komplement steht unter LED control (Pressing the 
rotary encoder will cause all LED drive bits to be inverted.)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quelltext hin oder her: solange du nicht klar formulieren
kannst, was du willst, bleibt es schwierig...

Autor: jo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zweierkomplement

alle bits umkippen
1 addieren

sind 2 chips..

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.