Como o binário é convertido em sinais elétricos?

16

Estou apenas começando em eletrônica e já estou fascinado. Tendo tocado com um Arduino nos últimos dias, sei que o binário é uma representação de tensões diferentes - como + 5V representando 1e GND representando 0.

Eu tenho tentado descobrir como, em um nível físico, o microcontrolador converte o binário nessas tensões. Não consigo encontrar uma descrição em nenhum lugar. Alguém pode compartilhar seu conhecimento ou apontar-me para um lugar / bom livro que descreva como isso funciona?

Matt
fonte
11
Não me lembro qual era, mas dê uma olhada neste vídeo. Bom conteúdo.
Abdullah kahraman
2
Na verdade, o microcontrolador não converte o binário em tensões variáveis. Binário é a tensão. A + 5V é indicado como "ALTO" ou "1". E 0V é indicado como "BAIXO" ou "0". Vá e veja os interruptores eletrônicos, ou mais detalhadamente; MOSFET.
23412 Abdullah kahraman
Você NÃO está perguntando sobre a conversão "analógico para digital" ou "digital para analógico", certo?
Abdullah kahraman
3
Pode ajudar a pensar o contrário. 'Binário' é um tipo de entidade matemática simbólica com a qual nós humanos gostamos de raciocinar. Os circuitos lógicos podem representar binários com tensões diferentes. Projetamos circuitos lógicos para que o que os circuitos façam com os níveis de tensão faça sentido lógico consistente quando nós humanos interpretarmos essas tensões como números binários.
precisa saber é o seguinte
11
@abdullahkahraman Você está correto, acho que não estou falando sobre DAC, como você diz. Obrigado pelo link do vídeo, é muito informativo. E assim, você também me apresentou o site do MIT OCW, que parece ser um ótimo recurso para o aprendizado. Obrigado!
Matt

Respostas:

18

Quero reformular parte da resposta do KellenJB de uma maneira um pouco diferente:

Não há conversão de 1 e 0 binários para tensões como 5 V e 0 V. O microcontrolador, ou qualquer circuito físico, apenas opera nas tensões.

Essas tensões são "convertidas" em 1 e 0 binários em nossas cabeças quando formamos um modelo simplificado em nossas mentes sobre como o circuito está funcionando.

O fóton
fonte
2
Sim. Sim, sim, sim e (oh sim), sim.
precisa saber é o seguinte
11
E eu acrescentaria que, para ser 0, a tensão precisa estar próxima de 0 ou abaixo de um limite (digamos <0.8v) e ser 1 maior que um limite (digamos> 2.0v). Os limites diferem pela tecnologia usada para construir o dispositivo e a tensão de alimentação operacional de 5v no seu caso.
Kenny
11
Obrigado a todos. Então, quando um computador está em execução, não há nenhuma passagem real do código da máquina binária? O código binário, quando carregado como firmware, é presumivelmente armazenado na memória que, quando 'acessada' pelo processador, responde com um ciclo de tensões que correspondem ao binário? (Espero que isso faz sentido)
Matt
Para ser "carregado", o código já deve estar em alguma forma física: voltagens em um fio, as posições de algumas alavancas (ou teclas de um teclado), qualquer que seja. Na memória, os bits são armazenados como acúmulos de carga em um capacitor ... o que também gera uma tensão no capacitor.
O Photon
11
Meu ponto de vista é que as formas em uma tela ou impressas em um pedaço de papel são apenas luzes ou gotas de tinta, até que nossas mentes as interpretem como significando um ou zero. Imagine uma letra impressa em um alfabeto que você não conhece (digamos, cirílico ou tailandês). É apenas uma gota de tinta até que uma pessoa russa ou tailandesa apareça para interpretá-la e saber que som ela representa. Mas essa distinção filosófica provavelmente está nos tirando do assunto.
The Photon
11

Não existe realmente uma "conversão" que ocorra. 1s e 0s binários são apenas uma representação virtual das tensões subjacentes. De fato, em muitos sistemas, uma alta tensão pode significar 0, enquanto uma baixa tensão significa 1. Existem algumas razões pelas quais isso é feito, mas provavelmente mais do que você gostaria de mergulhar nisso desde o início.

