1 bit kalıcı bellek devresi nasıl yapılır?


13

1 bit veriyi saklamak veya kaydetmek için basit bir devre yapmak istiyorum. Besleme devreden ayrılmış olsa bile devre bir LED'in durumunu (açık veya kapalı) hatırlayabilmelidir. Cep telefonlarının sabit disk, flash bellek veya SD bellek kartı gibi çalışmasını istiyorum.

Resimde gösterildiği gibi bir devre yaptım, çıkış 470 ohm dirençli seri bir LED. Çıkış LED'inin yanması veya sönmesi için kondansatörü şarj etmek veya boşaltmak için iki burç düğmesi kullanıyorum.

Besleme bağlantısını kestikten veya elektriği kapattıktan sonra, devre birkaç dakika boyunca LED'in durumunu hatırlayabildi.

2 veya 3 dakika sonra kondansatör tamamen boşaldı ve devre verilerini kaybetti.

resim açıklamasını buraya girin Kondansatörün boşalmasını nasıl durdurabilirim? veya bir hafta veya daha fazla bir süre sonra devrenin verilerini kaybetmesi için boşaltma hızını nasıl yavaşlatabilirim?

Bu devrede 555'i bir invertör (geçit değil) olarak kullanıyorum ama başka bir IC'yi kullanabilirim, Amacım sadece basit bir kalıcı bellek yapmak.


1
Bir madeni para hücresini kullanmaktan ne kadar uzaksınız? Bir EEPROM / flash / FRAM hücresini makro düzeyinde çoğaltmanın bir yolu yoktur.
Ignacio Vazquez-Abrams

8
@ IgnacioVazquez-Abrams Mandallama rölesi kullanabilirsiniz ...
helloworld922

2
@MichaelGeorge: Hayır, kilitlemeli bir rölenin tüm amacı, harici güç uygulamadan durumunu korumak için kalıcı bir mıknatıs kullanmasıdır. Durumunu değiştirmek için sadece bir elektrik darbesine ihtiyacınız var.
Dave Tweed

6
Dikkatli bir tasarım ve yapı ile bir hafta boyunca şarjını tutmak için bir kondansatör alabilirsiniz: m.electronicdesign.com/analog/…
pjc50

3
Kondansatör deşarjı ile ilgili olarak: doğru şekilde ayrılırlarsa gerilimi UZUN bir süre koruyabilirler. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Yanıtlar:


29

Orijinal elektronik kalıcı bellek ferrit çekirdeklerine dayanmaktadır. Bir ya da sıfır depolamak için böyle bir çekirdeği bir yönde ya da diğerinde mıknatıslamak nispeten kolay olsa da, güvenilir bir şekilde geri okumak oldukça karmaşık bir devre gerektirir.

Modern uçucu olmayan yongalar şarj deposuna dayanır, ancak bu işi yapmak için esasen sıfır sızıntıya sahip bir kapasitör ve bu yükü okumanın bir yolu yaratmanız gerekir. Bu sadece kapasitörün tamamen cam (silikon dioksit) ile kaplanmış ve yakındaki bir transistör üzerindeki etkisi ile okunan küçük bir metal parçası ("yüzen kapı") olduğu mikroelektronik bağlamında yapılabilir. .

Başka bir seçenek, iki farklı, kararlı polarizasyon durumuna sahip özel bir dielektrik malzeme kullanan ferrorelektrik RAM'dir (FRAM). Yine, bu sadece mikroelektronikte çalışır.

Bu nedenle, biraz bilgi saklamak için başka bir fiziksel fenomen seçmeniz gerekir. Açık bir seçenek, bilgileri sabit bir mıknatıs veya bir yayla iki sabit konumdan birinde tutulan, armatürünün fiziksel konumunda saklayan kilitleme rölesidir. Konum, nispeten kısa bir akım darbesi uygulanarak değiştirilebilir ve okuma, armatüre elektrik kontakları takılarak gerçekleştirilir.



Sadece bir çekirdeğiniz olduğu için onu Hall efekt sensörü veya başka bir şeyle okuyamadınız mı?
user253751

1
@immibis: Kolay değil. Manyetik alan çok az dış sızıntı ile neredeyse tamamen çekirdeğin içinde bulunur.
Dave Tweed

