Recién me estoy iniciando en la electrónica y ya estoy fascinado. Habiendo jugado con un Arduino estos últimos días, soy consciente de que el binario es una representación de diferentes voltajes, como la representación de + 5V y la representación 1
de GND 0
.
He estado tratando de descubrir cómo, a nivel físico, el microcontrolador convierte el binario a estos voltajes. Parece que no puedo encontrar una descripción en ningún lado. ¿Alguien puede compartir su conocimiento o indicarme un lugar/buen libro que describa cómo funciona esto?
Quiero reafirmar parte de la respuesta de KellenJB de una manera ligeramente diferente:
No hay conversión de 1 y 0 binarios a voltajes como 5 V y 0 V. El microcontrolador, o cualquier circuito físico, solo opera con los voltajes.
Esos voltajes se "convierten" en 1 y 0 binarios en nuestras cabezas cuando formamos un modelo simplificado en nuestras mentes sobre cómo funciona el circuito.
Realmente no hay una "conversión" que tenga lugar. Los 1 y 0 binarios son solo una representación virtual de los voltajes subyacentes. De hecho, en muchos sistemas, un voltaje alto puede significar 0 mientras que un voltaje bajo significa 1. Hay algunas razones por las que se hace esto, pero probablemente le interese profundizar en esto desde el principio.
Para comprender lo que sucede en la lógica, probablemente sea mejor observar el transistor. Un transistor se puede usar para muchas cosas, pero en un nivel simple puede tratarlo como un interruptor. Conceptualmente, puede pensar en él como su interruptor de luz en la pared, pero en lugar de ser controlado moviendo físicamente el interruptor, está controlado por el cambio en la corriente. Puede tratar la luz encendida como un 1 y la luz apagada como un 0. Ahora puede comenzar a combinar estos interruptores en varios conjuntos para crear diferentes elementos lógicos (como AND, OR, NOR, etc.).
Sé que mi respuesta no es terriblemente detallada, pero espero que responda a su pregunta. Si necesita más explicación, estaré dispuesto a agregar más detalles, pero no quiero abrumarlo.
La respuesta corta es que no se "convierte", los voltajes son binarios (o una representación del mismo). Al igual que si escribe un número en un papel, las marcas son una representación del número, o si cuenta con un ábaco, las posiciones de las piedras son una representación de un número.
Binario es un sistema numérico, al igual que decimal (u octal, hexadecimal, etc.)
Mientras que el decimal (base-10) tiene 10 símbolos (0123456789), el binario (base-2) solo tiene dos (01)
La secuencia 10 en cualquier base significa la base a la primera potencia, por lo que en decimal 10 significa 10^1 = 10, y en binario significa 2^1 = 2. A continuación, 100 en decimal significa 10^2 = 100, y en binario significa 2^2 = 4. Y así sucesivamente.
Representar decimales utilizando la electrónica sería posible pero complicado, por lo que eligieron binarios que pueden representarse con simples 0 y 1 (o encendido/apagado).
Hubo variaciones en esto, como sistemas ternarios (3 estados) y, por supuesto , computación analógica . Antes de los transistores, había máquinas mecánicas de tarjetas perforadas (google sabe mucho, una lectura muy interesante si tiene tiempo)
Las primeras computadoras digitales binarias se hicieron con interruptores reales (relés electrónicos). El Zuse Z3 (1941) es un ejemplo:
Después de esto, se usaron tubos de vacío en lugar de relés (podían cambiar más rápido sin partes mecánicas móviles), que realizaban la conmutación en lugar de relés. El ENIAC es un ejemplo de una computadora temprana hecha con tubos de vacío.
Luego en los años 60 llegaron los transistores y poco después los circuitos integrados. Los transistores realizan la misma función que los relés/válvulas tenían en máquinas anteriores, pero eran mucho más pequeños, más rápidos y consumían menos energía.
La teoría real detrás de la forma básica en que funcionan los circuitos informáticos binarios no ha cambiado en absoluto, al igual que no hemos cambiado la forma en que manipulamos los números en matemáticas: los algoritmos mejoran pero las reglas básicas siguen siendo las mismas.
Entonces, si sabe cómo funciona el binario y tiene un circuito simple capaz de almacenar un 1 o un 0 como dos niveles de voltaje diferentes (por ejemplo, 5V y 0v), y otros circuitos simples que pueden realizar funciones lógicas simples como AND y OR, entonces puedes combinarlos todos para hacer cosas más complejas.
Dado que todos estos circuitos binarios son solo interruptores en lo más fundamental, puede lograr lo mismo con cualquier cosa que pueda alternar entre dos estados como mecánico/relé/válvula/transistor/?.
Para dar un ejemplo de almacenamiento de un número en binario, digamos que tenemos 8 interruptores (no importa de qué tipo sean)
Un 1 está representado por 5V y un 0 está representado por 0V.
Queremos almacenar el número 123.
En decimal es 123 = (1 X 10^2) + (2 * 10^1) + (3 x 10^0)
En binario es 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)
Así que todo lo que hacemos es poner los interruptores 0,1,3,4,5,6 a 5V y los interruptores 7 y 2 a 0V. Esto "almacena" el número 123 en binario. Esta configuración se conocería como un "registro".
Si desea saber más sobre cómo se combinan los interruptores para formar circuitos más complejos, consiga un buen libro sobre lógica digital o pregunte en Google.
Este sitio no parece ser tan malo para empezar.
El programa que está ejecutando utiliza voltajes que representan unos y ceros. Todo sobre esa parte digital son voltajes cercanos a tierra o cerca del voltaje de suministro (5V en su ejemplo). Cuando carga un registro de procesador con 0xFF, digamos que está creando 8 señales separadas de 5 voltios en algún lugar del chip. Cuando almacena ese valor de registro en un registro de control que está relacionado con los puertos de salida, los pines de salida en el dispositivo registran las señales de 5V en los procesadores y luego hacen que se creen otras señales de 5V que están conectadas a los pines externos del dispositivo. .
Los voltajes son solo una forma de representar el binario. Es una conversión bastante eficiente y práctica que permite implementar la lógica binaria utilizando diferentes configuraciones de transistores.
La forma en que la lógica binaria generalmente se implementa electrónicamente es mediante el uso de la tecnología CMOS ( http://en.wikipedia.org/wiki/CMOS ), en la que dos transistores MOS se configuran en un par complementario para formar una puerta CMOS. Sin embargo, existen otras implementaciones electrónicas de lógica binaria, usando TTL ( http://en.wikipedia.org/wiki/Transistor –transistor_logic ) por ejemplo, o relés. Pero podría usar cualquier cosa realmente, papel, cabras robot de papel: http://www.robives.com/category/product_tags/logic_goats . La implementación electrónica de CMOS resulta ser eficiente y práctica.
A partir de estas compuertas CMOS simples, puede construir compuertas lógicas más complicadas: NAND y NOR, siendo la compuerta estándar NO, son las básicas. A partir de estos, puede construir todo lo que sea lógica binaria, un sumador, un archivo de registro, memoria. A partir de estos, puede construir una ALU, hasta un microprocesador completo.
Si desea más información, puede leer un libro sobre lógica digital, tengo y me gusta este:
Una buena forma práctica de comprender cómo se construye una CPU es simplemente construir una usted mismo, usando VHDL y un FPGA. Puede obtener placas de desarrollo FPGA baratas y el software suele ser gratuito (para una licencia restringida). Tengo algunos de Digilent que son bastante asequibles:
En pocas palabras, en un rango dado (generalmente de 5 a 12 voltios), el bit más significativo es 0 en la primera mitad de ese rango y 1 en el otro. El siguiente bit más significativo se calcula dividiendo esa mitad en dos y así sucesivamente hasta que se hayan calculado todos los bits.
Por lo tanto, binario se trata solo de voltajes crecientes y decrecientes que se miden periódicamente.
Aquí hay un ejemplo simplificado. En el rango de 1V a 256V, traduzcamos (analógico) 137 a binario (numérico) usando 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()));
}
abdullah kahraman
abdullah kahraman
abdullah kahraman
solojeff
Mate
Mate