Wie erstelle ich eine permanente 1-Bit-Speicherschaltung?


13

Ich möchte eine einfache Schaltung zum Speichern oder Speichern von 1 Bit Daten erstellen. Der Stromkreis sollte in der Lage sein, sich an den Zustand einer LED zu erinnern (Ein oder Aus), auch wenn die Stromversorgung vom Stromkreis getrennt ist. Ich brauche es, um wie eine Festplatte, ein Flash-Speicher oder eine SD-Speicherkarte von Handys zu funktionieren.

Ich habe eine Schaltung wie im Bild gezeigt, Der Ausgang ist eine LED in Reihe mit 470 Ohm Widerstand. Ich benutze zwei Buschknöpfe, um den Kondensator zu laden oder zu entladen, so dass die Ausgangs-LED an oder aus ist.

Nach dem Trennen der Stromversorgung oder Ausschalten der Stromversorgung konnte sich der Stromkreis einige Minuten lang an den Zustand der LED erinnern.

Nach 2 oder 3 Minuten hat sich der Kondensator vollständig entladen und der Stromkreis hat seine Daten verloren.

Bildbeschreibung hier eingeben Wie kann ich verhindern, dass sich der Kondensator entlädt? oder wie kann ich die Entladerate verlangsamen, damit der Stromkreis nach einer Woche oder länger seine Daten verliert?

In dieser Schaltung verwende ich 555 als Inverter (kein Gate), aber ich kann andere ICs verwenden. Mein Ziel ist es, nur einen einfachen permanenten Speicher zu erstellen.


1
Wie abgeneigt sind Sie, eine Knopfzelle zu benutzen? Es gibt keine Möglichkeit, eine EEPROM- / Flash- / FRAM-Zelle auf Makroebene zu duplizieren.
Ignacio Vazquez-Abrams

8
@ IgnacioVazquez-Abrams Sie könnten ein selbsthaltendes Relais verwenden ...
helloworld922

2
@MichaelGeorge: Nein, der springende Punkt bei einem selbsthaltenden Relais ist, dass es einen Permanentmagneten verwendet, um seinen Zustand ohne Anlegen einer externen Energie zu erhalten. Sie brauchen nur einen Stromimpuls, um seinen Zustand zu ändern.
Dave Tweed

6
Durch sorgfältiges Design und sorgfältige Konstruktion kann ein Kondensator eine Woche lang
aufgeladen werden

3
In Bezug auf die Kondensatorentladung: Bei ordnungsgemäßer Trennung können sie die Spannung für eine LANGE Zeit beibehalten. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Antworten:


29

Der ursprüngliche elektronische nichtflüchtige Speicher basiert auf Ferritkernen. Während es relativ einfach ist, einen solchen Kern in die eine oder die andere Richtung zu magnetisieren, um eine Eins oder eine Null zu speichern, ist ein ziemlich ausgefeilter Schaltkreis erforderlich, um ihn zuverlässig zurückzulesen.

Moderne nichtflüchtige Chips sind auf Ladungsspeicher angewiesen. Damit dies funktioniert, müssen Sie jedoch in der Lage sein, einen Kondensator zu erstellen, der im Wesentlichen keine Leckage aufweist, und diese Ladung auszulesen. Dies ist nur in der Mikroelektronik möglich, wo der Kondensator ein winziges Stück Metall (das "Floating Gate") ist, das vollständig in Glas (Siliziumdioxid) eingeschlossen ist und durch seinen Einfluss auf einen nahegelegenen Transistor ausgelesen wird .

Eine andere Wahl ist der ferrorelektrische RAM (FRAM), der ein spezielles dielektrisches Material verwendet, das zwei unterschiedliche, stabile Polarisationszustände aufweist. Auch dies funktioniert nur in der Mikroelektronik.

Daher müssen Sie ein anderes physikalisches Phänomen auswählen, um Ihre Informationen zu speichern. Eine naheliegende Wahl ist das Verriegelungsrelais, das Informationen in der physischen Position seines Ankers speichert, der durch einen Permanentmagneten oder eine Feder in einer von zwei stabilen Positionen gehalten wird. Die Position kann durch Anlegen eines relativ kurzen Stromimpulses geändert werden, und das Auslesen erfolgt durch Anbringen elektrischer Kontakte am Anker.



Da Sie nur einen Kern haben, können Sie ihn nicht mit einem Hall-Effekt-Sensor lesen oder so?
user253751

1
@immibis: Nicht so einfach. Das Magnetfeld ist fast vollständig im Kern selbst enthalten, mit sehr geringer äußerer Leckage.
Dave Tweed