8

Mekanik bir anahtarla hareket eden bir devre yapın, örn. yararsız kutu. Devrenin durumu değiştirmek / okumak için çalıştırılması gerekir, ancak devre arasında kalır.


6

Basit bir çözüm, 8 pimli bir DIP veya daha küçük olan ve yerleşik bir saat ve kahverengi sıfırlama devresine sahip PIC12F635 gibi bir mikro kontrolör olacaktır (ikincisi EEPROM kalıcı olmayan bütünlüğünü korumak için önemlidir depolama).

Gerekli kod fazla değil, iyi bir başlangıç ​​projesi.

Gereken tek harici parçalar bir baypas kondansatörü ve LED için akım sınırlayıcı direnç olacaktır.

En basit çözüm muhtemelen 2-bobinli kilitleme sinyal rölesidir.


6

Saf elektronikler kalıcı bir bellek hücresi oluşturmaz, ancak bir kapasitördeki şarj ona yaklaşabilir (düzenli olarak yenilenmesi gerekir). EEPROM / Flash bellek bu gereksinimi 10'lu yıllara kadar uzatır, bu nedenle pratik amaçlar için kalıcı olarak adlandırılır. Ancak bu, sıradan bileşenlerle ulaştığınız bir şey değildir.

Gerçek kalıcı bellek bir çeşit fiziksel iki kararlı fenomen kullanır. Dave tarafından yönetilen ferrit çekirdeklerin manyetizasyonu yoğun bir şekilde kullanıldı (hiç bir 'çekirdek dökümü' duyuldu mu?). Helloworld922 tarafından belirtilen iki kararlı (veya mandallı) rölenin kullanımı daha kolaydır.

Bunun ilk bilgisayarlarda nasıl yapıldığına baktığınızda, tek hücrenin karmaşıklığı ile sürüş devresinin karmaşıklığı arasında bir denge olduğunu fark etmelisiniz. Bir ferrit çekirdek çok basittir, ancak sürüş ve özellikle okuma devresi çok karmaşıktır. İki kararlı bir röle için tam tersi: röle bit başına oldukça karmaşıktır, ancak kontrol devresi çok basittir.

Amacınız ne?

  • Sadece eğlenmek için bir hücre yapmak istiyorsanız, iki kararlı bir röle kullanın.

  • Pratikte nasıl yapıldığını (DRAM / Flash) pratik yapmadan demo yapmak istiyorsanız, bir kondansatörde depolanan bir şarj kullanın ve düzenli olarak yenileyin.

  • Pratik bir şey yapmak istiyorsanız, yerleşik EEPROM'a sahip küçük bir mikro denetleyici kullanın (veya FLASH'ini kendi kendine programlayabilir).


5

Sigorta. Sık sık değiştirmek sinir bozucu olabilir, böylece bir kesiciye yükseltebilirsiniz.


5
Bu, EE.SE'ye cevap vermek için biraz incedir. Lütfen detaylandırın.
Nick Alexeev

2
Yani ... varsayılan olarak 1 çıkıyor (akım geçecek), sıfıra ayarlamak için, sigortayı atmak için bir akım akımı gönderirsiniz, şimdi akım geçmez, tekrar 1'e ayarlanır, değiştirirsiniz sigorta?
Michael

1
Burada kullanıma hazır düşünmeyi seviyorum. LED'i kapatmak için düğmeye bastığınızda, kesici açılır. LED'i açmak için düğmeye bastığınızda, kesici sıfırlanır. Mandallama rölesinin sadece garip bir versiyonu. Muhtemelen en iyi seçenek değil, ama yine de yaratıcılığın tadını çıkarıyorum.
MichaelS

1
Basitçe erken ROM cihazlarının nasıl çalıştığından bahsediyordum. Bunlar bir dizi sigorta idi. Sıfırları istediğiniz yere sigortaları üfleyin. Daha derin bir kavrayış gerektireceğini düşünmemiştim. Çok eski okul.
William Price

3

Pratik çözüm:

@DaveTweed tarafından belirtildiği gibi bir mandallama rölesi en basit olanıdır.

