바이너리는 전기 신호로 어떻게 변환됩니까?


16

나는 전자 제품에서 시작하고 이미 매료되었습니다. 지난 며칠 동안 Arduino와 함께 연주 한 이진은 + 5V 표시 1및 GND 표시와 같은 서로 다른 전압을 나타냅니다 0.

물리적 인 수준에서 마이크로 컨트롤러가 어떻게 이진 전압을이 전압으로 변환하는지 알아 내려고 노력했습니다. 어디에서나 설명을 찾을 수 없습니다. 누구든지 자신의 지식을 공유하거나 이것이 어떻게 작동하는지 설명하는 좋은 장소 / 책을 알려줄 수 있습니까?


1
나는 그것이 어느 것인지 기억하지 못하지만 비디오를 살펴보십시오 . 좋은 내용.
abdullah kahraman

2
실제로, 마이크로 컨트롤러는 이진을 가변 전압으로 변환하지 않습니다. 이진수는 전압입니다. + 5V는 "HIGH"또는 "1"로 표시됩니다. 그리고 0V는 "LOW"또는 "0"으로 표시됩니다. 전자 스위치를 자세히 살펴보십시오. MOSFET.
abdullah kahraman

"아날로그-디지털"또는 "디지털-아날로그"변환에 대해 묻고 있지 않습니까?
abdullah kahraman

3
다른 방법으로 생각하면 도움이 될 수 있습니다. '바이너리'는 우리 인간이 추론하기를 원하는 일종의 상징적 수학적 실체입니다. 논리 회로는 전압이 다른 이진수를 나타낼 수 있습니다. 우리는 인간이 전압을 이진수로 해석 할 때 전압 레벨로 회로가하는 일이 일관된 논리적 의미를 갖도록 논리 회로를 설계합니다.
JustJeff

1
@abdullahkahraman 당신이 맞아요, 당신이 말하는 것처럼 내가 DAC에 대해 이야기하고 있다고 생각하지 않습니다. 비디오 링크에 감사드립니다. 매우 유익합니다. 그리고이를 통해 MIT OCW 사이트를 소개했습니다.이 사이트는 학습에 큰 도움이 될 것 같습니다. 감사!
Matt

답변:


18

KellenJB의 답변 중 일부를 약간 다른 방식으로 다시 말하고 싶습니다.

이진 1과 0에서 5 V와 0 V와 같은 전압으로의 변환은 없습니다. 마이크로 컨트롤러 또는 물리적 회로는 전압에서만 작동합니다.

회로가 어떻게 작동하는지에 대한 우리의 마음에 단순화 된 모델을 형성 할 때 우리의 머리에서이 전압은 이진수 1과 0으로 "변환"됩니다.


2
예. 예, 예, (오 예) 그렇습니다.
JustJeff

1
그리고 전압을 0으로 설정하려면 전압이 0에 가깝거나 임계 값보다 작거나 (<0.8v), 임계 값보다 큰 1이어야합니다 (> 2.0v). 임계 값은 장치를 구축하는 데 사용 된 기술과 그의 경우 작동 공급 전압 5v에 따라 다릅니다.
kenny

