Wie werden binäre in elektrische Signale umgewandelt?

Ich fange gerade in der Elektronik an und bin schon fasziniert. Nachdem ich in den letzten Tagen mit einem Arduino gespielt habe, ist mir bewusst, dass Binär eine Darstellung verschiedener Spannungen ist - wie z. B. +5V, die 1und GND darstellen 0.

Ich habe versucht herauszufinden, wie der Mikrocontroller auf physikalischer Ebene die Binärdatei in diese Spannungen umwandelt. Ich finde nirgendwo eine Beschreibung. Kann jemand sein Wissen teilen oder mich auf einen Ort/ein gutes Buch verweisen, das beschreibt, wie dies funktioniert?

Ich weiß nicht mehr, welcher es war, aber schau dir dieses Video an. Guter Inhalt.
Tatsächlich wandelt der Mikrocontroller die Binärdatei nicht in die variierenden Spannungen um. Binär ist die Spannung. Eine +5V wird als "HIGH" oder "1" bezeichnet. Und 0 V wird als "LOW" oder "0" bezeichnet. Schauen Sie sich elektronische Schalter an, oder genauer; MOSFET.
Sie fragen NICHT nach einer "Analog-zu-Digital"- oder "Digital-zu-Analog"-Konvertierung, oder?
Es könnte helfen, es andersherum zu sehen. „Binär“ ist eine Art symbolische mathematische Einheit, mit der wir Menschen gerne argumentieren. Logikschaltungen können binär mit unterschiedlichen Spannungen darstellen. Wir entwerfen Logikschaltungen so, dass das, was die Schaltungen mit den Spannungspegeln machen, einen konsistenten logischen Sinn ergibt, wenn wir Menschen diese Spannungen als Binärzahlen interpretieren.
Danke an alle. Es war mir nicht in den Sinn gekommen, dass die Binärdatei die Abstraktion über den Spannungen war, aber das macht Sinn.
@abdullahkahraman Du hast Recht, ich glaube nicht, dass ich über DAC spreche, wie du sagst. Danke für den Link zum Video, sehr informativ. Und auf diese Weise haben Sie mir auch die MIT OCW-Site vorgestellt, die so aussieht, als wäre sie eine großartige Ressource zum Lernen. Danke!

Antworten (6)

Ich möchte einen Teil der Antwort von KellenJB auf etwas andere Weise wiederholen:

Es gibt keine Umwandlung von binären Einsen und Nullen in Spannungen wie 5 V und 0 V. Der Mikrocontroller oder jede physikalische Schaltung arbeitet nur mit den Spannungen.

Diese Spannungen werden in unseren Köpfen in binäre 1 und 0 "umgewandelt", wenn wir in unseren Köpfen ein vereinfachtes Modell darüber bilden, wie die Schaltung funktioniert.