Bir katı hal çözümü istiyorsanız gibi bir paralel arabirim bellek IC kullanabilirsiniz bu şey . Adres satırlarını sabit bir adrese bağlayabilir ve veri satırlarından yalnızca birini kullanabilirsiniz. Ek tutkal mantığına ihtiyacınız olacak.

İlginç Çözüm:

Hafızayı göstermek için bir proje arıyorsanız, histeretik çekirdekli bir solenoid kullanabilirsiniz. 1'i saklamak için çekirdeği bir yönde doyurun, 0'ı saklamak için diğer yönde doyurun.

Sonra bunu bu salon sensörü gibi bir sensörün üzerine monte edin . Ardından durumu belirlemek için kalan alanın polaritesine hall sensörü (sadece bir analog karşılaştırıcı) ile bakabilirsiniz .


3

William Price tarafından verilen sigorta / kesici cevabından en belirgin çözüm geldi:

Bir anahtar.

Bir lamba al. Fişi takın. Açın. Fişini çek. Hawaii'ye taşıyın. Fişi takın.
Tekrar açılır.

Kapatmak. Fişini çek. Eve götür. Fişi takın.
Kapalı kalır.

Bir bilgisayarın LED'i etkinleştirmesini / devre dışı bırakmasını istiyorsanız, o kadar yararlı değildir. Ancak, bir basmalı düğme değiştirme anahtarı ve elektronik olarak etkinleştirilen bir solenoid kullanırsanız, işi halledebilirsiniz. LED'i açmak için düğmeye basın, solenoidi etkinleştirir, LED açılır. Tekrar itin, LED söner. Fişi prizden çekin, düğme hala mekanik olarak açık veya kapalı olarak ayarlanmıştır.

"Bu açıksa kesinlikle, bu kesinlikle kapalı" işlevselliğini (bir değiştirme yerine) korumak istiyorsanız, üst düğmenin bir flip anahtarının üstüne basan bir solenoidi etkinleştirmesini sağlayabilirsiniz. Daha sonra alt düğme, flip anahtarının alt kısmına basan ikinci bir solenoidi etkinleştirir.

Bunu uzaktan yapmanın en iyi yolu olduğunu söylememek, ancak işlevseldir.


1
Tek yaptığınız, önerilen ilk çözümlerden biri olan iki durumlu bir rölenin nasıl oluşturulacağını açıklamak.
Dave Tweed

İkinci bölüm, evet, sadece kendi rölesini inşa etmekle ilgileniyorsa, iki yönlü kararlı bir rölenin açıklamasıdır. Ancak ilk bölüm değildir. Sorunun amacına uygun olduğunu düşünmüyorum (mümkün olan en basit tasarımı oluşturmak yerine elektronik öğrenmekle ilgilendiğini düşünüyorum), ancak tek bir geçiş anahtarı elektronik bitlerden daha basit ve daha kolay bir tasarımdır ve verilen gereksinimleri karşılar. ilk birkaç cümle.
MichaelS

Haklı olabilirsiniz, ancak OP yanıtımı "kabul etmesine" rağmen, asla tartışmak için geri gelmediğinden asla emin olamayacağız. Sorunun genel niyetini "Devre bir LED'in durumunu hatırlayabilmelidir" temelinde elektronik olarak yeniden yazılabilir belleğe başvurmak üzere yorumladım . Bu, salt okunur belleği (anahtarlar, atlama telleri, diyotlar vb.) Ve bir kez yazma belleğini (sigortalar) dışlar.
Dave Tweed

Benim düşüncem, LED'in en son hangi düğmeye basıldığına ilişkin durumudur. Mantık açısından bakıldığında, düğmelerin durumunu yakalamak LED'in durumunu yakalamakla aynıdır.
MichaelS

2

En basit tek bileşenli çözüm iki kararlı röle olacaktır. Ve durumu okumak için sadece bir dirence ihtiyacınız olacak.


2

EEPROM'da yerleşik olan bir mikrodenetleyici kullanabilirsiniz. 8-bit PIC16F84A 64 bayt EEPROM'a sahiptir, bu da tipik olarak 10.000.000 için iyidir ve her bayta en az 1.000.000 yazma (bayt dayanıklılığı olarak bilinir). Başka bir cevapta seçilen PIC, PIC12F635'in 128 bayt EEPROM'u ve 100.000 yazlık bayt dayanıklılığı vardır. 16 bitlik bir işlemci olan PIC24F16KA102 , 512 bayt EEPROM ve 100.000 yazma bayt dayanıklılığına sahiptir.

