Jak wykonać 1-bitowy stały obwód pamięci?

13

Chciałbym stworzyć prosty obwód do przechowywania lub zapisywania 1 bitu danych. Obwód powinien być w stanie zapamiętać stan diody LED (włączony lub wyłączony), nawet jeśli zasilanie zostanie odłączone od obwodu. Potrzebuję go do pracy jak dysk twardy, pamięć flash lub karta pamięci SD telefonów komórkowych.

Zrobiłem obwód, jak pokazano na rysunku, wyjście to dioda LED szeregowo z rezystorem 470 Ω. Używam dwóch przycisków przepustowych do ładowania lub rozładowywania kondensatora, aby dioda wyjściowa była włączona lub wyłączona.

Po odłączeniu zasilania lub wyłączeniu prądu obwód mógł zapamiętać stan diody LED przez kilka minut.

Po 2 lub 3 minutach kondensator całkowicie się rozładował, a obwód utracił dane.

wprowadź opis zdjęcia tutaj Jak zatrzymać rozładowanie kondensatora? lub jak mogę spowolnić tempo rozładowywania, aby obwód stracił dane po tygodniu lub dłużej?

W tym obwodzie używam 555 jako falownika (nie bramki), ale mogę używać innych układów scalonych, Moim celem jest po prostu stworzenie prostej pamięci stałej.

Michael George
źródło
1
Jak bardzo nie lubisz używać komórek na monety? Nie ma możliwości skopiowania komórki EEPROM / flash / FRAM na poziomie makro.
Ignacio Vazquez-Abrams
8
@ IgnacioVazquez-Abrams Możesz użyć przekaźnika zatrzaskowego ...
helloworld922
2
@MichaelGeorge: Nie, cały sens przekaźnika zatrzaskowego polega na tym, że wykorzystuje on magnes stały, aby zachować swój stan bez zastosowania zewnętrznego źródła zasilania. Potrzebujesz tylko impulsu prądu, aby zmienić jego stan.
Dave Tweed
6
Możesz uzyskać kondensator, który utrzyma ładunek przez tydzień, zachowując
pjc50
3
Dotyczące rozładowania kondensatora: mogą utrzymać napięcie przez DŁUGI czas, jeśli zostaną prawidłowo odłączone. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Odpowiedzi:

29

Oryginalna elektroniczna pamięć nieulotna oparta jest na rdzeniach ferrytowych. Podczas gdy magnesowanie takiego rdzenia w jednym lub drugim kierunku jest względnie łatwe do zapisania jednego lub zera, wymaga jednak dość wyrafinowanego zespołu obwodów, aby niezawodnie go odczytać.

Nowoczesne, nielotne układy scalone polegają na przechowywaniu ładunku, ale aby to zadziałało, musisz być w stanie stworzyć kondensator, który ma zasadniczo zerowy wyciek, i sposób na odczyt tego ładunku. Można to zrobić tylko w kontekście mikroelektroniki, w której kondensator jest małym kawałkiem metalu („pływającą bramą”), który jest całkowicie zamknięty w szkle (dwutlenek krzemu) i jest odczytywany poprzez wpływ na pobliski tranzystor .

Innym wyborem jest ferrorelektric RAM (FRAM), który wykorzystuje specjalny materiał dielektryczny, który ma dwa wyraźne, stabilne stany polaryzacji. Ponownie działa to tylko w mikroelektronice.

Dlatego musisz wybrać jakieś inne zjawisko fizyczne, aby zapisać swoją odrobinę informacji. Jednym oczywistym wyborem jest przekaźnik zatrzaskowy, który przechowuje informacje w fizycznym położeniu twornika, który jest utrzymywany w jednym z dwóch stabilnych położeń za pomocą magnesu stałego lub sprężyny. Pozycję można zmienić poprzez zastosowanie stosunkowo krótkiego impulsu prądu, a odczyt jest osiągnięty poprzez podłączenie styków elektrycznych do zwory.

Dave Tweed
źródło
Ponieważ masz tylko jeden rdzeń, czy nie możesz go odczytać za pomocą czujnika Halla lub czegoś takiego?
user253751,
1
@immibis: Niełatwo. Pole magnetyczne jest prawie całkowicie zamknięte w samym rdzeniu, z bardzo niewielkim wyciekiem zewnętrznym.
Dave Tweed
8

