Как двоичный код преобразуется в электрические сигналы?

16

Я только начинаю в электронике и уже очарован. Поиграв с Arduino в последние несколько дней, я осознаю, что двоичное представление представляет собой различные напряжения - например, +5 В для представления 1и GND-представления 0.

Я пытался выяснить, как на физическом уровне микроконтроллер преобразует двоичный код в эти напряжения. Кажется, я нигде не могу найти описание. Может кто-нибудь поделиться своими знаниями или указать мне место / хорошую книгу, которая описывает, как это работает?

Matt
источник
1
Я не помню, какой это был, но посмотрите на это видео. Хороший контент.
Абдулла Кахраман
2
На самом деле, микроконтроллер не преобразует двоичный код в переменное напряжение. Бинарное это напряжение. + 5 В обозначается как "ВЫСОКИЙ" или "1". И 0V обозначается как «НИЗКИЙ» или «0». Пойдите и посмотрите на электронные выключатели, или более подробно; МОП - транзистор.
Абдулла Кахраман
Вы НЕ спрашиваете о «аналого-цифровом» или «цифро-аналоговом» преобразовании, верно?
Абдулла Кахраман
3
Это могло бы помочь думать об этом наоборот. «Бинарный» - это своего рода символическая математическая сущность, которую мы, люди, хотели бы рассуждать. Логические схемы могут представлять двоичные числа с различными напряжениями. Мы проектируем логические схемы так, чтобы то, что схемы делают с уровнями напряжения, имело логический смысл, когда мы, люди, интерпретировали эти напряжения как двоичные числа.
JustJeff
1
@abdullahkahraman Вы правы, я не думаю, что я говорю о ЦАП, как вы говорите. Спасибо за ссылку на видео, оно очень информативное. И благодаря этому вы также познакомили меня с сайтом MIT OCW, который, похоже, станет отличным ресурсом для обучения. Благодарность!
Мэтт

Ответы:

18

Я хочу перефразировать часть ответа KellenJB немного по-другому:

Преобразование двоичных 1 и 0 в напряжения, такие как 5 В и 0 В, не выполняется. Микроконтроллер или любая физическая схема работает только от напряжений.

Эти напряжения «преобразуются» в двоичные 1 и 0 в наших головах, когда мы формируем упрощенную модель в наших умах о том, как работает схема.

Фотон
источник
2
Да. Да, да, да, и (о да), да.
JustJeff
1
И я бы добавил, что для того, чтобы быть 0, напряжение просто должно быть близко к 0 или ниже порога (скажем, <0,8 В) и быть на 1 больше, чем порог (скажем,> 2,0 В). Пороги отличаются технологией, используемой для сборки устройства, и рабочим напряжением питания 5В в его корпусе.
Кенни
1
Спасибо всем. То есть, когда компьютер работает, вообще не происходит передачи двоичного машинного кода? Двоичный код, когда он загружается в качестве встроенного программного обеспечения, по-видимому, затем сохраняется в памяти, который, когда процессор получает «доступ», отвечает циклом напряжений, которые соответствуют двоичному? (Надеюсь, это имеет смысл)
Мэтт
Чтобы быть «загруженным», код должен быть уже в некоторой физической форме: напряжение на проводе, положение некоторых рычагов (или клавиш на клавиатуре), что угодно. В памяти биты хранятся в виде накопления заряда на конденсаторе ... который также генерирует напряжение на конденсаторе.
Фотон
1
Моя точка зрения такова, что фигуры на экране или напечатанные на листе бумаги - это просто огни или капли чернил, пока наш разум не интерпретирует их как одно или ноль. Представьте себе письмо, напечатанное в алфавите, который вы не знаете (скажем, на кириллице или на тайском языке). Это всего лишь капля чернил, пока русский или тайский человек не придет, чтобы интерпретировать его и узнать, какой звук он представляет. Но это философское различие, вероятно, уводит нас от темы.
Фотон
11