OP, LED'in ne sıklıkta yanıp söneceğini göstermez. Bu tartışmanın amaçları için, bunun dakikada dört kez olduğunu varsayalım.

Bir yıl içinde yanıp sönecek

46024365=2,102,400 times.

EEPROM'un hem açık hem de kapalı olayları yakalaması gerektiğinden, bu sayının iki katına veya yaklaşık 4.2 milyon kez yazılacaktır . Beş yıl içinde bu 21 milyon kez.

Açıkçası, bu, şimdi bir mikro denetleyiciye yerleştirdiğim herhangi bir EEPROM'un özelliklerini aşacaktır.

Ancak bunun için basit bir çözüm var. Açık veya kapalı durumunu takip etmek için aynı baytı tekrar tekrar kullanmak yerine, tüm çipi dolduran bir bayt dizisi kullanılabilir.

Dizideki her öğe için iki bayt gerekir. Böylece 64 baytlık bir EEPROM, PIC16F84A'daki gibi 32 element taşıyabilir. EEPROM'a her yazışınızda, durum baytına 0 (bu öğenin veri içerdiği anlamına gelir) ve veri baytına 0 (LED son yanmış) veya 0xFF (LED son yanmış) yazarsınız. EEPROM'a bir sonraki erişiminizde, 0xFF durum baytına sahip olanı bulana kadar öğeler arasında dizin oluşturur ve bu öğeyi kullanırsınız. Hiçbiri kalmadıysa, EEPROM'u yeniden başlatın ve baştan başlayın (düşük uçlu PIC'ler için, durum baytlarının her birine 0xFF yazma anlamına gelir; PIC24 için, tüm EEPROM'u silme komutu vardır). LED'in son durumunu bilmeniz gerekiyorsa, diziyi daha önce olduğu gibi dizine eklersiniz, ancak şimdi bir öğeye geri dönün ve veri baytını okuyun.

resim açıklamasını buraya girin

Bu, esas olarak, tek bir bayta erişim sayısını PIC16F84A için 16 faktörüne böler (durum baytlarının her biri iki kez yazıldığı için 32 değil, 16 değil). Böylece, yaklaşık dört yıllık veri için yeterli olan toplam 16 milyon yazıyı işleyebilecektir. Ve daha büyük EEPROM ama 100K daha küçük bayt dayanıklılığı ile PIC12F635, toplamda dokuz ay boyunca yeterli olan 3.2 milyon yazıyı işleyebilecektir.

512 bayt EEPROM ve toplu silme özelliği ile PIC24F16KA102, beş yıldan uzun bir süre yetecek kadar 25,6 milyon yazıyı işleyebilecektir.

Yanıp sönme oranı dakikada dört kez yerine saatte yalnızca dört kez olsaydı, bu yılda toplam 70.080 yazma anlamına gelir. Bayt başına 100.000 yazma dayanıklılığı ile PIC12F635 bile 45 yıl sürecekti!


EEPROM'a yazmaktan güç kaybına kadar kaçabilirsiniz. Kapasitörler, uC'nin mevcut durumu yazacak kadar uzun süre çalışmasını sağlayacak kadar şarj etmelidir. Bu, EEPROM'unuzun ömrünü büyük ölçüde artırabilir.
MichaelS

Ayrıca, neden bayt başına birden fazla bit kullanmıyorsunuz? İlk bayt 7 bit sayma verisi ve 1 bit LED verisi depolar. İlk yazdığınızda, baytı 0000001L'ye, sonra 0000010L'ye vb. Olarak ayarlarsınız. 1111111L'ye ulaştığında, bir sonraki baytı tüm sıfırlara sıfırlarsınız. Son bayta ulaştıktan sonra, ilk baytı sıfırlarsınız. O zaman bir sonraki okuma konumunuz ilk 7 biti 0 <7 bit <= 127 olan ilk bayttır ve bir sonraki yazma konumu 7 bit <127 olan ilk bayttır. Şimdi erişimlerinizi neredeyse iki katına çıkardınız (neredeyse ) her yazma işlemi iki yerine tek bir bayta yapılır.
MichaelS