8

Stellen Sie eine Schaltung her, die einen mechanischen Schalter betätigt, z. nutzlose Box. Die Schaltung müsste eingeschaltet werden, um den Status zu ändern / zu lesen, aber sie würde dazwischen bleiben.


6

Eine einfache Lösung wäre ein Mikrocontroller wie ein PIC12F635, der in einem 8-poligen DIP oder kleiner erhältlich ist und eine integrierte Takt- und Brown-Out-Rücksetzschaltung aufweist (letzteres ist wichtig, um die Integrität des nichtflüchtigen EEPROM aufrechtzuerhalten) Lager).

Der benötigte Code ist nicht viel, ein gutes Startprojekt.

Die einzigen externen Teile, die benötigt werden, wären ein Überbrückungskondensator und ein Strombegrenzungswiderstand für die LED.

Die einfachste Lösung ist wahrscheinlich ein 2-Spulen-Signalsperrrelais.


6

Reine Elektronik macht keine dauerhafte Speicherzelle, aber die Ladung in einem Kondensator kann sich dieser annähern (regelmäßige Auffrischung erforderlich). EEPROM / Flash-Speicher erweitert diese Anforderung auf 10 Jahre, so dass es aus praktischen Gründen als permanent bezeichnet wird. Dies erreichen Sie jedoch nicht mit gewöhnlichen Komponenten.

Das reale permanente Gedächtnis nutzt eine Art physikalisches bistabiles Phänomen. Die von Dave erwähnte Magnetisierung von Ferritkernen wurde ausgiebig genutzt (jemals von einem "Core Dump" gehört?). Das von helloworld922 erwähnte bistabile (oder selbsthaltende) Relais ist einfacher zu verwenden.

Wenn Sie sich ansehen, wie dies in frühen Computern gemacht wurde, müssen Sie erkennen, dass ein Gleichgewicht zwischen der Komplexität der einzelnen Zelle und der Komplexität der Treiberschaltung besteht. Ein Ferritkern ist sehr einfach, aber die Ansteuerung und insbesondere die Ausleseschaltung sind sehr komplex. Bei einem bistabilen Relais ist das Gegenteil der Fall: Das Relais ist pro Bit ziemlich komplex, aber die Steuerschaltung ist sehr einfach.

Was ist dein Zweck?

  • Wenn Sie nur zum Spaß eine Zelle herstellen möchten, verwenden Sie ein bistabiles Relais.

  • Wenn Sie demonstrieren möchten, wie dies in der Praxis (DRAM / Flash) ohne praktikabel zu sein ist, verwenden Sie eine in einem Kondensator gespeicherte Ladung und aktualisieren Sie diese regelmäßig.

  • Wenn Sie etwas praktisches machen möchten, verwenden Sie einen kleinen Mikrocontroller mit eingebautem EEPROM (oder können seinen FLASH selbst programmieren).


5

Eine Sicherung. Ein häufiger Austausch kann ärgerlich sein, sodass Sie auf einen Unterbrecher aufrüsten können.


5
Dies ist ein bisschen dünn für eine Antwort auf EE.SE. Bitte erläutern Sie.
Nick Alexeev

2
Also ... ergibt sich standardmäßig eine 1 (Strom fließt), um auf Null zu setzen, senden Sie einen Stromstoß durch die Sicherung, um sie zu durchbrennen. Jetzt fließt kein Strom mehr, um wieder auf 1 zu setzen, Sie ersetzen die Sicherung?
Michael

1
Ich mag das Out-of-the-Box-Denken hier. Wenn Sie die Taste drücken, um die LED auszuschalten, löst sie den Schutzschalter aus. Wenn Sie die Taste drücken, um die LED einzuschalten, wird der Leistungsschalter zurückgesetzt. Es ist nur eine seltsame Version des selbsthaltenden Relais. Wahrscheinlich nicht die beste Option, aber ich genieße immer noch die Kreativität.
MichaelS

1
Ich bezog mich lediglich auf die Funktionsweise früherer ROM-Geräte. Sie waren eine Reihe von Sicherungen. Löse die Sicherungen, wo du Nullen willst. Ich hätte nicht gedacht, dass es tiefere Einsichten erfordern würde. Sehr altmodisch.
William Price

3

Praktische Lösung:

Ein selbsthaltendes Relais, wie es von @DaveTweed erwähnt wird, ist das einfachste.

Wenn Sie eine Festkörperlösung wünschen, können Sie einen solchen IC mit parallelem Schnittstellenspeicher verwenden . Sie können die Adressleitungen einfach an eine feste Adresse binden und nur eine der Datenleitungen verwenden. Sie benötigen eine zusätzliche Klebelogik.

