Come viene convertito il binario in segnali elettrici?


16

Ho appena iniziato in elettronica e sono già affascinato. Avendo suonato con un Arduino in questi giorni, sono consapevole che il binario è una rappresentazione di diverse tensioni - come la rappresentazione + 5V 1e la rappresentazione GND 0.

Ho cercato di scoprire come, a livello fisico, il microcontrollore converta il binario in queste tensioni. Non riesco a trovare una descrizione da nessuna parte. Qualcuno può condividere le proprie conoscenze o indicarmi un luogo / buon libro che descriva come funziona?


1
Non ricordo quale fosse, ma dai un'occhiata a questo video. Buon contenuto.
Abdullah Kahraman,

2
In realtà, il microcontrollore non converte il binario in tensioni variabili. Binario è la tensione. A + 5V è indicato come "ALTO" o "1". E 0 V è indicato come "BASSO" o "0". Vai a dare un'occhiata agli interruttori elettronici, o più in dettaglio; MOSFET.
Abdullah Kahraman,

NON stai chiedendo la conversione da "analogico a digitale" o "da digitale ad analogico", giusto?
Abdullah Kahraman,

3
Potrebbe aiutare a pensarci al contrario. Il "binario" è una sorta di entità matematica simbolica alla quale noi umani piace ragionare. I circuiti logici possono rappresentare binari con tensioni diverse. Progettiamo circuiti logici in modo che ciò che i circuiti fanno con i livelli di tensione abbia un senso logico coerente quando noi umani interpretiamo tali tensioni come numeri binari.
JustJeff

1
@abdullahkahraman Hai ragione, non credo di parlare di DAC, come dici tu. Grazie per il link al video, è molto informativo. Inoltre, mi hai anche fatto conoscere il sito MIT OCW, che sembra essere un'ottima risorsa per l'apprendimento. Grazie!
Matt

Risposte:


18

Voglio riformulare parte della risposta di KellenJB in un modo leggermente diverso:

Non vi è alcuna conversione da 1 e 0 binari a tensioni come 5 V e 0 V. Il microcontrollore o qualsiasi circuito fisico funziona solo sulle tensioni.

Queste tensioni vengono "convertite" in 1 e 0 binari nelle nostre teste quando formiamo un modello semplificato nelle nostre menti su come funziona il circuito.


2
Sì. Sì, sì, sì, e (oh sì), sì.
JustJeff

1
E aggiungerei che per essere uno 0 la tensione deve solo essere vicina a 0 o al di sotto di una soglia (diciamo <0,8 v) ed essere 1 maggiore di una soglia (diciamo> 2,0 v). Le soglie differiscono per la tecnologia utilizzata per costruire il dispositivo e la tensione di alimentazione operativa 5v nel suo caso.
Kenny,

1
Ringrazia tutti. Quindi, una volta che un computer è in esecuzione, non vi è alcun passaggio effettivo del codice binario della macchina? Il codice binario, quando caricato come firmware, è presumibilmente quindi archiviato in memoria che quando "acceduto" dal processore risponde con un ciclo di tensioni che corrispondono al binario? (Spero che abbia senso)
Matt,

Per essere "caricato", il codice deve essere già in una forma fisica: tensioni su un filo, posizioni di alcune leve (o tasti di una tastiera), qualunque cosa. In memoria, i bit sono memorizzati come accumuli di carica su un condensatore ... che genera anche una tensione sul condensatore.
Il fotone

1
Il mio punto di vista è che le forme su uno schermo o stampate su un pezzo di carta sono solo luci o macchie di inchiostro, finché le nostre menti non le interpretano nel senso di uno o zero. Immagina una lettera stampata in un alfabeto che non conosci (diciamo in cirillico o tailandese). È solo una goccia di inchiostro fino a quando una persona russa o thailandese arriva per interpretarlo e sapere quale suono rappresenta. Ma questa distinzione filosofica ci sta probabilmente allontanando dall'argomento.
Il fotone

11

Non c'è davvero una "conversione" che ha luogo. I binari 1 e 0 sono solo una rappresentazione virtuale delle tensioni sottostanti. In effetti, in molti sistemi un'alta tensione può significare 0 mentre una bassa tensione significa 1. Ci sono alcuni motivi per cui ciò viene fatto, ma probabilmente più ti preoccuperai di immergerti presto in questo.