Ja. Ja, ja, ja, und (oh ja), ja.
Und ich würde hinzufügen, dass die Spannung, um eine 0 zu sein, nur nahe bei 0 oder unter einem Schwellenwert liegen muss (z. B. < 0,8 V) und eine 1 größer als ein Schwellenwert sein muss (z. B. > 2,0 V). Die Schwellenwerte unterscheiden sich durch die verwendete Technologie zum Bau des Geräts und die Betriebsspannung von 5 V in diesem Fall.
Danke an alle. Wenn also ein Computer läuft, gibt es überhaupt keine eigentliche Weitergabe von binärem Maschinencode? Der Binärcode wird, wenn er als Firmware hochgeladen wird, vermutlich dann im Speicher gespeichert, der, wenn er vom Prozessor "zugegriffen" wird, mit einem Spannungszyklus antwortet, der dem Binärcode entspricht? (Hoffe das macht Sinn)
Um "hochgeladen" zu werden, muss der Code bereits in irgendeiner physikalischen Form vorliegen: Spannungen an einem Draht, die Positionen einiger Hebel (oder Tasten auf einer Tastatur), was auch immer. Im Speicher werden die Bits als Ladungsanhäufungen auf einem Kondensator gespeichert ... der auch eine Spannung am Kondensator erzeugt.
Was das "Weiterreichen von binärem Maschinencode" betrifft, so muss der Prozessor typischerweise jeden Befehl aus dem Speicher in ein lokales Register holen, um ihn auszuführen. Aber das führt zu einer ganz neuen Frage...
Spannungen werden nicht nur "im Kopf" umgewandelt - so etwas wie eine CRT variiert die Intensität des Strahls basierend auf einer empfangenen Spannung. Computer mit CRT-Schnittstellen enthalten Schaltkreise zum Erzeugen von Synchronisationssignalen, die einen Monitor veranlassen, seinen Strahl in einem vorhersagbaren Muster zu bewegen, sowie Schaltkreise zum Variieren des Strahlhelligkeitssignals zu verschiedenen Zeiten relativ zu seinen ausgegebenen Synchronisationssignalen, um ein Bild zu erzeugen .
@supercat, aber die Intensität oder Position eines Strahls in einer CRT ist keine '1' oder '0' ... es ist immer noch eine physikalische Größe. Mein Punkt ist, dass binäre Ziffern eine Abstraktion sind, die nur in unserem Kopf existiert. In der realen Welt gibt es nur Spannungen, Ströme, Schalterstellungen, Motordrehzahlen, CRT-Strahlen usw.
@ThePhoton: Wenn die Spannungen dazu führen, dass eine CRT in Form von "1" oder "0" aufleuchtet oder der Hammer eines Daisy-Wheel-Druckers schlägt, wenn das Blütenblatt "1" oder "0" drin ist davor usw. Ich würde sagen, diese Spannungen wurden in sehr konkrete "Einsen" und "Nullen" umgewandelt, zumal in Ermangelung irgendeiner Form von E / A (sei es eine CRT, LCD, Drucker, Lichter, Piepser, Messgerät usw.), gäbe es für einen Menschen keine Möglichkeit zu wissen, wie hoch die Spannungen waren, und somit keine Möglichkeit, "Einsen" und "Nullen" wahrzunehmen.
Mein Standpunkt ist, dass Formen auf einem Bildschirm oder auf einem Blatt Papier nur Lichter oder Tintenkleckse sind, bis unser Verstand sie als Eins oder Null interpretiert. Stellen Sie sich einen Buchstaben vor, der in einem Alphabet gedruckt ist, das Sie nicht kennen (z. B. kyrillisch oder thailändisch). Es ist nur ein Klecks Tinte, bis eine russische oder thailändische Person vorbeikommt, um es zu interpretieren und zu wissen, welchen Klang es darstellt. Aber diese philosophische Unterscheidung bringt uns wahrscheinlich vom Thema ab.

Es findet nicht wirklich eine "Umwandlung" statt. Binäre Einsen und Nullen sind nur eine virtuelle Darstellung der zugrunde liegenden Spannungen. Tatsächlich kann in vielen Systemen eine hohe Spannung 0 bedeuten, während eine niedrige Spannung 1 bedeutet. Es gibt einige Gründe, warum dies so ist, aber wahrscheinlich möchten Sie sich schon früh damit befassen.

Um zu verstehen, was in der Logik passiert, ist es wahrscheinlich am besten, in den Transistor zu schauen. Ein Transistor kann für viele Dinge verwendet werden, aber auf einer einfachen Ebene können Sie ihn wie einen Schalter behandeln. Konzeptionell können Sie es sich wie Ihren Lichtschalter an der Wand vorstellen, aber anstatt durch physisches Bewegen des Schalters gesteuert zu werden, wird es durch die Stromänderung gesteuert. Sie könnten das eingeschaltete Licht als 1 und das ausgeschaltete Licht als 0 behandeln. Jetzt können Sie damit beginnen, diese Schalter in verschiedenen Sätzen zu kombinieren, um verschiedene Logikelemente (wie AND, OR, NOR usw.) zu erstellen.

Ich weiß, dass meine Antwort nicht sehr detailliert ist, aber ich hoffe, sie wird Ihre Frage beantworten. Wenn Sie weitere Erklärungen benötigen, bin ich bereit, weitere Details hinzuzufügen, ich möchte Sie nur nicht überfordern.