Wykonaj obwód, który porusza mechanicznym przełącznikiem, np. bezużyteczne pudełko. Obwód musiałby zostać zasilony, aby zmienić / odczytać stan, ale utrzymałby go pomiędzy.

JamesRyan
źródło
6

Prostym rozwiązaniem byłby mikrokontroler, taki jak PIC12F635, który jest dostępny w 8-stykowym mikroprzełączniku DIP lub mniejszym, i ma wbudowany zegar i obwód resetowania wyłącznika zasilania (ten ostatni jest ważny dla zachowania integralności nieulotnej pamięci EEPROM przechowywanie).

Wymagany kod to niewiele, dobry projekt początkowy.

Jedyne wymagane części zewnętrzne to kondensator obejściowy i opornik ograniczający prąd dla diody LED.

Najprostszym rozwiązaniem jest prawdopodobnie 2-cewkowy przekaźnik zatrzaskowy.

Spehro Pefhany
źródło
6

Czysta elektronika nie stworzy trwałej komórki pamięci, ale ładunek w kondensatorze może do niej podejść (będzie wymagał regularnego odświeżania). Pamięć EEPROM / Flash przedłuża ten wymóg do 10 lat, więc dla celów praktycznych nazywa się to stałym. Ale nie jest to coś, co można osiągnąć za pomocą zwykłych komponentów.

Prawdziwa pamięć permanentna wykorzystuje jakieś fizyczne zjawisko bistabilne. Magnetyzacja rdzeni ferrytowych wymienionych przez Dave'a była szeroko stosowana (czy kiedykolwiek słyszałeś o „zrzutzie rdzenia”?). Dwustabilny (lub zatrzaskowy) przekaźnik wspomniany przez helloworld922 jest łatwiejszy w użyciu.

Kiedy patrzysz na to, jak to robiono we wczesnych komputerach, musisz zdać sobie sprawę z tego, że istnieje równowaga między złożonością pojedynczej komórki a złożonością obwodu sterującego. Rdzeń ferrytowy jest bardzo prosty, ale obwód sterujący, a zwłaszcza odczytowy, jest bardzo złożony. W przypadku przekaźnika bistabilnego jest odwrotnie: przekaźnik jest dość złożony na bit, ale obwód sterujący jest bardzo prosty.

Jaki jest Twój cel?

  • Jeśli chcesz zrobić jedną komórkę tylko dla zabawy, użyj przekaźnika bistabilnego.

  • Jeśli chcesz zademonstrować, jak to się robi w praktyce (DRAM / Flash) bez praktycznego zastosowania, użyj ładunku przechowywanego w kondensatorze i regularnie go odświeżaj.

  • Jeśli chcesz zrobić coś praktycznego, użyj małego mikrokontrolera, który ma wbudowaną pamięć EEPROM (lub może samodzielnie zaprogramować swój FLASH).

Wouter van Ooijen
źródło
5

Bezpiecznik. Częsta wymiana może być denerwująca, abyś mógł przejść na wyłącznik.

William Price
źródło
5
To trochę za mało jak na odpowiedź na EE.SE. Proszę opracować.
Nick Alexeev
2
Więc ... domyślnie pojawia się 1 (prąd przejdzie), aby ustawić na zero, wysyłasz prąd przez bezpiecznik, aby go wysadzić, teraz prąd nie przejdzie, aby ustawić ponownie na 1, zamieniasz bezpiecznik?
Michael
1
Podoba mi się myślenie „po wyjęciu z pudełka”. Naciśnięcie przycisku w celu wyłączenia diody LED powoduje zadziałanie wyłącznika. Naciśnięcie przycisku w celu włączenia diody LED resetuje wyłącznik. To tylko dziwna wersja przekaźnika zatrzaskowego. Prawdopodobnie nie najlepsza opcja, ale nadal lubię kreatywność.
MichaelS
1
Mówiłem po prostu o tym, jak działały wczesne urządzenia ROM. Były szeregiem bezpieczników. Rozwal bezpieczniki tam, gdzie chcesz zer. Nie sądziłem, że będzie to wymagało głębszego wglądu. Bardzo stara szkoła.
William Price,
3

Praktyczne rozwiązanie:

Przekaźnik zatrzaskowy wspomniany przez @DaveTweed jest najprostszy.