Interessante Lösung:

Wenn Sie nach einem Projekt suchen, um das Gedächtnis zu demonstrieren, können Sie ein Solenoid mit einem hysteretischen Kern verwenden. Sättigen Sie den Kern in eine Richtung, um eine 1 zu speichern, und in die andere Richtung, um eine 0 zu speichern.

Dann montieren Sie diesen direkt über einem Sensor wie diesem Hallsensor . Dann können Sie die Polarität des remanenten Feldes mit dem Hallsensor (nur ein analoger Komparator) betrachten, um den Zustand zu bestimmen.


3

Aus der Antwort von William Price auf die Frage nach dem Sicherungsautomaten ergab sich die naheliegendste Lösung:

Ein Schalter.

Nimm eine Lampe. Schließen Sie es an. Schalten Sie es ein. Steck es aus. Verschiebe es nach Hawaii. Schließen Sie es an.
Es schaltet sich wieder ein.

Schalte es aus. Steck es aus. Nimm es mit nach Hause. Schließen Sie es an.
Es bleibt aus.

Wenn ein Computer die LED aktivieren / deaktivieren soll, ist dies weniger hilfreich. Wenn Sie jedoch einen Druckknopf-Kippschalter und einen elektronisch aktivierten Elektromagneten verwenden, können Sie die Arbeit erledigen. Drücken Sie die Taste, um die LED einzuschalten. Sie aktiviert das Solenoid. Die LED leuchtet auf. Nochmals drücken, LED erlischt. Ziehen Sie den Stecker heraus und die Taste ist immer noch mechanisch ein- oder ausgeschaltet.

Wenn Sie die explizite Funktion "Dies ist definitiv ein, das ist definitiv aus" beibehalten möchten (anstelle eines Umschalters), können Sie die obere Taste verwenden, um ein Solenoid zu aktivieren, das auf die Oberseite eines Kippschalters drückt. Dann aktiviert der untere Knopf einen zweiten Magneten, der den unteren Teil des Kippschalters drückt.

Nicht zu sagen, dass dies aus der Ferne der beste Weg ist, aber es funktioniert.


1
Alles, was Sie getan haben, ist zu beschreiben, wie Sie ein bistabiles Relais bauen. Dies war eine der ersten vorgeschlagenen Lösungen.
Dave Tweed

Der zweite Teil, ja, ist nur eine Beschreibung eines klobigen bistabilen Relais, vielleicht nützlich, wenn er daran interessiert ist, sein eigenes Relais zu bauen. Der erste Teil ist jedoch nicht. Ich denke nicht, dass es der Absicht der Frage entspricht (ich nehme an, dass er daran interessiert ist, Elektronik zu erlernen, anstatt ein möglichst einfaches Design zu entwickeln), aber ein einziger Kippschalter ist einfacher und einfacher als elektronische Bits und erfüllt die Anforderungen von die ersten paar sätze.
MichaelS

Sie mögen Recht haben, aber wir werden nie sicher sein, da das OP nie zurückgekommen ist, um darüber zu diskutieren - obwohl er meine Antwort "akzeptiert" hat. Ich interpretierte die allgemeine Absicht der Frage, sich auf einen elektronisch wiederbeschreibbaren Speicher zu beziehen, basierend auf "Die Schaltung sollte sich an den Zustand einer LED erinnern können" . Dies würde einen Nur-Lese-Speicher (Schalter, Jumper, Dioden usw.) und einen einmal beschreibbaren Speicher (Sicherungen) ausschließen.
Dave Tweed

Meiner Meinung nach hängt der Zustand der LED direkt davon ab, welche Taste zuletzt gedrückt wurde. Aus logischer Sicht ist das Erfassen des Status der Tasten identisch mit dem Erfassen des Status der LED.
MichaelS

2

Die einfachste Einkomponentenlösung wäre ein bistabiles Relais. Und Sie brauchen nur einen Widerstand, um den Zustand zu lesen.


2

Sie könnten einen Mikrocontroller verwenden, der ein EEPROM eingebaut hat. Der 8-Bit- PIC16F84A verfügt über 64 Byte EEPROM, was normalerweise für 10.000.000 und mindestens 1.000.000 Schreibvorgänge in jedes Byte geeignet ist (dies wird als Bytedauer bezeichnet). Der in einer anderen Antwort gewählte PIC, PIC12F635, hat ein 128-Byte-EEPROM und eine Bytedauer von 100.000 Schreibvorgängen. Der PIC24F16KA102 , ein 16-Bit-Prozessor, verfügt über 512 Byte EEPROM und eine Bytedauer von 100.000 Schreibvorgängen.