Danke an alle für die tollen Antworten!! Würde ich dann vereinfacht gesagt zu Recht annehmen, dass der Mikroprozessor mit einer bestimmten Taktgeschwindigkeit läuft und bei jedem Zyklus einen Befehlssatz (Spannung in Bezug auf Binärwerte?) Durch diese Transistoren sendet, die als Logikgatter fungieren. Und die Transistoren erzeugen dann einen relevanten Ausgang basierend auf der kombinierten Logik (und, oder, NAND usw.)?
Vereinfacht gesagt... ja. Hier gibt es viele Abstraktionsebenen. Es ist schwierig, alles, was hier vor sich geht, in einer einzigen Antwort zu erklären, da viele Abstraktionsebenen erforderlich sind, bevor Sie alles verstehen können. Es kann leicht ein paar Kurse auf College-Niveau dauern, um alles zu lehren. Sie können die Dinge entweder einfach so nehmen, wie sie an der Oberfläche sind, oder sich auf viel Lernen vorbereiten.
Danke @kellenjb, du warst wirklich hilfreich. Ich werde ermutigt, mehr zu lernen!

Die kurze Antwort ist, dass es nicht "konvertiert", die Spannungen sind binär (oder eine Darstellung davon). Genauso wie wenn Sie eine Zahl auf Papier schreiben, sind die Markierungen eine Darstellung der Zahl, oder zählen Sie auf einem Abakus, sind die Steinpositionen eine Darstellung einer Zahl.

Binär ist ein Zahlensystem, genau wie Dezimal (oder Oktal, Hexadezimal usw.)

Während Dezimal (Basis-10) 10 Symbole (0123456789) hat, hat Binär (Basis-2) nur zwei (01)

Die Folge 10 in jeder Basis bedeutet die Basis zur ersten Potenz, also bedeutet 10 dezimal 10 ^ 1 = 10 und binär 2 ^ 1 = 2. Anschließend bedeutet 100 dezimal 10 ^ 2 = 100 und in binär bedeutet es 2^2 = 4. Und so weiter.

Dezimalzahlen mit Elektronik darzustellen wäre möglich, aber kompliziert, also wählten sie Binärzahlen, die durch einfache 0 und 1 (oder Ein/Aus) dargestellt werden können.
Es gab Variationen davon, wie ternäre Systeme (3 Zustände) und natürlich analoge Berechnungen . Vor Transistoren gab es mechanische Lochkartenmaschinen (google weiß viel, einige sehr interessante Lektüre, wenn Sie Zeit haben)
Die frühesten binären Digitalcomputer wurden mit echten Schaltern (elektronischen Relais) hergestellt. Ein Beispiel ist die Zuse Z3 (1941):

Zuse Z3

Danach wurden anstelle von Relais Vakuumröhren verwendet (könnten ohne bewegliche mechanische Teile schneller schalten), die das Schalten anstelle von Relais durchführten. Der ENIAC ist ein Beispiel für einen frühen Computer, der mit Vakuumröhren hergestellt wurde.

Dann kamen in den 60er Jahren Transistoren und bald darauf ICs. Die Transistoren erfüllen dieselbe Funktion wie die Relais/Ventile in früheren Maschinen, waren jedoch viel kleiner, schneller und verbrauchten weniger Strom.

Die eigentliche Theorie hinter der grundlegenden Funktionsweise binärer Computerschaltkreise hat sich überhaupt nicht geändert, genauso wie wir die Art und Weise, wie wir Zahlen in der Mathematik manipulieren, nicht geändert haben - Algorithmen verbessern sich, aber die Grundregeln bleiben gleich.

Wenn Sie also wissen, wie binär funktioniert, und Sie eine einfache Schaltung haben, die entweder eine 1 oder 0 als zwei verschiedene Spannungspegel (z. B. 5 V und 0 V) ​​speichern kann, und andere einfache Schaltungen, die einfache logische Funktionen wie AND und OR ausführen können, dann Sie können sie alle kombinieren, um komplexere Dinge zu tun.
Da all diese binären Schaltungen im Grunde nur Schalter sind, können Sie dasselbe mit allem erreichen, was zwischen zwei Zuständen wechseln kann, wie mechanisch / Relais / Ventil / Transistor /?.

Um ein Beispiel für die binäre Speicherung einer Zahl zu geben, nehmen wir an, wir haben 8 Schalter (welcher Typ sie sind, ist nicht wichtig)
. Eine 1 wird durch 5 V und eine 0 durch 0 V dargestellt.
Wir wollen die Nummer 123 speichern.

