In einigen ADC / DAC-Geräten gibt es Optionen zum Ausgeben / Eingeben der Daten in der 2er-Komplementform.
Was sind die Vorteile der Darstellung digitaler Daten in Two's Complement-Form? Wenn Sie einfach einen reinen Binärcode haben und Zeit für die Konvertierung sparen können?
Antworten:
Die Komplimentdarstellung von vorzeichenbehafteten Ganzzahlen durch Two ist in der Hardware leicht zu manipulieren. Zum Beispiel kann die Negation (dh x = -x ) einfach durchgeführt werden, indem alle Bits in der Zahl umgedreht und eins hinzugefügt werden. Das Ausführen derselben Operation in einer rohen Binärdatei (z. B. mit einem Vorzeichenbit) erfordert normalerweise viel mehr Arbeit, da Sie bestimmte Bits im Stream als speziell behandeln müssen. Gleiches gilt für die Addition - die Additionsoperation für negative Zahlen ist identisch mit der Additionsoperation für positive Zahlen, sodass keine zusätzliche Logik (kein Wortspiel beabsichtigt) erforderlich ist, um den negativen Fall zu behandeln.
Dies bedeutet zwar nicht, dass es aus Ihrer Sicht einfacher ist, als Verbraucher dieser Daten, aber es verringert den Designaufwand und die Komplexität des Geräts und macht es vermutlich billiger.
quelle
Der ADC kann Daten konvertieren (z. B. Eingangsspannungen zwischen 0 und 5 V), und Sie müssen diese Daten entweder vorzeichenlos (0 V = 0, 5 V = maximaler Code) oder signiert (2,5 V = 0, 0 V = max -ve, 5 V = max + ve).
Zusätzlich zur Ergänzung von 2 als häufigste Computerdarstellung für signierte Daten ist die Konvertierung zwischen den beiden oben beschriebenen Formaten völlig trivial: Invertieren Sie einfach das MSB!
Dies ist unglaublich billig, um die interne Logik des ADC zu erweitern, und gibt dem ADC ein weiteres Verkaufsargument auf dem Datenblatt ...
quelle
Wenn Sie die Darstellungen negativer Zahlen berechnen müssen, ist das Zweierkomplement einfacher als die Offset-Binärdatei, die mit dem Datentyp "signiertes int" übereinstimmt. Ihr Compiler weiß einfach, wie er damit umgehen soll. Andernfalls verbringen Sie Clock Ticks damit, hin und her zu konvertieren.
quelle
In der Frage scheint impliziert zu sein, dass es länger dauert, bis der ADC den Wert in der Komplementform von 2 zurückgibt als in der geraden Binärform. Während dies bei einer bestimmten Implementierung eines ADC der Fall sein kann, trifft dies im Allgemeinen nicht zu (zum Beispiel hat die MSP430-Serie von Mikrocontrollern einen ADC-Peripherie-On-Chip, der den Wert in gerader Binär- oder Zweierkomplement anzeigt, aber es dauert in beiden Fällen die gleiche Anzahl von Zyklen).
Damit hängt die Wahl zwischen dem 2er-Komplement und der geraden Binärdatei hauptsächlich davon ab, wie Ihre Wandler funktionieren und wie Sie Ihre Daten verarbeiten möchten.
Im geraden Binärmodus gibt Ihnen der ADC eine Zahl, die das Verhältnis zwischen der Größe der gemessenen Analoggröße (praktisch immer Spannung) und der Referenzgröße im vollen Maßstab darstellt. Beispielsweise kann ein 10-Bit-ADC Werte von 0 bis einschließlich 1023 zurückgeben. Wenn Sie eine Spannung messen (z. B. 1,25 Volt), die der Hälfte der Referenzspannung des ADC entspricht (z. B. 2,50 Volt), entspricht der von Ihnen gelesene Binärcode der Hälfte des Maximalwerts, den Sie lesen können - also etwa 512 Volt. vorbehaltlich Rundungen und Nichtlinearitäten im ADC.
Angenommen, Sie haben einen Schallkopf, der die Menge an Raketentreibstoff in einem Tank anzeigt. 0 V bedeutet, dass der Tank leer ist und 2,5 V Volt bedeuten, dass er voll ist. Sie schließen also einfach den Schallkopf an Ihren ADC an und los geht's!
Beachten Sie jedoch, dass es im obigen Absatz keine Möglichkeit gibt, negative Spannungen zu messen. Was wäre, wenn wir den Fluss von Raketentreibstoff in den Tank und aus dem Tank messen wollten (und wir hatten dazu einen Schallkopf)? Der ADC kann keine negativen Zahlen messen, daher haben wir ein Problem. Es gibt jedoch eine einfache Möglichkeit, es im Komplement-Modus von 2 zu fälschen: In diesem Fall wird der Wandlerausgang neu vorgespannt, sodass der Nullpunkt auf halbem Weg zwischen den beiden Referenzspannungen des ADC liegt. Mit anderen Worten, positive Flüsse werden durch Spannungen zwischen 1,25 V und 2,50 V dargestellt, und negative Flüsse werden durch 1,25 V bis 0 V dargestellt. Ströme in den Tank ergeben also ADC-Codes von 512 bis 1023 und Ströme aus dem Dankeschön geben Codes von 511 bis 0 (im geraden Binärformat).
Das ist furchtbar unpraktisch. Wir müssen 512 von jeder Messung abziehen, bevor wir etwas damit machen, was Zahlen im Bereich von -512 bis +511 ergibt. Der Punkt des Komplement-Modus von 2 ist, dass er dies für Sie erledigt!
Möglicherweise möchten Sie jedoch weiterhin eine reine Binärdatei mit einem Wandler verwenden, der signierte Ergebnisse liefert. Beispielsweise könnte Ihr Wandler über Differenzausgänge verfügen: In diesem Fall möchten Sie den invertierten Ausgang ohnehin vom nicht invertierten Ausgang subtrahieren, sodass die Verwendung des Zweierkomplements keinen Vorteil bietet.
quelle
Das Komplementsystem der beiden wird verwendet, da es sich aus der natürlichen Funktionsweise einfacher Hardware ergibt. Denken Sie zum Beispiel an den Kilometerzähler Ihres Autos, den Sie auf Null zurückgesetzt haben. Schalten Sie dann den Rückwärtsgang ein und fahren Sie 1 Meile rückwärts (bitte tun Sie dies in der Realität nicht). Ihr Kilometerzähler (wenn er mechanisch ist) rollt von 0000 bis 9999. Das Komplementsystem der beiden verhält sich ähnlich.
Bitte beachten Sie, dass ich hier keine neuen Informationen anbiete, sondern nur das Kilometerzähler-Beispiel, das jemand hilfreich finden könnte - es hat mir geholfen, die Gründe für das Zweierkomplementsystem zu verstehen, als ich jung war. Danach war es für mich leicht zu verstehen, dass Addierer, Subtrahierer usw. gut mit dem Komplementsystem der beiden funktionieren.
Und ja, der Kilometerzähler meines Nissan funktioniert so.
quelle
Andere haben bereits geantwortet, warum zwei Komplimente für Computerhardware praktisch sind. Sie scheinen sich jedoch zu fragen, warum ein A / D zwei Komplimente anstelle von "Straight Binary" ausgeben würde (was auch immer Sie denken, das bedeutet wirklich).
Die meisten A / Ds geben einen einfachen vorzeichenlosen Binärwert im Bereich von 0 bis 2 N -1 aus, wobei N die Anzahl der Bits ist, in die der A / D konvertiert. Beachten Sie, dass dies auch als Zweierkomplementnotation betrachtet werden kann, nur dass die Werte niemals negativ sind. Wenn Sie nur mit positiven Zahlen arbeiten, sind die meisten binären Darstellungen gleich. Dies beinhaltet zwei Komplimente und Vorzeichen.
Einige A / Ds, insbesondere solche, die in Mikrocontroller eingebaut sind, haben die Möglichkeit, negative Werte für die untere Hälfte ihres Bereichs zu erzeugen. Dies kann ein wahrgenommener Vorteil bei der Messung eines bipolaren Signals sein.
Zumindest in einem Mikrocontroller ist dies im Allgemeinen albern. In einigen Fällen können Sie die A / D-Werte direkt ohne Konvertierung verwenden. In diesem Fall haben Sie bereits alle anderen Werte in den A / D-Bereich konvertiert. Die Beschränkung auf alle nicht negativen Zahlen vereinfacht die Dinge tatsächlich.
Andernfalls werden Sie die A / D-Messwerte ohnehin skalieren und versetzen, um sie in die Einheiten zu bringen, die Sie intern für Werte verwenden. Auch hier gibt es keinen Nachteil für vorzeichenlose Werte, die direkt aus dem A / D kommen. Tatsächlich wende ich normalerweise vor jeder Skalierung und jedem Offset eine Tiefpassfilterung auf die Rohwerte an. Wenn Sie wissen, dass diese Werte niemals negativ sind, werden die Berechnungen geringfügig vereinfacht. Das Skalieren von vorzeichenlosen Werten macht die Dinge manchmal auch etwas einfacher.
Ich kann mich nicht an einen einzigen Fall in weit über 100 Mikrocontroller-Projekten erinnern, in denen ich A / D in einem anderen als einem nicht signierten Ausgabeformat verwendet habe.
Um die Frage zu beantworten, welche Vorteile eine A / D-Ausgabe mit "Zweierkompliment" bietet, gibt es zwei Antworten:
Bei dedizierter Hardware kann es von Vorteil sein, negative Werte zu haben, die eine negative Eingangsspannung anzeigen. In diesem Fall ist das Kompliment mit zwei die einfachste Möglichkeit, mit dem Wertebereich umzugehen. Beachten Sie, dass dieser Vorteil wegfällt, wenn der Eingangsspannungsbereich um 0 nicht symmetrisch ist.
quelle
Was ist dieser 'gerade Binärcode', von dem Sie sprechen? Ich nehme an, Sie meinen ein Vorzeichenbit, das für negativ '1' und für positiv '0' ist (oder umgekehrt ). Dies hat zwei weitere Nachteile gegenüber zwei Komplementen, die noch nicht erwähnt wurden: einen, der heutzutage weitgehend irrelevant ist, und einen wichtigen.
Das weitgehend irrelevante ist, dass Sie eine Zahl weniger darstellen können - dh 255 Zahlen in 8 Bits. Dies ist ziemlich irrelevant, wenn Sie 32 oder 64 Bit haben, aber wichtig, wenn Sie nur 4 oder 6 Bit zum Arbeiten hatten.
Das Wichtigste ist, dass es jetzt zwei Möglichkeiten gibt, dieselbe Zahl darzustellen - insbesondere 0 - +0 und -0, aber +0 und -0 sind dieselbe Zahl, sodass Ihre Implementierung sicherstellen muss, dass Sie diese nicht vergleichen Zahlen jedes Mal, wenn Sie eine Gleichheitsprüfung durchführen.
quelle