Per capire cosa sta accadendo nella logica, è probabilmente meglio esaminare il transistor. Un transistor può essere usato per molte cose, ma a un livello semplice puoi trattarlo come un interruttore. Concettualmente puoi pensarlo proprio come il tuo interruttore della luce sul muro, ma invece di essere controllato muovendo fisicamente l'interruttore è controllato dal cambiamento di corrente. Potresti considerare la luce accesa come 1 e la luce spenta come 0. Ora puoi iniziare a combinare questi interruttori in set diversi per creare diversi elementi logici (come AND, OR, NOR, ecc.).

So che la mia risposta non è orribilmente dettagliata, ma spero che risponderà alla tua domanda. Se hai bisogno di ulteriori spiegazioni, sarò disposto ad aggiungere ulteriori dettagli, ma non voglio sopraffarti.


Grazie a tutti per le ottime risposte !! Avrei ragione a pensare quindi, a un livello semplicistico, il microprocessore funziona a una certa velocità di clock e ad ogni ciclo invia un set di istruzioni (tensione relativa ai valori binari?) Attraverso questi transistor, che fungono da porte logiche. E i transistor producono quindi un output rilevante basato sulla logica combinata (e, o, NAND ecc.)?
Matt,

1
Semplicisticamente ... sì. Ci sono molti strati di astrazioni qui. È difficile spiegare tutto ciò che sta accadendo qui in una singola risposta, poiché ci vogliono molti strati di astrazione prima di poter capire tutto. Può facilmente prendere alcune lezioni di livello universitario per insegnare tutto. Puoi semplicemente prendere le cose così come sono in superficie o prepararti per un sacco di apprendimento.
Kellenjb,

Grazie @kellenjb, sei stato davvero utile. Sono incoraggiato a saperne di più!
Matt

10

La risposta breve è che non "converte", le tensioni sono binarie (o una sua rappresentazione). Proprio come se si scrive un numero su un foglio, i segni sono una rappresentazione del numero o si conta su un abaco, le posizioni delle pietre sono una rappresentazione di un numero.

Il binario è un sistema numerico, proprio come il decimale (o ottale, esadecimale, ecc.)

Mentre il decimale (base-10) ha 10 simboli (0123456789) binario (base-2) ha solo due (01)

La sequenza 10 in qualsiasi base indica la base alla prima potenza, quindi in decimale 10 significa 10 ^ 1 = 10, e in binario significa 2 ^ 1 = 2. In seguito, 100 in decimale significa 10 ^ 2 = 100, e in binario significa 2 ^ 2 = 4. E così via.

Rappresentare i decimali usando l'elettronica sarebbe possibile ma complicato, quindi hanno scelto il binario che può essere rappresentato da semplici 0 e 1 (o on / off).
Ci sono state variazioni su questo, come i sistemi ternari (3 stati) e ovviamente il calcolo analogico . Prima dei transistor, c'erano macchine meccaniche per schede perforate (google ne sa molte, alcune letture molto interessanti se hai tempo)
I primi computer digitali binari sono stati realizzati con interruttori reali (relè elettronici). Lo Zuse Z3 (1941) è un esempio:

Zuse Z3

Dopo questo sono stati utilizzati i tubi a vuoto al posto dei relè (potrebbe passare più velocemente senza parti meccaniche in movimento), che ha eseguito la commutazione anziché i relè. L' ENIAC è un esempio di un primo computer realizzato con tubi a vuoto.

Poi negli anni '60 arrivarono i transistor e subito dopo i circuiti integrati. I transistor svolgono la stessa funzione dei relè / valvole nelle macchine precedenti, ma erano molto più piccoli, più veloci e consumavano meno energia.

La teoria alla base del modo in cui funzionano i circuiti binari non è cambiata, proprio come non abbiamo cambiato il modo in cui manipoliamo i numeri in matematica: gli algoritmi migliorano ma le regole di base rimangono le stesse.

