일부 ADC / DAC 장치에서는 2의 보완 형식으로 데이터를 출력 / 입력하는 옵션이 있습니다.
Two 's Complement 형식으로 디지털 데이터를 표시하면 어떤 이점이 있습니까? 간단한 이진 코드를 사용하여 변환 시간을 절약 할 수 있다면?
일부 ADC / DAC 장치에서는 2의 보완 형식으로 데이터를 출력 / 입력하는 옵션이 있습니다.
Two 's Complement 형식으로 디지털 데이터를 표시하면 어떤 이점이 있습니까? 간단한 이진 코드를 사용하여 변환 시간을 절약 할 수 있다면?
답변:
부호있는 정수에 대한 2의 칭찬 표현은 하드웨어에서 조작하기 쉽습니다. 예를 들어, 부정 (즉, x = -x )은 숫자의 모든 비트를 뒤집고 1을 추가하여 간단히 수행 할 수 있습니다. 원시 바이너리 (예 : 부호 비트)에서 동일한 작업을 수행하려면 스트림의 특정 비트를 특수한 것으로 처리해야하므로 일반적으로 훨씬 더 많은 작업이 필요합니다. 더하기도 마찬가지입니다. 음수에 대한 더하기 연산은 양수에 대한 더하기 연산과 동일하므로, 음의 경우를 처리하기 위해 추가 논리 (펀치 의도가 없음)가 필요하지 않습니다.
그렇다고해서이 데이터의 소비자로서 자신의 관점에서 더 쉬워지는 것은 아니지만 장치의 설계 노력과 복잡성을 줄여서 아마도 더 저렴하게 만들 수 있습니다.
ADC는 데이터를 변환 할 수 있으며 (0 ~ 5V 사이의 입력 전압) 서명되지 않은 데이터 (0V = 0, 5V = max 코드) 또는 서명 된 데이터 (2.5V = 0, 0V = max -ve, 5V = max)가 필요합니다 + ve).
2의 보수가 부호있는 데이터에 대한 가장 일반적인 컴퓨터 표현 일뿐 아니라 위에서 설명한 두 형식 간의 변환은 매우 간단합니다. 간단히 MSB를 반전시킵니다!
이것은 ADC의 내부 로직에 추가하기에 엄청나게 저렴하며 데이터 시트에서 ADC에 또 다른 판매 포인트를 제공합니다 ...
문제는 ADC가 직선 이진보다 2의 보수 형태로 값을 반환하는 데 시간이 더 걸린다는 것을 암시하는 것 같습니다. 이는 ADC의 특정 구현에서 발생할 수 있지만 일반적으로 사실이 아닙니다 (예를 들어 MSP430 시리즈 마이크로 컨트롤러에는 ADC 주변 장치 온칩이 있으며이 값은 직선 이진 또는 2의 보수로 값을보고합니다. 두 경우 모두 동일한 횟수의 사이클을 수행합니다).
그렇게하지 않으면 2의 보수와 직선 이진 중 하나를 선택하면 트랜스 듀서 작동 방식과 데이터 처리 방식이 결정됩니다.
직선 이진 모드에서 ADC는 측정 된 아날로그 수량 (실제로 항상 전압)의 크기와 풀 스케일 기준 수량 간의 비율을 나타내는 숫자를 제공합니다. 예를 들어, 10 비트 ADC는 0에서 1023 (포함)의 값을 반환 할 수 있습니다. ADC의 기준 전압의 절반 (예 : 2.50V) 인 전압 (예 : 1.25V)을 측정하는 경우 읽은 이진 코드는 읽을 수있는 최대 값의 절반 (512 이상)이됩니다. ADC의 라운딩 및 비선형성에 영향을받습니다.
예를 들어 탱크의 로켓 연료 양을보고하는 변환기가 있다고 가정합니다. 0V는 탱크가 비어 있음을 의미하고 2.5V 볼트는 가득 찼음을 의미합니다. 트랜스 듀서를 ADC에 연결하기 만하면됩니다.
그러나 위 단락에서는 음의 전압을 측정 할 수있는 방법이 없습니다. 탱크 내외부에서 로켓 연료의 흐름을 측정하려면 어떻게해야합니까? ADC는 음수를 측정 할 수 없으므로 문제가 있습니다. 그러나 2의 보수 모드를 사용하여 쉽게 위조하는 방법이 있습니다.이 경우 트랜스 듀서 출력이 다시 바이어스되어 영점이 ADC의 두 기준 전압 사이의 중간 지점이됩니다. 즉, 양의 흐름은 1.25V ~ 2.50V 사이의 전압으로 표시되고 음의 흐름은 1.25V ~ 0V로 표시되므로 탱크로 유입되면 ADC 코드가 512 ~ 1023으로 바뀌고 감사에서 유출됩니다. 511에서 0까지의 코드 (이진 형식).
이제는 정말 불편합니다. 측정을 수행하기 전에 각 측정에서 512를 빼야합니다. 이는 -512에서 +511 사이의 숫자입니다. 2의 보수 모드의 요점 은 이것이 당신을 위해 이것을 한다는 것입니다!
그러나 서명 된 결과를 생성하는 변환기와 함께 직선 이진을 계속 사용할 수 있습니다. 예를 들어 트랜스 듀서에 차동 출력이있을 수 있습니다.이 경우 어쨌든 비 반전 출력에서 반전 된 출력을 빼고 싶으므로 2의 보수를 사용하는 것이 유리합니다.
이 2의 보완 시스템은 간단한 하드웨어가 자연스럽게 작동하는 방식에서 유래하기 때문에 사용 중입니다. 예를 들어 자동차의 주행 거리계를 생각하면 0으로 재설정됩니다. 그런 다음 기어를 뒤집어 놓고 1 마일 뒤로 주행하십시오 (실제로이 작업을 수행하지 마십시오). 주행 거리계 (기계식 인 경우)는 0000에서 9999까지 구르 게됩니다. 두 보완 시스템은 비슷하게 작동합니다.
나는 여기에 새로운 정보를 제공하지 않고 누군가 도움이 될만한 주행 거리계 예제 만 제공합니다. 어렸을 때 2의 보완 시스템의 이론적 근거를 이해하는 데 도움이되었습니다. 그 후, 가산기, 감산기 등이 2의 보수 시스템과 잘 작동한다는 것을 직관적으로 쉽게 받아 들일 수있었습니다.
그리고 네, 닛산의 주행 거리계는 이런 식으로 작동합니다.
다른 사람들은 이미 두 개의 보완 바이너리가 컴퓨터 하드웨어에 편리한 이유에 대해 답변했습니다. 그러나 A / D가 왜 "직진 이진"대신에 두 개의 칭찬을 출력하는지 묻는 것 같습니다 (실제로 의미하는 것).
대부분의 A / D는 0에서 2 N -1 사이의 간단한 부호없는 이진 값을 출력합니다 . 여기서 N은 A / D가 변환되는 비트 수입니다. 이것은 또한 값이 음수가되지 않는다는 점에서 두 가지 칭찬 표기법으로 간주 될 수 있습니다. 양수 만 다루는 경우 대부분의 이진 표현은 동일합니다. 여기에는 두 가지 칭찬과 부호 크기가 포함됩니다.
일부 A / D, 특히 마이크로 컨트롤러에 내장 된 A / D는 범위의 하반부에 음수 값을 생성 할 수 있습니다. 이것은 바이폴라 신호를 측정 할 때 인식되는 이점이 될 수 있습니다.
적어도 마이크로 컨트롤러에서 이것은 일반적으로 바보입니다. 경우에 따라 변환없이 A / D 값을 직접 사용할 수도 있습니다. 이 경우 다른 모든 값을 이미 A / D 범위로 변환했습니다. 음수가 아닌 모든 숫자로 제한하면 실제로 단순화됩니다.
그렇지 않으면 A / D 판독 값에 스케일링 및 오프셋을 적용하여 내부적으로 값에 사용하는 단위로 가져올 수 있습니다. 여기서 다시 부호없는 값이 A / D에서 직접 나오는 단점은 없습니다. 사실, 나는 보통 스케일링과 오프셋 전에 로우 값에 로우 패스 필터링을 적용합니다. 이러한 값이 음수 인 것을 아는 것은 계산을 약간 단순화합니다. 부호없는 값으로 크기 조정을 수행하면 상황이 조금 더 단순 해집니다.
100 개가 넘는 마이크로 컨트롤러 프로젝트에서 단일 사례를 기억할 수 없었는데, A / D를 부호없는 출력 형식 이외의 용도로 사용했습니다.
따라서 "두 칭찬"을 출력하는 A / D의 장점에 대한 질문에 답하기 위해 두 가지 답변이 있습니다.
전용 하드웨어에서는 음의 입력 전압을 나타내는 음의 값을 갖는 것이 유리할 수 있습니다.이 경우 2 개의 칭찬이 값의 범위를 처리하는 가장 쉬운 방법입니다. 입력 전압 범위가 0에 대해 대칭이 아닌 경우이 장점은 사라집니다.
이 '직선 이진 코드'는 무엇입니까? 음수의 경우 '1', 양수의 경우 '0'(또는 그 반대 ) 의 부호 비트를 의미한다고 가정합니다 . 이것은 아직 언급되지 않은 두 가지 보완에 비해 두 가지 단점이 있습니다. 요즘은 크게 관련이 없으며 하나는 중요합니다.
크게 관련이없는 것은 하나의 적은 수, 즉 8 비트에서 255 개의 숫자를 나타낼 수 있다는 것입니다. 이것은 32 또는 64 비트가있을 때 관련이 없지만 작업 할 4 또는 6 비트가 적을 때 중요합니다.
더 중요한 것은 동일한 숫자를 나타내는 두 가지 방법이 있다는 것입니다. 특히 0-+0 및 -0이지만 +0 및 -0은 같은 숫자이므로 구현에서 이러한 숫자를 비교하지 않아야합니다. 평등 점검을 할 때마다 숫자.