На самом деле не происходит «конверсии». Двоичные 1 и 0 - это просто виртуальное представление основных напряжений. Фактически, во многих системах высокое напряжение может означать 0, в то время как низкое напряжение означает 1. Есть несколько причин, почему это делается, но, вероятно, больше, чем вы хотите погрузиться в это рано.

Чтобы понять, что происходит в логике, лучше всего заглянуть в транзистор. Транзистор может использоваться для многих целей, но на простом уровне вы можете рассматривать его как переключатель. Концептуально вы можете думать об этом, как о выключателе на стене, но вместо того, чтобы физически перемещать его, он контролируется изменением тока. Вы можете рассматривать источник света как 1, а источник света как 0. Теперь вы можете начать комбинировать эти переключатели в различных наборах для создания различных логических элементов (таких как AND, OR, NOR и т. Д.).

Я знаю, что мой ответ не очень подробный, но я надеюсь, что он ответит на ваш вопрос. Если вам нужно больше объяснений, я буду готов добавить больше деталей, просто не хочу вас перегружать.

Kellenjb
источник
Спасибо всем за отличные ответы! Правильно ли было бы думать, что тогда на упрощенном уровне микропроцессор работает с определенной тактовой частотой и в каждом цикле посылает набор команд (напряжение, относящееся к двоичным значениям?) Через эти транзисторы, которые действуют как логические элементы. И транзисторы затем выдают соответствующий вывод на основе комбинированной логики (и, или, NAND и т. Д.)?
Мэтт
1
Упрощенно ... да. Здесь много слоев абстракций. Трудно объяснить все, что здесь происходит, в одном ответе, поскольку требуется много уровней абстракции, прежде чем вы сможете все понять. Это может легко занять несколько классов на уровне колледжа, чтобы научить всему этому. Вы можете просто взять вещи такими, какие они есть, или подготовиться к большому изучению.
Kellenjb
Спасибо @kellenjb, вы были очень полезны. Я рад узнать больше!
Мэтт
10

Краткий ответ: он не «конвертирует», напряжения - двоичные (или их представление). Также как если вы напишите число на какой-то бумаге, отметки представляют собой представление числа или рассчитывают на счет, а позиции камней представляют собой представление числа.

Двоичная система - это система счисления, такая же как десятичная (или восьмеричная, шестнадцатеричная и т. Д.)

В то время как десятичное число (основание-10) имеет 10 символов (0123456789), двоичное (основание-2) имеет только два (01)

Последовательность 10 в любой базе означает основание для первой степени, поэтому в десятичной 10 означает 10 ^ 1 = 10, а в двоичной - 2 ^ 1 = 2. Далее, 100 в десятичной системе означает 10 ^ 2 = 100, и в двоичном виде это означает 2 ^ 2 = 4. И так далее.

Представление десятичной дроби с использованием электроники было бы возможно, но сложно, поэтому они выбрали двоичный код, который может быть представлен простыми 0 и 1 (или вкл. / Выкл.).
Были вариации этого, например, троичные системы (3 состояния) и, конечно, аналоговые вычисления . До транзисторов были механические перфокарты (Google знает много, очень интересное чтение, если у вас есть время).
Первые двоичные цифровые компьютеры были сделаны с настоящими переключателями (электронными реле). Цузе Z3 (1941) является примером:

Zuse Z3

После этого вместо реле использовались вакуумные трубки (могли переключаться быстрее без движущихся механических частей), которые выполняли переключение вместо реле. Эниак является примером раннего компьютера сделан с вакуумными трубками.

Затем в 60-х годах появились транзисторы и вскоре после микросхем. Транзисторы выполняют ту же функцию, что и реле / ​​клапаны в более ранних машинах, но они были намного меньше, быстрее и потребляли меньше энергии.

Фактическая теория, лежащая в основе принципа работы двоичных компьютерных схем, совершенно не изменилась, точно так же, как мы не изменили способ манипулирования числами в математике - алгоритмы улучшаются, но основные правила остаются прежними.