Jeśli chcesz solidne rozwiązanie państwo może użyć interfejsu równoległego pamięci IC jak tej rzeczy . Możesz po prostu powiązać linie adresu ze stałym adresem i użyć tylko jednej z linii danych. Będziesz potrzebował dodatkowej logiki kleju.

Ciekawe rozwiązanie:

Jeśli szukasz projektu demonstrującego pamięć, możesz użyć solenoidu z jakimś rdzeniem histeretycznym. Nasycić rdzeń w jednym kierunku, aby zapisać 1, nasycić go w drugim kierunku, aby zapisać 0. To zajmuje się zapisem.

Następnie zamontuj go tuż nad czujnikiem, takim jak czujnik Halla . Następnie możesz spojrzeć na polaryzację pozostałego pola za pomocą czujnika Halla (tylko komparator analogowy), aby określić stan.

Houston Fortney
źródło
3

Z odpowiedzi bezpiecznika / wyłącznika podanej przez Williama Price'a wynika najbardziej oczywiste rozwiązanie:

Przełącznik.

Weź lampę. Podłącz. Włącz. Odłącz to. Przenieś to na Hawaje. Podłącz.
Włącza się ponownie.

Wyłącz to. Odłącz to. Weź to do domu. Podłącz go.
Pozostaje wyłączony.

Jeśli chcesz, aby komputer włączał / wyłączał diodę LED, nie jest to tak pomocne. Jeśli jednak użyjesz przełącznika przyciskowego i elektromagnesu aktywowanego elektronicznie, możesz wykonać zadanie. Naciśnij przycisk, aby włączyć LED, aktywuje elektrozawór, LED zaświeci się. Naciśnij ponownie, dioda LED zgaśnie. Odłącz go, a przycisk nadal jest mechanicznie ustawiony na włączenie lub wyłączenie.

Jeśli chcesz zachować wyraźną funkcję „to, jeśli zdecydowanie włączone, to zdecydowanie wyłączone” (zamiast przełączania), możesz mieć górny przycisk aktywujący jeden elektromagnes, który naciska na górze przełącznika obrotowego. Następnie dolny przycisk aktywuje drugi elektromagnes, który naciska dolną część przełącznika obrotowego.

Nie mówię, że jest to najlepszy sposób, aby to zrobić, ale jest funkcjonalny.

MichaelS
źródło
1
Wszystko, co zrobiłeś, to opisać, jak zbudować przekaźnik bistabilny, co było jednym z pierwszych zaproponowanych rozwiązań.
Dave Tweed
Druga część, tak, to tylko opis niezgrabnego bistabilnego przekaźnika, który może być przydatny, jeśli chce zbudować własny przekaźnik. Jednak pierwsza część nie jest. Nie wydaje mi się, żeby zgadzało się to z celem pytania (zakładam, że jest zainteresowany nauką elektroniki, a nie budowaniem najprostszego możliwego projektu), ale pojedynczy przełącznik jest prostszym, łatwiejszym projektem niż bity elektroniczne i spełnia wymagania podane w pierwsze kilka zdań.
MichaelS
Być może masz rację, ale nigdy nie będziemy pewni, ponieważ OP nigdy nie wrócił, aby o tym dyskutować - chociaż „zaakceptował” moją odpowiedź. Zinterpretowałem ogólną intencję pytania, odnosząc się do elektronicznie zapisywalnej pamięci, w oparciu o „Obwód powinien być w stanie zapamiętać stan diody LED” . Wykluczałoby to pamięć tylko do odczytu (przełączniki, mostki, diody itp.) I pamięć jednokrotnego zapisu (bezpieczniki).
Dave Tweed
Myślę, że stan diody LED jest bezpośrednio związany z tym, który przycisk został naciśnięty jako ostatni. Z logicznego punktu widzenia rejestrowanie stanu przycisków jest identyczne z rejestrowaniem stanu diody LED.
MichaelS
2

Najprostszym rozwiązaniem jednoskładnikowym byłby przekaźnik bistabilny. Aby odczytać stan, potrzebujesz jedynie rezystora.

Bruce
źródło
2

Możesz użyć mikrokontrolera, który ma wbudowaną pamięć EEPROM. 8-bitowy PIC16F84A ma 64 bajty pamięci EEPROM, co jest dobre na zwykle 10 000 000 i co najmniej 1 000 000 zapisów do każdego bajtu (jest to znane jako wytrzymałość bajtów). PIC wybrany w innej odpowiedzi, PIC12F635, ma 128-bajtową pamięć EEPROM i wytrzymałość na bajty wynoszącą 100 000 zapisów. PIC24F16KA102 , procesor 16-bitowy, ma 512 bajtów pamięci EEPROM, a także wytrzymałość bajtowy 100.000 zapisów.

