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.
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.
quelle
Antworten:
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.
quelle
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.
quelle
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.
quelle
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).
quelle
Eine Sicherung. Ein häufiger Austausch kann ärgerlich sein, sodass Sie auf einen Unterbrecher aufrüsten können.
quelle
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.
quelle
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.
quelle
Die einfachste Einkomponentenlösung wäre ein bistabiles Relais. Und Sie brauchen nur einen Widerstand, um den Zustand zu lesen.
quelle
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
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.
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!
quelle
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.
quelle
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.
quelle