Das OP zeigt nicht an, wie oft die LED blinkt. Nehmen wir für die Zwecke dieser Diskussion an, dass es viermal pro Minute ist.

In einem Jahr wird es blinken

46024365=2,102,400 times.

Da das EEPROM sowohl das letzte Ein- als auch das letzte Ausschaltereignis erfassen muss, wird es auf die doppelte Anzahl oder etwa 4,2 Millionen Mal geschrieben . In fünf Jahren sind das 21 Millionen Mal.

Dies wird eindeutig die Spezifikationen aller EEPROMs übertreffen, die ich jetzt in einen Mikrocontroller eingebaut habe.

Dafür gibt es aber eine einfache Lösung. Anstatt immer wieder dasselbe Byte zu verwenden, um den Ein- oder Ausschaltstatus zu verfolgen, kann ein Array von Bytes verwendet werden, das den gesamten Chip ausfüllt.

Sie benötigen zwei Bytes für jedes Element im Array. Ein 64-Byte-EEPROM wie das PIC16F84A kann also 32 Elemente aufnehmen. Jedes Mal, wenn Sie in das EEPROM schreiben, schreiben Sie eine 0 in das Statusbyte (dh dieses Element enthält Daten) und entweder eine 0 in das Datenbyte (LED war zuletzt aus) oder eine 0xFF (LED war zuletzt an). Wenn Sie das nächste Mal auf das EEPROM zugreifen, indizieren Sie die Elemente, bis Sie eines mit einem 0xFF-Statusbyte finden, und verwenden Sie dann dieses Element. Wenn keine mehr vorhanden sind, initialisieren Sie das EEPROM erneut und beginnen Sie von vorne (für die Low-End-PICs bedeutet dies, dass in jedes der Statusbytes 0xFF geschrieben werden; für das PIC24 gibt es einen Befehl zum Löschen des gesamten EEPROM). Wenn Sie den letzten Status der LED kennen müssen, indizieren Sie das Array wie zuvor, gehen aber jetzt ein Element zurück und lesen das Datenbyte aus.

Bildbeschreibung hier eingeben

Dies dividiert im Wesentlichen die Anzahl der Zugriffe auf ein einzelnes Byte durch einen Faktor von 16 für den PIC16F84A (16 und nicht 32, da jedes der Statusbytes zweimal geschrieben wird). Es würde also insgesamt 16 Millionen Schreibvorgänge verarbeiten können, was für fast vier Jahre an Daten ausreicht. Und der PIC12F635 mit seinem größeren EEPROM, aber einer geringeren Bytedauer von 100 KByte könnte insgesamt 3,2 Millionen Schreibvorgänge verarbeiten, was neun Monaten entspricht.

Der PIC24F16KA102 mit seinem 512-Byte-EEPROM und der Bulk-Erase-Funktion könnte 25,6 Millionen Schreibvorgänge verarbeiten, was für mehr als fünf Jahre ausreicht.

Wenn die Blinkrate nur viermal pro Stunde statt viermal pro Minute war , bedeutet dies insgesamt 70.080 Schreibvorgänge pro Jahr. Selbst der PIC12F635 mit einer Lebensdauer von 100.000 Schreibvorgängen pro Byte würde 45 Jahre halten!


Sie können das Schreiben in das EEPROM bis nach einem Stromausfall unterlassen. Die Kondensatoren sollten genügend Ladung speichern, um den uC lange genug laufen zu lassen, um den aktuellen Status zu schreiben. Dies kann die Lebensdauer Ihres EEPROM erheblich verlängern.
MichaelS

Warum nicht auch mehrere Bits pro Byte verwenden? Das erste Byte speichert 7 Bit Zähldaten und 1 Bit LED-Daten. Wenn Sie das erste Mal schreiben, setzen Sie das Byte auf 0000001L, dann auf 0000010L usw. Wenn es 1111111L erreicht, setzen Sie das nächste Byte auf alle Nullen zurück. Nachdem Sie das letzte Byte erreicht haben, setzen Sie das erste Byte auf Nullen zurück. Dann ist Ihr nächster Leseort das erste Byte, dessen oberste 7 Bits 0 <7-Bit <= 127 sind, und der nächste Schreibort ist das erste Byte mit 7-Bit <127. Jetzt haben Sie Ihre Zugriffe fast verdoppelt, weil (fast ) Jeder Schreibvorgang erfolgt auf ein einziges Byte anstatt auf zwei.
MichaelS