OP nie wskazuje, jak często dioda LED będzie mrugać. Dla celów tej dyskusji załóżmy, że jest to cztery razy na minutę.

Za rok zacznie mrugać

46024365=2,102,400 times.

Ponieważ pamięć EEPROM musi przechwytywać zarówno ostatnie zdarzenia włączenia, jak i wyłączenia, zostanie zapisana do dwukrotności tej liczby lub około 4,2 miliona razy . W ciągu pięciu lat jest to 21 milionów razy.

Oczywiście, przekroczy to specyfikację każdej pamięci EEPROM, którą teraz wbudowałem w mikrokontroler.

Ale jest na to proste rozwiązanie. Zamiast używać tego samego bajtu w kółko do śledzenia statusu włączenia lub wyłączenia, można użyć tablicy bajtów, które wypełniają cały układ.

Potrzebujesz dwóch bajtów dla każdego elementu w tablicy. Tak więc 64-bajtowa pamięć EEPROM, taka jak w PIC16F84A, może pomieścić 32 elementy. Za każdym razem, gdy piszesz do EEPROM, zapisujesz 0 do bajtu stanu (co oznacza, że ​​ten element zawiera dane), albo 0 do bajtu danych (dioda LED była ostatnio wyłączona), albo 0xFF (dioda LED była ostatnio włączona). Następnym razem, gdy uzyskasz dostęp do EEPROM, będziesz indeksować elementy, aż znajdziesz jeden z bajtem statusu 0xFF, a następnie użyjesz tego elementu. Jeśli nie ma już żadnych, ponownie zainicjuj pamięć EEPROM i rozpocznij od nowa (w przypadku niższych PIC oznacza to zapisanie 0xFF do każdego z bajtów statusu; w przypadku PIC24 istnieje polecenie usunięcia całej EEPROM). Jeśli chcesz poznać ostatni status diody LED, indeksuj tablicę jak poprzednio, ale teraz cofnij jeden element i odczytaj bajt danych.

wprowadź opis zdjęcia tutaj

To zasadniczo dzieli liczbę dostępu do jednego bajtu przez współczynnik 16 dla PIC16F84A (16 a nie 32, ponieważ każdy z bajtów statusu jest zapisywany dwukrotnie). Byłby w stanie obsłużyć 16 milionów zapisów łącznie, wystarczający na prawie cztery lata danych. A PIC12F635 z większą pamięcią EEPROM, ale mniejszą wytrzymałością bajtową wynoszącą 100 000, byłby w stanie obsłużyć łącznie 3,2 miliona zapisów, co wystarczy na dziewięć miesięcy.

PIC24F16KA102 z 512-bajtową pamięcią EEPROM i funkcją wymazywania danych byłby w stanie obsłużyć 25,6 miliona zapisów, co wystarczy na ponad pięć lat.

Jeśli szybkość migania wynosiła tylko cztery razy na godzinę zamiast czterech razy na minutę , oznacza to w sumie 70 080 zapisów rocznie. Nawet PIC12F635, ze swoją wytrzymałością 100 000 zapisów na bajt, przetrwałby 45 lat!