Para entender o que está acontecendo na lógica, provavelmente é melhor olhar para o transistor. Um transistor pode ser usado para muitas coisas, mas em um nível simples, você pode tratá-lo como um comutador. Conceitualmente, você pode pensar nisso como seu interruptor na parede, mas, em vez de ser controlado movendo fisicamente o interruptor, ele é controlado pela mudança na corrente. Você pode tratar a luz acesa como 1 e a luz apagada como 0. Agora você pode começar a combinar essas opções em conjuntos variados para criar diferentes elementos lógicos (como AND, OR, NOR etc.).

Sei que minha resposta não é terrivelmente detalhada, mas espero que responda à sua pergunta. Se você precisar de mais explicações, estarei disposto a adicionar mais detalhes, mas não quero sobrecarregá-lo.

Kellenjb
fonte
Obrigado a todos pelas ótimas respostas !! Eu teria razão em pensar que, em um nível simplista, o microprocessador funciona a uma certa velocidade de clock e, a cada ciclo, envia um conjunto de instruções (tensão relacionada aos valores binários?) Através desses transistores, que atuam como portas lógicas. E os transistores produzem uma saída relevante com base na lógica combinada (e, ou, NAND etc)?
Matt
11
Simplisticamente ... sim. Existem muitas camadas de abstração aqui. É difícil explicar tudo o que está acontecendo aqui em uma única resposta, pois são necessárias muitas camadas de abstração para que você possa entender tudo. Pode facilmente levar algumas aulas de nível universitário para ensinar tudo. Você pode simplesmente pegar as coisas como estão na superfície ou se preparar para muito aprendizado.
precisa saber é o seguinte
Obrigado @kellenjb, você foi realmente útil. Sou encorajado a aprender mais!
Matt
10

A resposta curta é que não "converte", as tensões são as binárias (ou uma representação dela). Assim como se você escrever um número em algum papel, as marcas são uma representação do número ou, com um ábaco, as posições da pedra são uma representação de um número.

Binário é um sistema numérico, assim como decimal (ou octal, hexadecimal, etc)

Enquanto decimal (base-10) possui 10 símbolos (0123456789), o binário (base-2) possui apenas dois (01)

A sequência 10 em qualquer base significa a base da primeira potência, portanto, no decimal 10 significa 10 ^ 1 = 10 e em binário significa 2 ^ 1 = 2. Na sequência, 100 em decimal significa 10 ^ 2 = 100, e em binário significa 2 ^ 2 = 4. E assim por diante.

Representar decimal usando eletrônica seria possível, mas complicado, então eles escolheram o binário que pode ser representado por simples 0 e 1 (ou on / off).
Havia variações nisso, como sistemas ternários (3 estados) e, claro, computação analógica . Antes dos transistores, havia máquinas mecânicas de cartões perfurados (o Google sabe bastante, algumas leituras muito interessantes, se você tiver tempo).
Os primeiros computadores digitais binários foram feitos com comutadores reais (relés eletrônicos). O Zuse Z3 (1941) é um exemplo:

Zuse Z3

Depois disso, eram usados ​​tubos de vácuo em vez de relés (podiam trocar mais rapidamente sem partes mecânicas em movimento), que realizavam a troca em vez de relés. O ENIAC é um exemplo de um computador antigo feito com tubos de vácuo.

Então, nos anos 60, chegaram os transistores e logo após os CIs. Os transistores desempenham a mesma função que os relés / válvulas tinham em máquinas anteriores, mas eram muito menores, mais rápidos e consumiam menos energia.

A teoria real por trás da maneira básica como funcionam os circuitos binários de computador não mudou nada, assim como não mudamos a maneira como manipulamos números em matemática - os algoritmos melhoram, mas as regras básicas permanecem as mesmas.