@MichaelS Bunu da düşündüm. İlk olarak, 11111110'dan 11111101'e gidemezsiniz, çünkü 1'leri yazamazsınız (başlangıç ​​koşulunuzu ters çevirdim.) Bunun yerine bayt boyunca birer birer 0'lar yazarsınız. Ancak bayt başına yazma sayısını sınırlamak açısından gerçekten iyi değil - her bayta bir kez yerine sekiz kez yazmak zorunda kalırsınız.
tcrosley

Söz konusu PIC cihazlarını tam olarak kullanmadım, ancak anlayışım, tüm verileri sildiğiniz, ardından bir kerede varsayılan olmaması gereken bitleri değiştirdiğinizdir. Eğer "silindi" 1s anlamına gelirse, o zaman her şeyi siler ve 1-6 ve muhtemelen L bitlerini değiştirirsiniz. Sonra, her şeyi siler ve 1-5, 7, muhtemelen L bitlerini değiştirirsiniz. Sayının sonuna doğru yalnızca birkaç biti değiştirirsiniz (1110110L -> 1110111L yalnızca bit 4 ve L'yi değiştirir). Silme başına% 50 ve yazma başına% 50 şans olduğundan, belirli bir bitin silinmesi için ortalama% 100 veya silme / yazma döngüsü başına 8 bittir.
MichaelS

Yönteminizle, durum baytının tamamı kullanımdan bir süre önce silinir, ardından kullanımda sıfıra veya silme / yazma döngüsü başına 16 bit olarak ayarlanır. Aynı zamanda, tüm veri baytınızın silme başına% 50 şansı, yazma başına% 50 şansı veya silme / yazma döngüsü başına ortalama 8 biti vardır. Toplam, daha sonra döngü başına 24 bittir. Her silme / yazma döngüsünün bayt başına eşdeğer olduğunu varsaysak bile, bir bayt yerine iki bayt değişmektedir. (Yukarıdaki yorumu düzenleyemiyorum, belirli bir bitin son cümlede silinmemesi, değiştirilmemesi için 50/50 demek istedim .)
MichaelS

2

Bu çok naif bir öneri olabilir ... ama bir düğme pil ile sürülen düşük güçlü bir transistör mandalını yapmaya ne dersiniz ? Ardından , güç kaynağı tarafından yönlendirilen bir OP-amp'e beslemek için bundan gelen çıkışı kullanın . Bu şekilde, yararlı çıkışı besleme zorlanmasının düğme pilini boşaltırsınız; besleme kapalıyken yine de kullanamazsınız, değil mi?

DÜZENLEME: Ayrıca - aşağıdaki yoruma göre - eğer kaynak kaybolursa mandal OP-amp'den izole edilecek şekilde yapılması tavsiye edilir. Besleme tarafından beslenen her türlü röle - veya eşdeğer devre - buradaki işi yapabilir.

Basit bir kol saatinin bir düğme piliyle yıllarca sürülebileceği düşünüldüğünde, basit bir mandalın çalıştırılması, ona her pil için on yıl süren bir ömür vermelidir. Hatta iki pili paralel olarak koyabilirsiniz, böylece bilgileri kaybetmeden her seferinde birini değiştirebilirsiniz.


Girişte besleme geriliminden daha yüksek bir gerilime izin veren çok az sayıda Op-Amp vardır, bu da kapatma sırasında söz konusudur.
Arsenal

Eğer durum buysa, eğer kaynak kaybolursa OP-amp girişini kapatmanın bir yolu yok mu? Herhangi bir röle - ya da eşdeğer devre - buradaki hile yapardı, değil mi?
MichaelK

0

Bir I2C veriyoluna basit bir değer kümesi yazmak için gereken protokolü yönlendirmek için küçük bir CPLD programlanabilir.

NXP, dip anahtarlarının yerini alması amaçlanan çok küçük bellekler oluşturur, örn. PCA8550 / PCA9561.

İkisini birleştirdiğinizde, durumunu hatırlayan çok küçük bir katı hal anahtarınız var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.