tcrosley
źródło
Możesz powstrzymać się od pisania w EEPROM do momentu utraty zasilania. Kondensatory powinny przechowywać wystarczającą ilość ładunku, aby utrzymać działanie UC na tyle długo, aby zapisać aktualny stan. Może to znacznie zwiększyć żywotność pamięci EEPROM.
MichaelS
A dlaczego nie użyć wielu bitów na bajt? Pierwszy bajt przechowuje 7 bitów danych zliczających i 1 bit danych LED. Za pierwszym razem, gdy piszesz, ustawiasz bajt na 0000001L, a następnie 0000010L itp. Kiedy osiągnie 1111111L, resetujesz następny bajt na wszystkie zera. Po przejściu do ostatniego bajtu, resetujesz pierwszy bajt na zera. Następnie następną lokalizacją odczytu jest pierwszy bajt, którego 7 najwyższych bitów to 0 <7-bitowych <= 127, a następna lokalizacja zapisu to pierwszy bajt z 7-bitowymi <127. Teraz prawie podwoiłeś liczbę dostępów, ponieważ (prawie ) każdy zapis ma miejsce w jednym bajcie zamiast dwóch.
MichaelS
@MichaelS Też o tym myślałem. Po pierwsze, nie możesz przejść z 11111110 na 11111101, ponieważ nie możesz pisać 1-ów (odwróciłem twój warunek początkowy). Zamiast tego zapisywałbyś 0, jeden po drugim, przez bajt. Ale tak naprawdę nie przynosi to żadnego pożytku, jeśli chodzi o ograniczenie liczby zapisów na bajt - w końcu musisz pisać do każdego bajtu osiem razy zamiast jednego.
tcrosley,
Nie korzystałem dokładnie z tych urządzeń PIC, ale rozumiem, że usuwasz wszystkie dane, a następnie zmieniasz wszystkie bity, które nie powinny być od razu domyślne. Więc jeśli „wymazane” oznacza wszystkie 1, to skasujesz wszystko i zmienisz bity 1-6 i ewentualnie L. Następnie skasujesz wszystko i zmienisz bity 1-5, 7, ewentualnie L. Pod koniec liczenia , zmieniłbyś tylko kilka bitów (1110110L -> 1110111L zmienia tylko bit 4 i L). Ponieważ istnieje 50% szansy na kasowanie i 50% na zapis, dla danego bitu, który ma zostać skasowany, jest to średnio 100% lub 8 bitów na cykl kasowania / zapisu.
MichaelS
W przypadku tej metody cały bajt stanu jest usuwany na jakiś czas przed użyciem, a następnie ustawiany na zero przy użyciu lub 16 bitów na cykl kasowania / zapisu. Jednocześnie cały bajt danych ma 50% szansy na kasowanie, 50% szansy na zapis lub średnio 8 bitów na cykl kasowania / zapisu. Suma wynosi wtedy 24 bity na cykl. Nawet jeśli założymy, że każdy cykl kasowania / zapisu jest równoważny na bajt, nadal zmieniają się dwa bajty zamiast jednego. (Nie mogę edytować powyższego komentarza, miałem na myśli 50/50, aby dany bit został zmieniony , a nie usunięty, w ostatnim zdaniu.)
MichaelS
2

To może być bardzo naiwna sugestia ... ale co powiesz na zbudowanie zatrzasku tranzystorowego o niskiej mocy napędzanego baterią guzikową . Następnie wykorzystaj jego moc wyjściową do zasilenia wzmacniacza operacyjnego napędzanego przez zasilacz . W ten sposób rozładowujesz baterię przycisku wysiłku dostarczania użytecznej mocy wyjściowej; i tak nie możesz tego użyć, gdy zasilanie jest wyłączone, prawda?

EDYCJA: Również - zgodnie z komentarzem poniżej - wskazane jest, aby zatrzask był izolowany od wzmacniacza operacyjnego, jeśli zasilanie zniknie. Każdy rodzaj przekaźnika - lub równoważnego obwodu - zasilanego z zasilacza powinien być w stanie wykonać tam zadanie.

Biorąc pod uwagę, że prosty zegarek na rękę może być zasilany baterią guzikową przez lata, zasilenie zwykłego zatrzasku powinno dać mu żywotność na baterię, która trwa dekadę. Możesz nawet umieścić dwie baterie równolegle, aby móc je wymienić - jedną na raz - bez utraty informacji.

MichaelK
źródło
Dostępnych jest tylko kilka wzmacniaczy operacyjnych, które pozwalają na napięcie na wejściu wyższe niż napięcie zasilania, co miałoby miejsce podczas wyłączania.
Arsenał
Jeśli tak jest, to czy nie ma sposobu na odcięcie wejścia do wzmacniacza operacyjnego, jeśli zasilanie zniknie, zasadniczo izolując zatrzask? Jakikolwiek przekaźnik - lub równoważny obwód - rozwiązałby problem, prawda?
MichaelK
0

Mały CPLD można zaprogramować do sterowania protokołem potrzebnym do zapisania prostego zestawu wartości na szynie I2C.

NXP tworzy szereg bardzo małych pamięci, które mają zastąpić przełączniki DIP, np. PCA8550 / PCA9561.

Po połączeniu tych dwóch elementów masz bardzo mały przełącznik półprzewodnikowy, który pamięta jego stan.

Jason Morgan
źródło