@MichaelS Daran habe ich auch gedacht. Erstens können Sie nicht von 11111110 zu 11111101 wechseln, weil Sie keine Einsen schreiben können (ich habe Ihre Ausgangsbedingung umgekehrt). Stattdessen würden Sie die Nullen einzeln über das Byte schreiben. Aber es hilft nicht wirklich, die Anzahl der Schreibvorgänge pro Byte zu begrenzen - am Ende müssen Sie achtmal statt einmal in jedes Byte schreiben.
Tcrosley

Ich habe nicht genau die fraglichen PIC-Geräte verwendet, aber ich verstehe, dass Sie alle Daten löschen und dann alle Bits ändern, die nicht sofort als Standard festgelegt werden sollen. Wenn also "gelöscht" alle Einsen bedeutet, löschen Sie alles und ändern die Bits 1-6 und möglicherweise L. Als Nächstes löschen Sie alles und ändern die Bits 1-5, 7 und möglicherweise L. Gegen Ende der Zählung , Sie würden nur ein paar Bits ändern (1110110L -> 1110111L ändert nur Bit 4 und L). Da die Wahrscheinlichkeit, dass ein bestimmtes Bit gelöscht wird, pro Löschvorgang 50% und pro Schreibvorgang 50% beträgt, beträgt sie durchschnittlich 100% oder 8 Bit pro Lösch- / Schreibzyklus.
MichaelS

Bei Ihrer Methode wird das gesamte Statusbyte einige Zeit vor der Verwendung gelöscht und dann bei Verwendung auf Null gesetzt, oder 16 Bits pro Lösch- / Schreibzyklus. Gleichzeitig hat Ihr gesamtes Datenbyte eine Chance von 50% pro Löschvorgang, eine Chance von 50% pro Schreibvorgang oder einen Durchschnitt von 8 Bits pro Lösch- / Schreibzyklus. Die Summe beträgt dann 24 Bits pro Zyklus. Selbst wenn wir annehmen, dass jeder Lösch- / Schreibzyklus pro Byte äquivalent ist, ändern sich immer noch zwei Bytes anstelle von einem. (Der obige Kommentar kann nicht bearbeitet werden, ich meinte 50/50, damit ein bestimmtes Bit im letzten Satz geändert und nicht gelöscht wird.)
MichaelS

2

Dies mag ein sehr naiver Vorschlag sein ... aber wie wäre es mit dem Bau eines stromsparenden Transistor-Latches, der von einer Knopfbatterie angetrieben wird . Verwenden Sie dann den Ausgang davon, um in einen Operationsverstärker einzuspeisen, der von der Stromversorgung angetrieben wird . Auf diese Weise entladen Sie die Knopfbatterie von der Belastung der Nutzleistung; Sie können das sowieso nicht verwenden, während die Versorgung ausgeschaltet ist, oder?

BEARBEITEN: Es ist auch ratsam, die Verriegelung vom OP-Verstärker zu trennen, wenn die Versorgung unterbrochen wird. Alle Arten von Relais - oder gleichwertigen Schaltkreisen -, die von der Stromversorgung gespeist werden, sollten dort die Arbeit erledigen können.

In Anbetracht der Tatsache, dass eine einfache Armbanduhr jahrelang von einer Knopfbatterie betrieben werden kann, sollte die Stromversorgung eines einfachen Riegels eine Lebensdauer von einem Jahrzehnt pro Batterie ergeben. Sie können sogar zwei Batterien parallel schalten, um sie einzeln auszutauschen, ohne die Informationen zu verlieren.


Es sind nur sehr wenige Operationsverstärker verfügbar, die eine Spannung am Eingang zulassen, die höher ist als die Versorgungsspannung, die beim Abschalten auftreten würde.
Arsenal

Wenn dies der Fall ist, gibt es keine Möglichkeit, den Eingang des Operationsverstärkers auszuschalten, wenn die Versorgung unterbrochen wird, wodurch die Verriegelung im Wesentlichen isoliert wird? Jede Art von Relais - oder äquivalente Schaltung - würde dort den Trick machen, nicht wahr?
MichaelK

0

Eine kleine CPLD kann so programmiert werden, dass sie das Protokoll steuert, das zum Schreiben eines einfachen Satzes von Werten auf einen I2C-Bus erforderlich ist.

NXP stellt eine Reihe sehr kleiner Speicher zur Verfügung, die Dip-Schalter ersetzen sollen, z. B. PCA8550 / PCA9561.

Kombinieren Sie die beiden und Sie haben einen sehr kleinen Festkörperschalter, der sich an seinen Zustand erinnert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.