En algunos dispositivos ADC / DAC, hay opciones para generar / ingresar los datos en el formulario Complemento de 2.
¿Cuáles son las ventajas de representar datos digitales en el formulario Complemento de dos cuando simplemente puede tener un código binario directo y ahorrar tiempo de conversión?
Respuestas:
La representación complementaria de Two de enteros con signo es fácil de manipular en hardware. Por ejemplo, la negación (es decir, x = -x ) puede realizarse simplemente volteando todos los bits en el número y sumando uno. Realizar la misma operación en binario sin formato (por ejemplo, con un bit de signo) generalmente implica mucho más trabajo, porque debe tratar ciertos bits en la secuencia como especiales. Lo mismo ocurre con la suma: la operación de suma para números negativos es idéntica a la operación de suma para números positivos, por lo que no se requiere lógica adicional (sin juego de palabras) para manejar el caso negativo.
Si bien esto no significa que sea más fácil desde su perspectiva, como consumidor de estos datos, disminuye el esfuerzo de diseño y la complejidad del dispositivo, lo que presumiblemente lo hace más barato.
fuente
El ADC puede convertir datos (digamos voltajes de entrada entre 0 y 5V) y usted necesita que esos datos no estén firmados (0V = 0, 5V = código máximo) o firmados (2.5V = 0, 0V = max -ve, 5V = max + ve).
Además de que el complemento de 2 es la representación de computadora más común para datos firmados, la conversión entre los dos formatos descritos anteriormente es completamente trivial: ¡simplemente invierta el MSB!
Esto es increíblemente barato de agregar a la lógica interna del ADC y le da al ADC otro punto de venta en la hoja de datos ...
fuente
Si necesita realizar cálculos matemáticos en las representaciones de números negativos, dos complementos lo hacen más fácil que el binario offset, que coincidirá con el tipo de datos "firmado int". Su compilador simplemente sabrá cómo manejarlo. De lo contrario, pasas tics de reloj convirtiendo de un lado a otro.
fuente
En la pregunta, parece estar implícito que el ADC tarda más en devolver el valor en forma de complemento a 2 que en binario directo. Si bien este podría ser el caso en alguna implementación particular de un ADC, no es cierto en general (por ejemplo, la serie MSP430 de microcontroladores tiene un periférico ADC en el chip que informará el valor en binario directo o complemento de 2, pero toma el mismo número de ciclos en ambos casos).
Con eso fuera del camino, la elección entre el complemento de 2 y el binario directo se debe principalmente a cómo funcionan sus transductores y a cómo le gusta procesar sus datos.
En modo binario directo, el ADC le proporciona un número que representa la relación entre la magnitud de la cantidad analógica medida (casi siempre voltaje) y la cantidad de referencia a escala completa. Por ejemplo, un ADC de 10 bits puede devolver valores de 0 a 1023 (inclusive). Si mide un voltaje (digamos, 1.25 voltios) que es la mitad del voltaje de referencia del ADC (digamos, 2.50 voltios), el código binario que lea será la mitad del valor máximo que podría leer, por lo tanto, 512 o más, sujeto a redondeo y no linealidades en el ADC.
Por ejemplo, supongamos que tiene un transductor que informa la cantidad de combustible de cohete en un tanque. 0V significa que el tanque está vacío y 2.5V Voltios significa que está lleno. ¡Tan solo conecte el transductor a su ADC y listo!
Pero tenga en cuenta que en el párrafo anterior, no hay forma de medir voltajes negativos. ¿Qué pasaría si quisiéramos medir el flujo de combustible del cohete dentro y fuera del tanque (y tuviéramos un transductor para hacerlo)? El ADC no puede medir números negativos, por lo que tenemos un problema. Sin embargo, hay una manera fácil de simularlo usando el modo de complemento a 2: en este caso, la salida del transductor se polariza de manera que el punto cero esté a medio camino entre los dos voltajes de referencia del ADC. En otras palabras, los flujos positivos están representados por voltajes entre 1.25V y 2.50V, y los flujos negativos están representados por 1.25V a 0V, por lo que los flujos hacia el tanque darán códigos ADC de 512 a 1023 y los flujos fuera del agradecimiento darán códigos de 511 a 0 (en formato binario directo).
Ahora eso es terriblemente inconveniente. Tenemos que restar 512 de cada medición antes de hacer algo con ella, lo que da números en el rango de -512 a +511. ¡El punto del modo de complemento de 2 es que hace esto por ti!
Sin embargo, es posible que desee utilizar binario directo con un transductor que produzca resultados firmados. Por ejemplo, su transductor podría tener salidas diferenciales: en este caso, desearía restar la salida invertida de la salida no invertida de todos modos, por lo que no hay ninguna ventaja en usar el complemento de 2.
fuente
El sistema complementario de los dos está en uso, porque se deriva de cómo funciona naturalmente el hardware simple. Piense, por ejemplo, en el odómetro de su automóvil, que ha restablecido a cero. Luego ponga la marcha atrás y conduzca hacia atrás durante 1 milla (no haga esto en realidad). Su odómetro (si es mecánico) rodará de 0000 a 9999. El sistema de complemento de los dos se comporta de manera similar.
Tenga en cuenta que realmente no estoy ofreciendo ninguna información nueva aquí, solo el ejemplo del odómetro que alguien podría encontrar útil: me ayudó a comprender la lógica del sistema de complemento a dos cuando era joven. Después de eso, fue fácil para mí aceptar intuitivamente que los sumadores, sustractores, etc. funcionan bien con el sistema de complemento de dos.
Y sí, el odómetro de mi Nissan funciona de esta manera.
fuente
Otros ya han respondido por qué dos binarios complementarios son convenientes para el hardware de la computadora. Sin embargo, parece que se pregunta por qué un A / D generaría dos cumplidos en lugar de "binario directo" (lo que usted piense que realmente significa).
La mayoría de los A / D generan un valor binario simple sin signo que varía de 0 a 2 N -1, donde N es el número de bits a los que se convierte el A / D. Tenga en cuenta que esto también podría considerarse dos notación complementaria, solo que los valores nunca son negativos. Si solo se trata de números positivos, la mayoría de las representaciones binarias son iguales. Esto incluye dos cumplidos y signos de magnitud.
Algunos A / D, particularmente aquellos integrados en microcontroladores, tienen la opción de producir valores negativos para la mitad inferior de su rango. Esto puede ser una ventaja percibida cuando se mide una señal bipolar.
Al menos en un microcontrolador, esto es generalmente tonto. En algunos casos, puede usar los valores A / D directamente sin ninguna conversión. En ese caso, ya ha convertido todos los demás valores al rango A / D. Restringir eso a todos los números no negativos en realidad simplifica las cosas.
De lo contrario, aplicará algo de escala y compensación a las lecturas A / D de todos modos para obtenerlas en las unidades que use para los valores internos. Una vez más, no hay inconveniente en los valores sin signo que salen directamente de A / D. De hecho, generalmente aplico un filtrado de paso bajo en los valores sin procesar antes de cualquier escala y desplazamiento. Saber que esos valores nunca serán negativos simplifica un poco los cálculos. Hacer la escala en valores sin signo también hace las cosas un poco más simples a veces.
No recuerdo un solo caso en más de 100 proyectos de microcontroladores en los que utilicé A / D en otro formato que no sea el de salida sin firmar.
Entonces, para responder a la pregunta de cuáles son las ventajas de un A / D que genera "dos cumplidos", hay dos respuestas:
En hardware dedicado, puede haber alguna ventaja en tener valores negativos que indiquen voltaje de entrada negativo, en cuyo caso dos cumplidos son la forma más fácil de lidiar con el rango de valores. Tenga en cuenta que si el rango de voltaje de entrada no es simétrico con respecto a 0, esta ventaja desaparece.
fuente
¿De qué habla este 'código binario directo'? Supongo que te refieres a tener un bit de signo que es '1' para negativo y '0' para positivo (o viceversa ). Esto tiene dos desventajas más sobre dos complementos que aún no se han mencionado: uno en gran medida irrelevante en estos días y otro importante.
El más irrelevante es que puede representar un número menos, es decir, 255 números en 8 bits. Esto es bastante irrelevante cuando tienes 32 o 64 bits pero importa cuando tienes tan solo 4 o 6 bits para trabajar.
La más importante es que ahora hay dos formas de representar el mismo número: específicamente, 0 - +0 y -0 pero +0 y -0 son el mismo número, por lo que su implementación debe asegurarse de no compararlos. números cada vez que haces una verificación de igualdad.
fuente