Ich möchte eine einfache Schaltung zum Speichern oder Speichern von 1 Datenbit erstellen. Die Schaltung sollte in der Lage sein, sich den Zustand einer LED (an oder aus) zu merken, auch wenn die Versorgung von der Schaltung getrennt ist. Ich brauche es, um wie eine Festplatte, ein Flash-Speicher oder eine SD-Speicherkarte von Mobiltelefonen zu funktionieren.
Ich habe eine Schaltung wie im Bild gezeigt, Der Ausgang ist eine LED in Reihe mit einem 470-Ohm-Widerstand. Ich verwende zwei Buschtasten, um den Kondensator zu laden oder zu entladen, damit die Ausgangs-LED ein- oder ausgeschaltet ist.
Nach dem Trennen der Versorgung oder dem Ausschalten des Stroms konnte sich die Schaltung den Zustand der LED für einige Minuten merken.
Nach 2 oder 3 Minuten war der Kondensator vollständig entladen und die Schaltung verlor ihre Daten.
Wie kann ich verhindern, dass sich der Kondensator entlädt? oder wie kann ich die Entladerate verlangsamen, so dass die Schaltung nach einer Woche oder länger ihre Daten verliert?
In dieser Schaltung verwende ich 555 als Inverter (nicht als Gate), aber ich kann andere ICs verwenden. Mein Ziel ist es, nur einen einfachen permanenten Speicher zu erstellen.
Der ursprüngliche elektronische nichtflüchtige Speicher basiert auf Ferritkernen. Während es relativ einfach ist, einen solchen Kern in die eine oder andere Richtung zu magnetisieren, um eine Eins oder eine Null zu speichern, sind einige ziemlich ausgeklügelte Schaltkreise erforderlich, um sie zuverlässig zurückzulesen.
Moderne nichtflüchtige Chips sind auf Ladungsspeicherung angewiesen, aber damit dies funktioniert, müssen Sie in der Lage sein, einen Kondensator zu schaffen, der im Wesentlichen keine Leckage aufweist, und eine Möglichkeit, diese Ladung auszulesen. Dies ist nur im Rahmen der Mikroelektronik möglich, wo der Kondensator ein winziges Stück Metall ist (das "schwebende Gate"), das vollständig in Glas (Siliziumdioxid) eingeschlossen ist und durch seinen Einfluss auf einen nahe gelegenen Transistor ausgelesen wird .
Eine andere Wahl ist ferroelektrischer 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 offensichtliche Wahl ist das Stromstoßrelais, das Informationen in der physikalischen 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.
Machen Sie eine Schaltung, die einen mechanischen Schalter umlegt, z. nutzlose Kiste. Die Schaltung müsste eingeschaltet werden, um den Zustand zu ändern / zu lesen, aber sie würde ihn dazwischen halten.
Reine Elektronik stellt keine permanente Speicherzelle her, aber die Ladung in einem Kondensator kann sich ihr annähern (muss regelmäßig aufgefrischt werden). EEPROM/Flash-Speicher erweitert diese Anforderung auf 10 Jahre, daher wird er für praktische Zwecke als permanent bezeichnet. Aber das ist nicht etwas, was Sie mit gewöhnlichen Komponenten erreichen können.
Ein echter permanenter Speicher verwendet eine Art physikalisches bistabiles Phänomen. Die von Dave erwähnte Magnetisierung von Ferritkernen wurde ausgiebig verwendet (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 es ein Gleichgewicht zwischen der Komplexität der einzelnen Zelle und der Komplexität der Treiberschaltung gibt. Ein Ferritkern ist sehr einfach, aber die Ansteuerung und insbesondere die Ausleseschaltung ist sehr komplex. Bei einem bistabilen Relais ist es umgekehrt: 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 zeigen möchten, wie es in der Praxis (DRAM/Flash) funktioniert, ohne praktisch zu sein, verwenden Sie eine in einem Kondensator gespeicherte Ladung und aktualisieren Sie sie regelmäßig.
Wenn Sie etwas Praktisches machen wollen, verwenden Sie einen kleinen Mikrocontroller mit eingebautem EEPROM (oder kann sein FLASH selbst programmieren).
Eine Sicherung. Es kann lästig sein, es oft auszutauschen, also könnten Sie auf einen Unterbrecher aufrüsten.
Eine einfache Lösung wäre ein Mikrocontroller wie ein PIC12F635 , der in einem 8-Pin-DIP oder kleiner erhältlich ist und über eine eingebaute Uhr und eine Brown-Out-Reset-Schaltung verfügt (letztere ist wichtig, um die Integrität des nichtflüchtigen EEPROM aufrechtzuerhalten Lagerung).
Der erforderliche Code ist nicht viel, ein gutes Starterprojekt.
Die einzigen erforderlichen externen Teile wären ein Überbrückungskondensator und ein Strombegrenzungswiderstand für die LED.
Die einfachste Lösung ist wohl ein 2-Spulen-Signalrelais.
Ein Verriegelungsrelais, wie von @DaveTweed erwähnt, ist das einfachste.
Wenn Sie eine Solid-State-Lösung wünschen, können Sie einen Speicher-IC mit paralleler Schnittstelle wie dieses Ding verwenden . Sie können die Adressleitungen einfach an eine feste Adresse binden und nur eine der Datenleitungen verwenden. Sie benötigen zusätzliche Klebelogik.
Wenn Sie nach einem Projekt suchen, um den Speicher zu demonstrieren, können Sie eine Magnetspule mit einem hysteretischen Kern verwenden. Sättigen Sie den Kern in einer Richtung, um eine 1 zu speichern, sättigen Sie ihn in der anderen Richtung, um eine 0 zu speichern. Das kümmert sich um Schreibvorgänge.
Montieren Sie das dann direkt über einem Sensor wie diesem Hallsensor . Dann können Sie mit dem Hallsensor (nur ein analoger Komparator) die Polarität des remanenten Feldes betrachten, um den Zustand zu bestimmen.
Aus der Antwort von William Price auf Sicherung/Unterbrecher ergab sich die naheliegendste Lösung:
Ein Schalter.
Nimm eine Lampe. Schließen Sie es an. Schalten Sie es ein. Steck es aus. Bewegen Sie es nach Hawaii. Schließen Sie es an.
Es schaltet sich wieder ein.
Schalte es aus. Steck es aus. Nimm es mit nach Hause. Stecken Sie es ein.
Es bleibt ausgeschaltet.
Wenn Sie möchten, dass ein Computer die LED aktiviert / deaktiviert, ist dies nicht so hilfreich. Wenn Sie jedoch einen Druckknopf-Kippschalter und ein elektronisch aktiviertes Solenoid verwenden, könnten Sie die Arbeit erledigen. Drücken Sie die Taste, um die LED einzuschalten, sie aktiviert das Solenoid, die LED schaltet sich ein. Nochmals drücken, LED erlischt. Trennen Sie es, und die Taste ist immer noch mechanisch auf Ein oder Aus eingestellt.
Wenn Sie die explizite Funktion „dies, wenn definitiv an, das ist definitiv aus“ (anstelle eines Umschalters) beibehalten möchten, können Sie mit der oberen Taste einen Magneten aktivieren, der auf die Oberseite eines Kippschalters drückt. Dann aktiviert die untere Taste ein zweites Solenoid, das die Unterseite des Kippschalters drückt.
Ich sage nicht, dass dies der beste Weg ist, es zu tun, aber es ist funktional.
Die einfachste Einkomponentenlösung wäre ein bistabiles Relais. Und Sie brauchen nur einen Widerstand, um den Zustand zu lesen.
Sie könnten einen Mikrocontroller mit eingebautem EEPROM verwenden. Der 8-Bit- PIC16F84A verfügt über 64 Bytes EEPROM, was für typischerweise 10.000.000 und mindestens 1.000.000 Schreibvorgänge auf jedes Byte gut ist (dies wird als Byte-Ausdauer bezeichnet). Der in einer anderen Antwort gewählte PIC, PIC12F635, hat ein 128-Byte-EEPROM und eine Byte-Ausdauer von 100.000 Schreibvorgängen. Der PIC24F16KA102 , ein 16-Bit-Prozessor, hat 512 Byte EEPROM und auch eine Byte-Ausdauer von 100.000 Schreibvorgängen.
Das OP zeigt nicht an, wie oft die LED blinkt. Nehmen wir zum Zwecke dieser Diskussion an, dass es viermal pro Minute ist.
In einem Jahr wird es blinken
Da das EEPROM sowohl die letzten Ein- als auch Aus-Ereignisse erfassen muss, wird es auf die doppelte Anzahl oder etwa 4,2 Millionen Mal geschrieben . In fünf Jahren ist dies 21 Millionen Mal.
Dies übertrifft eindeutig die Spezifikationen jedes EEPROMs, das ich jetzt in einen Mikrocontroller eingebaut habe.
Aber dafür gibt es eine einfache Lösung. Anstatt immer wieder dasselbe Byte zu verwenden, um den Ein- oder Aus-Status zu verfolgen, kann man ein Array von Bytes verwenden, die den gesamten Chip füllen.
Sie benötigen zwei Bytes für jedes Element im Array. Ein 64-Byte-EEPROM, wie das im PIC16F84A, könnte also 32 Elemente enthalten. Jedes Mal, wenn Sie in das EEPROM schreiben, schreiben Sie eine 0 in das Statusbyte (was bedeutet, dass dieses Element Daten enthält) und entweder eine 0 in das Datenbyte (LED war zuletzt aus) oder ein 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 dann dieses Element. Wenn keine mehr vorhanden sind, initialisieren Sie das EEPROM neu und beginnen Sie von vorne (für die Low-End-PICs bedeutet dies, dass 0xFFs in jedes der Statusbytes geschrieben werden; für den PIC24 gibt es einen Befehl zum Löschen des gesamten EEPROM). Wenn Sie den letzten Status der LED wissen müssen, indizieren Sie das Array wie zuvor, aber gehen Sie jetzt ein Element zurück und lesen Sie das Datenbyte aus.
Dies teilt im Wesentlichen die Anzahl der Zugriffe auf ein einzelnes Byte durch den Faktor 16 für den PIC16F84A (16 und nicht 32, weil jedes der Statusbytes zweimal beschrieben wird). Es wäre also in der Lage, insgesamt 16 Millionen Schreibvorgänge zu verarbeiten, genug für fast vier Jahre Daten. Und der PIC12F635 mit seinem größeren EEPROM, aber einer kleineren Byte-Ausdauer von 100 K könnte insgesamt 3,2 Millionen Schreibvorgänge verarbeiten, genug für neun Monate.
Der PIC24F16KA102 mit seinem 512-Byte-EEPROM und der Bulk-Erase-Funktion könnte 25,6 Millionen Schreibvorgänge verarbeiten, genug für über fünf Jahre.
Wenn die Blinkfrequenz statt viermal pro Minute nur noch viermal pro Stunde betrug , dann bedeutet dies insgesamt 70.080 Schreibvorgänge pro Jahr. Selbst der PIC12F635 würde mit seiner Ausdauer von 100.000 Schreibvorgängen pro Byte 45 Jahre halten!
Dies mag ein sehr naiver Vorschlag sein ... aber wie wäre es , wenn Sie einen Transistor-Latch mit niedriger Leistung bauen, der von einer Knopfbatterie angetrieben wird ? Verwenden Sie dann den Ausgang davon, um in einen OP-Verstärker einzuspeisen, der von der Stromversorgung angesteuert wird . So entlasten Sie die Knopfbatterie von der Belastung, die Nutzleistung zu speisen; Sie können das sowieso nicht verwenden, während die Versorgung abgeschaltet ist, oder?
BEARBEITEN: Außerdem ist es - laut Kommentar unten - ratsam, es so zu machen, dass der Latch vom OP-Verstärker isoliert ist, wenn die Versorgung unterbrochen wird. Jede Art von Relais - oder äquivalenter Schaltung - die von der Versorgung gespeist wird, sollte in der Lage sein, dort die Arbeit zu erledigen.
Wenn man bedenkt, dass eine einfache Armbanduhr jahrelang mit einer Knopfbatterie betrieben werden kann, sollte die Stromversorgung eines einfachen Riegels ihr eine Lebensdauer pro Batterie von einem Jahrzehnt geben. Sie können sogar zwei Batterien parallel schalten, um sie einzeln auszutauschen, ohne die Informationen zu verlieren.
Ein kleines CPLD kann so programmiert werden, dass es das Protokoll steuert, das zum Schreiben eines einfachen Wertesatzes auf einen I2C-Bus erforderlich ist.
NXP stellt eine Reihe sehr kleiner Speicher her, die Dip-Schalter ersetzen sollen, z. B. PCA8550 / PCA9561.
Kombinieren Sie die beiden und Sie haben einen sehr kleinen Halbleiterschalter, der sich an seinen Zustand erinnert.
Ignacio Vazquez-Abrams
hallowelt922
Michael Georg
Ignacio Vazquez-Abrams
David Tweed
pjc50
FarO
David Tweed