Quindi, se sai come funziona il binario e hai un semplice circuito in grado di memorizzare 1 o 0 come due diversi livelli di tensione (ad esempio 5 V e 0 V) ​​e altri circuiti semplici che possono eseguire semplici funzioni logiche come AND e OR, quindi puoi combinarli tutti per fare cose più complesse.
Poiché tutti questi circuiti binari sono solo interruttori nella parte fondamentale, puoi ottenere la stessa cosa con qualsiasi cosa che possa alternare tra due stati come meccanico / relè / valvola / transistor / ?.

Per fare un esempio di memorizzazione di un numero in binario, supponiamo di avere 8 switch (che tipo non sono importanti)
A 1 è rappresentato da 5V e uno 0 è rappresentato da 0V.
Vogliamo memorizzare il numero 123.

In decimale è 123 = (1 X 10 ^ 2) + (2 * 10 ^ 1) + (3 x 10 ^ 0)
In binario è 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)
Quindi tutto facciamo semplicemente impostare gli interruttori da 0,1,3,4,5,6 a 5V e gli interruttori da 7 e 2 a 0V. Questo "memorizza" il numero 123 in binario. Questa configurazione sarebbe conosciuta come un "registro".

Se vuoi sapere di più su come gli switch sono combinati per formare circuiti più complessi, procurati un buon libro sulla logica digitale o chiedi a Google.

Questo sito non sembra essere troppo male per cominciare.


0

Il programma in esecuzione utilizza tensioni che rappresentano uno e zero. Tutto ciò che riguarda quella parte digitale sono tensioni vicine alla terra o vicine alla tensione di alimentazione (5 V nel tuo esempio). Quando carichi un registro del processore con 0xFF, supponiamo che tu stia creando 8 segnali 5Volt separati da qualche parte nel chip. Quando quindi memorizzi quel valore di registro in un registro di controllo relativo alle porte di uscita, i pin di uscita sul dispositivo i segnali 5V nel registro dei processori causano la creazione di altri segnali 5V che sono collegati ai pin esterni del dispositivo .


0

Le tensioni sono solo un modo di rappresentare il binario. È una conversione abbastanza efficiente e pratica che consente l'implementazione della logica binaria utilizzando diverse configurazioni di transistor.

Il modo in cui la logica binaria viene solitamente implementata elettronicamente è usando la tecnologia CMOS ( http://en.wikipedia.org/wiki/CMOS ), in cui due transistor MOS sono impostati in una coppia complementare per formare un gate CMOS. Esistono altre implementazioni elettroniche della logica binaria, ad esempio utilizzando TTL ( http://en.wikipedia.org/wiki/Transistor –transistor_logic) o relè. Ma potresti usare qualsiasi cosa, carta, carta, capre robot: http://www.robives.com/category/product_tags/logic_goats . L'implementazione elettronica di CMOS sembra essere efficace e pratica.

Da queste semplici porte CMOS è possibile costruire porte logiche più complicate: NAND e NOR, essendo il gate standard NON, sono quelle di base. Di questi, puoi costruire tutto ciò che è logica binaria, un sommatore, un file di registro, memoria. Di questi è possibile creare un ALU, fino a un microprocessore completo.

Se vuoi maggiori informazioni, puoi leggere un libro sulla logica digitale, mi capita di possedere e come questo:

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

Un bel modo pratico per capire come è costruita una CPU è solo costruirne una tu stesso, usando VHDL e un FPGA. È possibile ottenere schede di sviluppo FPGA economiche e il software è generalmente gratuito (per una licenza limitata). Ne ho alcuni per digilent che sono abbastanza convenienti:

http://www.digilentinc.com/


-3

In poche parole, in un dato intervallo (di solito da 5 a 12 volt) il bit più significativo è 0 nella prima metà di quell'intervallo e 1 nell'altro. Il successivo bit più significativo viene calcolato dividendo ulteriormente quella metà in due e così via fino a quando non sono stati calcolati tutti i bit.

Pertanto, il binario riguarda solo l'aumento e la diminuzione delle tensioni che vengono misurate periodicamente.

Ecco un esempio semplificato. Nell'intervallo da 1 V a 256 V, traduciamo (analogico) 137 in binario (numerico) usando lo pseudocodice:

// 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()));
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.