Итак, если вы знаете, как работает двоичный файл, и у вас есть простая схема, способная хранить 1 или 0 как два разных уровня напряжения (например, 5 В и 0 В), и другие простые схемы, которые могут выполнять простые логические функции, такие как И и ИЛИ, тогда Вы можете объединить их все, чтобы сделать более сложные вещи.
Поскольку все эти двоичные схемы являются просто коммутаторами в самом основном, вы можете достичь того же с любым, что может чередоваться между двумя состояниями, такими как механическое / реле / ​​клапан / транзистор / ?.

Чтобы привести пример сохранения числа в двоичном виде, допустим, у нас есть 8 переключателей (какого типа они не важны)
. 1 представлен 5 В, а 0 представлен 0 В.
Мы хотим хранить номер 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 до 5В и переключатели 7 и 2 до 0В. Это «хранит» число 123 в двоичном виде. Эта настройка будет известна как «регистрация».

Если вы хотите узнать больше о том, как переключатели объединяются в более сложные схемы, приобретите хорошую книгу по цифровой логике или спросите Google.

Этот сайт не выглядит слишком плохим для начала.

Оли Глейзер
источник
0

Программа, которую вы запускаете, использует напряжения, которые представляют единицы и нули. Все в этой цифровой части - это напряжения, близкие к заземлению или близкие к напряжению питания (в вашем примере 5 В). Когда вы загружаете регистр процессора с 0xFF, скажем, вы создаете 8 отдельных сигналов 5 Вольт где-то в чипе. Когда вы затем сохраняете это значение регистра в управляющем регистре, который связан с выходными портами, выходные выводы на устройстве, 5-вольтовые сигналы в регистре процессоров, вызывают создание других 5-вольтовых сигналов, которые подключаются к внешним выводам устройства. ,

Старожил
источник
0

Напряжения - это просто способ представления двоичного кода. Это довольно эффективное и практичное преобразование, которое позволяет реализовать двоичную логику с использованием различных конфигураций транзисторов.

Бинарная логика обычно реализуется электронным способом с использованием технологии CMOS ( http://en.wikipedia.org/wiki/CMOS ), в которой два МОП-транзистора устанавливаются в комплементарной паре для формирования затвора КМОП. Существуют и другие электронные реализации бинарной логики, например, с использованием TTL ( http://en.wikipedia.org/wiki/Transistor –transistor_logic) или реле. Но на самом деле вы можете использовать что угодно, бумагу, бумажных коз роботов: http://www.robives.com/category/product_tags/logic_goats . Электронная реализация CMOS оказывается эффективной и практичной.

Из этих простых CMOS-шлюзов вы можете создавать более сложные логические вентили: NAND и NOR, а стандартные вентили NOT, являются базовыми. Из них вы можете построить все, что является двоичной логикой, сумматором, регистровым файлом, памятью. Из них вы можете построить АЛУ, вплоть до полноценного микропроцессора.

Если вам нужна дополнительная информация, вы можете прочитать книгу о цифровой логике, которая мне принадлежит, и мне нравится эта:

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

Хороший практический способ понять, как построен процессор, - это просто создать его самостоятельно, используя VHDL и FPGA. Вы можете получить дешевые платы разработки FPGA, и программное обеспечение обычно бесплатно (для ограниченной лицензии). У меня есть несколько digilent, которые вполне доступны по цене:

http://www.digilentinc.com/

Wesen
источник
-3

Проще говоря, в данном диапазоне (обычно от 5 до 12 вольт) старший бит равен 0 в первой половине этого диапазона и 1 в другой. Следующий старший значащий бит вычисляется путем дальнейшего деления этой половины на две части и так далее, пока все биты не будут вычислены.

Таким образом, двоичные данные - это просто увеличение и уменьшение напряжения, которые измеряются периодически.

Вот упрощенный пример. В диапазоне от 1 В до 256 В, давайте переведем (аналоговый) 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()));
}
Сэмюэл Дюкло
источник