1
모두 감사합니다. 따라서 컴퓨터가 실행되면 바이너리 머신 코드가 실제로 전달되지 않습니다. 이진 코드는 펌웨어로 업로드 될 때 프로세서에 의해 '접근'될 때 이진에 해당하는 전압 사이클로 응답하는 메모리에 저장되는 것으로 추정됩니다. (이것이 말이
Matt

"업로드"되려면 코드가 물리적 인 형태 여야합니다. 와이어의 전압, 일부 레버의 위치 (또는 키보드의 키) 등. 메모리에서 비트는 커패시터에 전하 축적으로 저장되며 커패시터에 전압을 생성합니다.
광자

1
내 견해로는, 우리의 마음이 1 또는 0을 의미하는 것으로 해석 할 때까지 화면상의 모양이나 종이에 인쇄 된 모양은 단지 빛이나 잉크 얼룩 일뿐입니다. 모르는 알파벳 (예 : 키릴 문자 또는 태국어)으로 인쇄 된 문자를 상상해보십시오. 러시아인이나 태국인이 그것을 해석하고 그것이 어떤 소리를 나타내는 지 알기 전까지는 잉크 덩어리입니다. 그러나이 철학적 차이는 아마도 우리를 주제에서 벗어나게 할 것입니다.
광자

11

실제로 발생하는 "전환"은 없습니다. 이진수 1과 0은 기본 전압의 가상 표현 일뿐입니다. 실제로, 많은 시스템에서 고전압은 0을 의미하지만 저전압은 1을 의미합니다. 이것이 수행되는 몇 가지 이유가있을 수 있지만 아마도 더 일찍 이것으로 뛰어들 수 있습니다.

논리에서 무슨 일이 일어나고 있는지 이해하려면 아마도 트랜지스터를 살펴 보는 것이 가장 좋습니다. 트랜지스터는 많은 용도로 사용될 수 있지만 간단한 수준에서는 스위치로 취급 할 수 있습니다. 개념적으로 벽의 전등 스위치처럼 생각할 수 있지만 스위치를 물리적으로 움직여 제어하는 ​​대신 전류의 변화에 ​​의해 제어됩니다. 조명을 1로, 조명을 0으로 취급 할 수 있습니다. 이제이 스위치를 다양한 세트로 결합하여 AND, OR, NOR 등의 다른 논리 요소를 만들 수 있습니다.

내 답변이 끔찍하게 자세한 것은 아니지만 귀하의 질문에 대한 답변이 되었기를 바랍니다. 더 많은 설명이 필요하면 더 자세한 내용을 기꺼이 추가 할 것입니다. 압도하고 싶지 않습니다.


큰 답장을 보내 주셔서 감사합니다 !! 그렇다면 간단한 수준에서 마이크로 프로세서가 특정 클럭 속도로 실행되고 각 사이클에서 로직 게이트 역할을하는이 트랜지스터를 통해 명령 세트 (2 진 값과 관련된 전압?)를 보냅니다. 그러면 트랜지스터는 결합 된 논리 (및 NAND 등)를 기반으로 관련 출력을 생성합니까?
Matt

1
간단히 말해서 ... 예. 여기에는 많은 추상화 레이어가 있습니다. 모든 것을 이해하기 전에 많은 추상화 계층이 필요하기 때문에 여기에서 일어나는 모든 것을 단일 답변으로 설명하기가 어렵습니다. 모든 것을 가르치기 위해 몇 개의 대학 수준의 수업을 쉽게 수강 할 수 있습니다. 표면에있는 그대로 물건을 가져 가거나 많은 학습을 준비 할 수 있습니다.
Kellenjb

감사합니다 @kellenjb, 정말 도움이되었습니다. 나는 더 많은 것을 배우도록 격려된다!
Matt

10

짧은 대답은 "변환"하지 않으며 전압 이진 (또는 그 표현)입니다. 종이에 숫자를 쓰듯이, 마크는 숫자를 나타내거나 주판을 세는 것처럼 돌 위치는 숫자를 나타냅니다.

이진수는 10 진수 (또는 8 진수, 16 진수 등)와 같은 숫자 체계입니다.

10 진수 (base-10)에는 10 개의 기호가 있지만 (0123456789) 2 진수 (base-2)에는 2 개의 숫자 만 있습니다 (01)

10 진법 10은 10 ^ 1 = 10을 의미하고 2 진법은 2 ^ 1 = 2를 의미합니다. 다음에 10 진법의 100은 10 ^ 2 = 100을 의미합니다. 이진수로 2 ^ 2 = 4를 의미합니다.

그들은 단순한 0과 1 (또는 OFF / ON)로 표시 할 수있는 바이너리 선택, 그래서 전자는 가능하지만 복잡 될 사용하여 소수점을 표현하기 위해
시스템의 변화는 원 같은 (3 주),이에 있었다 및 코스의 컴퓨팅 아날로그 . 트랜지스터 이전에는 기계식 펀치 카드 기계가있었습니다 (Google은 시간이 있다면 매우 흥미로운 독서를 많이 알고 있습니다)
초기 바이너리 디지털 컴퓨터는 실제 스위치 (전자 릴레이)로 만들어졌습니다. 추제 Z3는 (1941) 예입니다 :

Zuse Z3

이 진공관을 릴레이 대신에 사용한 후 (기계식 부품이 없어도 더 빨리 전환 할 수 있음) 릴레이 대신 전환을 수행했습니다. ENIAC은 진공관 만든 초기 컴퓨터의 일례이다.

그런 다음 60 년대에 트랜지스터가 IC에 도착했습니다. 트랜지스터는 릴레이 / 밸브가 초기 기계에서와 동일한 기능을 수행하지만 훨씬 작고 빠르며 전력 소비는 적었습니다.

이진 컴퓨터 회로가 작동하는 기본 방식에 대한 실제 이론은 수학에서 숫자를 조작하는 방식을 변경하지 않은 것처럼 전혀 변경되지 않았습니다. 알고리즘은 개선되지만 기본 규칙은 동일하게 유지됩니다.

따라서 바이너리가 어떻게 작동하는지 알고 있고 1 또는 0을 두 개의 서로 다른 전압 레벨 (예 : 5V 및 0v)로 저장할 수있는 간단한 회로와 AND 및 OR과 같은 간단한 논리 기능을 수행 할 수있는 다른 간단한 회로가있는 경우 더 복잡한 작업을 수행하기 위해 모두 결합 할 수 있습니다. 모든
이후 이진 회로는 가장 기본적인 스위치 일 뿐이 기계식 / 릴레이 / 밸브 / 트랜지스터 /?와 같은 두 가지 상태를 번갈아 가며 사용할 수 있습니다.

숫자를 이진수로 저장하는 예제를 제공하기 위해 8 개의 스위치가 있다고 가정합니다 (중요하지 않은 유형)
1은 5V로, 0은 0V로 표현됩니다.
숫자 123을 저장하고 싶습니다.

십진수에서는 123 = (1 X 10 ^ 2) + (2 * 10 ^ 1) + (3 x 10 ^ 0)
이진수에서는 01111011 = (0 x 2 ^ 7) + (1 x 2 ^ 6) + (1 x 2 ^ 5) + (1 x 2 ^ 4) + (1 x 2 ^ 3) + (0 x 2 ^ 2) + (1 x 2 ^ 1) + (1 x 2 ^ 0)
모두 스위치 0,1,3,4,5,6을 5V로 설정하고 스위치 7과 2를 0V로 설정합니다. 이것은 숫자 123을 이진수로 "저장"합니다. 이 설정을 "등록"이라고합니다.

더 복잡한 회로를 형성하기 위해 스위치를 결합하는 방법에 대해 더 알고 싶다면 디지털 로직에 대한 좋은 책을 얻거나 Google에 문의하십시오.

사이트 는 시작하기에 너무 나쁘지 않은 것 같습니다.


0

실행중인 프로그램은 1과 0을 나타내는 전압을 사용하고 있습니다. 해당 디지털 부품에 대한 모든 것은 접지에 가까운 전압 또는 공급 전압에 가까운 전압입니다 (예 : 5V). 프로세서 레지스터를 0xFF로로드하면 칩 어딘가에 8 개의 개별 5Volt 신호를 생성한다고 말할 수 있습니다. 그런 다음 해당 레지스터 값을 출력 포트와 관련된 제어 레지스터에 저장하면 프로세서 레지스터의 5V 신호가 장치의 출력 핀에 연결되어 장치의 외부 핀에 연결된 다른 5V 신호가 생성됩니다. .


0

전압은 이진법을 나타내는 방법 일뿐입니다. 다른 트랜지스터 구성을 사용하여 이진 논리를 구현할 수있는 매우 효율적이고 실용적인 변환입니다.

바이너리 로직이 일반적으로 전자적으로 구현되는 방식은 CMOS ( http://en.wikipedia.org/wiki/CMOS ) 기술 기술은 두 개의 MOS 트랜지스터가 상보 적 쌍으로 설정되어 CMOS 게이트를 형성합니다. 그래도 TTL ( http://en.wikipedia.org/wiki/Transistor –transistor_logic) 또는 릴레이를 사용하는 다른 전자 이진 논리 구현이 있습니다. 그러나 실제로 종이, 종이 로봇 염소를 사용할 수 있습니다 : http://www.robives.com/category/product_tags/logic_goats . 전자 CMOS 구현은 효율적이고 실용적입니다.

이 간단한 CMOS 게이트 중에서보다 복잡한 로직 게이트를 구축 할 수 있습니다. 표준 게이트가 아닌 NAND 및 NOR이 기본 게이트입니다. 이 중 이진 논리, 가산기, 레지스터 파일, 메모리 등 모든 것을 만들 수 있습니다. 이 중 완전한 마이크로 프로세서까지 ALU를 구축 할 수 있습니다.

더 많은 정보를 원한다면 디지털 로직에 관한 책을 읽을 수 있습니다.

http://www.amazon.com/Digital-Systems-Principles-Applications-11th/dp/0135103827/ref=sr_1_1?s=books&ie=UTF8&qid=1326877355&sr=1-1

CPU가 어떻게 구축되는지 이해하는 좋은 실용적인 방법은 VHDL과 FPGA를 사용하여 직접 CPU를 구축하는 것입니다. 저렴한 FPGA 개발 보드를 구입할 수 있으며 소프트웨어는 일반적으로 무료입니다 (제한된 라이센스의 경우). 나는 꽤 저렴한 digilent의 몇 가지를 가지고 있습니다 :

http://www.digilentinc.com/


-3

간단히 말해서, 주어진 범위 (일반적으로 5 ~ 12 볼트)에서 가장 중요한 비트는 해당 범위의 전반에서 0이고 다른 것에서 1입니다. 다음으로 가장 중요한 비트는 모든 비트가 계산 될 때까지 그 절반을 2로 나누는 식으로 계산됩니다.

따라서 이진은 주기적으로 측정되는 전압을 높이거나 낮추는 것입니다.

다음은 간단한 예입니다. 1V에서 256V의 범위에서 의사 코드를 사용하여 137을 이진 (숫자)으로 변환 (아날로그)합니다.

// used this way: analogToNumeric(137, 256);
function convert(var number, var length) {
    if (number > length) { return(ERROR); }
    function convert(var half, var binary) {
        if (half < 2) { return(binary); }
        elseif (number < half) {
            return(convert((half / 2), append(binary, 0)));
        } else {
            return(convert((half / 2), append(binary, 1)));
        }
    } return(convert((length / 2), list()));
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.