Dezimal ist es 123 = (1 x 10^2) + (2 * 10^1) + (3 x 10^0)
Binär ist 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)
Also alle Wir setzen die Schalter 0,1,3,4,5,6 auf 5V und die Schalter 7 und 2 auf 0V. Dies "speichert" die Zahl 123 in Binärform. Diese Einrichtung wird als "Register" bezeichnet.

Wenn Sie mehr darüber wissen möchten, wie die Schalter zu komplexeren Schaltungen kombiniert werden, besorgen Sie sich ein gutes Buch über digitale Logik oder fragen Sie Google.

Diese Seite scheint für den Anfang nicht schlecht zu sein.

Das Programm, das Sie ausführen, verwendet Spannungen, die Einsen und Nullen darstellen. Alles an diesem digitalen Teil sind Spannungen, die entweder nahe an Masse oder nahe an der Versorgungsspannung liegen (in Ihrem Beispiel 5 V). Wenn Sie ein Prozessorregister mit 0xFF laden, können Sie sagen, dass Sie irgendwo im Chip 8 separate 5-Volt-Signale erzeugen. Wenn Sie diesen Registerwert dann in einem Steuerregister speichern, das sich auf die Ausgangsports bezieht, bewirken die Ausgangspins am Gerät, dass die 5-V-Signale im Prozessorregister dann andere 5-V-Signale erzeugen, die mit den externen Pins des Geräts verbunden sind .

Die Spannungen sind nur eine Möglichkeit, die Binärzahl darzustellen. Es ist eine ziemlich effiziente und praktische Umwandlung, die es ermöglicht, binäre Logik mit verschiedenen Transistorkonfigurationen zu implementieren.

Die Art und Weise, wie binäre Logik normalerweise elektronisch implementiert wird, ist die Verwendung der CMOS-Technologie ( http://en.wikipedia.org/wiki/CMOS ), bei der zwei MOS-Transistoren in einem komplementären Paar angeordnet sind, um ein CMOS-Gate zu bilden. Es gibt jedoch andere elektronische Implementierungen der binären Logik, die beispielsweise TTL ( http://en.wikipedia.org/wiki/Transistor –transistor_logic ) oder Relais verwenden. Aber Sie könnten wirklich alles verwenden, Papier, Roboterziegen aus Papier: http://www.robives.com/category/product_tags/logic_goats . Die elektronische CMOS-Implementierung ist einfach effizient und praktisch.

Aus diesen einfachen CMOS-Gattern können Sie kompliziertere Logikgatter bauen: NAND und NOR, wobei das Standardgatter NICHT ist, sind die grundlegenden. Daraus können Sie alles aufbauen, was binäre Logik ist, einen Addierer, eine Registerdatei, einen Speicher. Daraus kann man eine ALU bauen, bis hin zu einem kompletten Mikroprozessor.

Wenn Sie weitere Informationen wünschen, können Sie ein Buch über digitale Logik lesen, das ich zufällig besitze und das dieses mag:

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

Eine nette praktische Methode, um zu verstehen, wie eine CPU aufgebaut ist, besteht darin, selbst eine zu bauen, indem man VHDL und ein FPGA verwendet. Sie können günstige FPGA-Entwicklungsboards erhalten und die Software ist normalerweise kostenlos (für eine eingeschränkte Lizenz). Ich habe ein paar von Digilent, die recht erschwinglich sind:

http://www.digilentinc.com/

Einfach ausgedrückt, in einem bestimmten Bereich (normalerweise von 5 bis 12 Volt) ist das höchstwertige Bit in der ersten Hälfte dieses Bereichs 0 und in der anderen 1. Das nächsthöchstwertige Bit wird berechnet, indem diese Hälfte weiter durch zwei geteilt wird und so weiter, bis alle Bits berechnet wurden.

Daher geht es bei binär nur darum, Spannungen zu erhöhen und zu verringern, die periodisch gemessen werden.

Hier ist ein vereinfachtes Beispiel. Lassen Sie uns im Bereich von 1 V bis 256 V (analog) 137 mit Pseudocode in binär (numerisch) übersetzen:

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