Portanto, se você sabe como o binário funciona e possui um circuito simples capaz de armazenar 1 ou 0 como dois níveis de tensão diferentes (por exemplo, 5V e 0v) e outros circuitos simples que podem executar funções lógicas simples como AND e OR, então você pode combiná-los todos para fazer coisas mais complexas.
Como todos esses circuitos binários são apenas comutadores no mais fundamental, você pode conseguir a mesma coisa com qualquer coisa que possa alternar entre dois estados, como mecânico / relé / válvula / transistor / ?.

Para dar um exemplo de armazenamento de um número em binário, digamos que temos 8 comutadores (que tipo eles não são importantes)
A 1 é representado por 5V e 0 é representado por 0V.
Queremos armazenar o número 123.

Em decimal é 123 = (1 X 10 ^ 2) + (2 * 10 ^ 1) + (3 x 10 ^ 0)
Em binário é 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)
Portanto, todos o que fazemos é definir comutadores 0,1,3,4,5,6 para 5V e comutadores 7 e 2 para 0V. Isso "armazena" o número 123 em binário. Essa configuração seria conhecida como "registro".

Se você quiser saber mais sobre como os switches são combinados para formar circuitos mais complexos, adquira um bom livro sobre lógica digital ou pergunte ao google.

Este site não parece tão ruim para começar.

Oli Glaser
fonte
0

O programa que você está executando está usando tensões que representam uns e zeros. Tudo nessa parte digital é voltagem próxima ao terra ou próxima à voltagem de alimentação (5V no seu exemplo). Quando você carrega um registro de processador com 0xFF, digamos que você esteja criando 8 sinais separados de 5Volt em algum lugar do chip. Quando você armazena esse valor de registro em um registro de controle relacionado às portas de saída, os pinos de saída no dispositivo, os sinais de 5V no registro dos processadores, causam a criação de outros sinais de 5V, conectados aos pinos externos do dispositivo. .

old_timer
fonte
0

As tensões são apenas uma maneira de representar o binário. É uma conversão bastante eficiente e prática que permite que a lógica binária seja implementada usando diferentes configurações de transistor.

A maneira como a lógica binária geralmente é implementada eletronicamente é usando o CMOS ( tecnologia http://en.wikipedia.org/wiki/CMOS ), na qual dois transistores MOS são configurados em um par complementar para formar uma porta CMOS. Porém, existem outras implementações eletrônicas da lógica binária, usando TTL ( http://en.wikipedia.org/wiki/Transistor –transistor_logic), por exemplo, ou relés. Mas você pode usar qualquer coisa realmente, papel, cabras de robôs de papel: http://www.robives.com/category/product_tags/logic_goats . A implementação eletrônica do CMOS passa a ser eficiente e prática.

Destas simples portas CMOS, você pode construir portas lógicas mais complicadas: NAND e NOR, sendo o portão padrão NOT, são os básicos. Destes, você pode construir tudo o que é lógica binária, um somador, um arquivo de registro, memória. Dessas, é possível criar uma ALU, até um microprocessador completo.

Se você quiser mais informações, pode ler um livro sobre lógica digital, por acaso possuo e gosto deste:

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

Uma maneira prática e agradável de entender como uma CPU é construída é apenas criar uma você mesmo, usando VHDL e um FPGA. Você pode obter placas de desenvolvimento FPGA baratas e o software geralmente é gratuito (para uma licença restrita). Eu tenho alguns da Digilent que são bastante acessíveis:

http://www.digilentinc.com/

wesen
fonte
-3

Simplificando, em um determinado intervalo (geralmente de 5 a 12 volts), o bit mais significativo é 0 na primeira metade desse intervalo e 1 no outro. O próximo bit mais significativo é calculado dividindo a metade em dois e assim sucessivamente até que todos os bits tenham sido calculados.

Portanto, binário é apenas sobre o aumento e a diminuição de tensões medidas periodicamente.

Aqui está um exemplo simplificado. No intervalo de 1V a 256V, vamos traduzir (analógico) 137 para binário (numérico) usando o pseudocódigo:

// 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()));
}
Samuel Duclos
fonte