Bagaimana cara membuat sirkuit memori permanen 1 bit?

13

Saya ingin membuat rangkaian sederhana untuk menyimpan atau menyimpan 1 bit data. Sirkuit harus dapat mengingat keadaan LED (hidup atau mati) bahkan jika suplai terputus dari sirkuit. Saya membutuhkannya untuk bekerja seperti hard drive, memori flash atau kartu memori SD ponsel.

Saya membuat sirkuit seperti yang ditunjukkan pada gambar, Outputnya adalah seri LED dengan 470 ohm resistor. Saya menggunakan dua tombol bush untuk mengisi atau melepaskan kapasitor sehingga output LED menyala atau mati.

Setelah memutuskan pasokan atau mematikan listrik, Sirkuit mampu mengingat keadaan LED selama beberapa menit.

Setelah 2 atau 3 menit, kapasitor benar-benar habis dan sirkuit kehilangan datanya.

masukkan deskripsi gambar di sini Bagaimana saya bisa menghentikan kapasitor dari pemakaian? atau bagaimana saya bisa memperlambat laju pemakaian sehingga sirkuit kehilangan datanya setelah seminggu atau lebih?

Di sirkuit ini saya menggunakan 555 sebagai inverter (bukan gerbang) tetapi saya dapat menggunakan IC lain, tujuan saya hanya membuat memori permanen yang sederhana.

Michael George
sumber
1
Seberapa benci Anda menggunakan sel koin? Tidak ada cara untuk menduplikasi sel EEPROM / flash / FRAM di tingkat makro.
Ignacio Vazquez-Abrams
8
@ IgnacioVazquez-Abrams Anda dapat menggunakan relai latching ...
helloworld922
2
@MichaelGeorge: Tidak, seluruh inti dari relai penguncian adalah bahwa ia menggunakan magnet permanen untuk mempertahankan kondisinya tanpa penerapan daya eksternal. Anda hanya perlu pulsa listrik untuk mengubah kondisinya.
Dave Tweed
6
Anda bisa mendapatkan sebuah kapasitor untuk mengadakan biaya untuk seminggu dengan beberapa desain hati-hati dan konstruksi: m.electronicdesign.com/analog/...
pjc50
3
Mengenai pelepasan kapasitor: mereka mungkin menahan tegangan untuk waktu yang lama, jika terputus dengan benar. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Jawaban:

29

Memori nonvolatile elektronik asli didasarkan pada inti ferit. Meskipun relatif mudah untuk menarik inti sedemikian dalam satu arah atau yang lain untuk menyimpan satu atau nol, dibutuhkan beberapa sirkuit yang cukup canggih untuk membacanya kembali dengan andal.

Chip nonvolatile modern bergantung pada penyimpanan muatan, tetapi untuk membuatnya bekerja, Anda harus dapat membuat kapasitor yang pada dasarnya tidak memiliki kebocoran, dan cara untuk membacakan muatan itu. Ini hanya dapat dilakukan dalam konteks mikroelektronika, di mana kapasitor adalah sepotong kecil logam ("gerbang mengambang") yang benar-benar terbungkus dalam kaca (silikon dioksida), dan dibaca melalui pengaruhnya pada transistor terdekat. .

Pilihan lain adalah RAM ferrorelectric (FRAM), yang menggunakan bahan dielektrik khusus yang memiliki dua keadaan polarisasi stabil dan berbeda. Sekali lagi, ini hanya berfungsi di mikroelektronika.

Karena itu, Anda perlu memilih beberapa fenomena fisik lain untuk menyimpan sedikit informasi Anda. Salah satu pilihan yang jelas adalah relai pengunci, yang menyimpan informasi dalam posisi fisik armaturnya, yang disimpan di salah satu dari dua posisi stabil dengan magnet permanen atau pegas. Posisi dapat diubah dengan menerapkan denyut arus yang relatif pendek, dan pembacaan dilakukan dengan menempelkan kontak listrik ke armature.

Dave Tweed
sumber
Karena Anda hanya memiliki satu inti, tidak bisakah Anda membacanya dengan sensor efek Hall atau sesuatu?
user253751
1
@immibis: Tidak mudah. Medan magnet hampir sepenuhnya terkandung di dalam inti itu sendiri, dengan kebocoran eksternal sangat sedikit.
Dave Tweed
8

Buat sirkuit yang menggerakkan sakelar mekanis misalnya. kotak tidak berguna. Sirkuit ini harus diberi daya untuk mengubah / membaca keadaan tetapi akan tetap di antaranya.

JamesRyan
sumber
6

Solusi sederhana akan menjadi pengontrol mikro seperti PIC12F635 yang tersedia dalam DIP 8-pin atau lebih kecil, dan memiliki jam built-in dan sirkuit reset berwarna cokelat (yang terakhir ini penting untuk menjaga integritas EEPROM nonvolatile penyimpanan).

Kode yang dibutuhkan tidak banyak, proyek pemula yang bagus.

Satu-satunya bagian eksternal yang diperlukan adalah kapasitor bypass dan resistor pembatas arus untuk LED.

Solusi yang paling sederhana mungkin adalah relai sinyal penguncian 2-koil.

Spehro Pefhany
sumber
6

Elektronik murni tidak akan membuat sel memori permanen, tetapi muatan dalam kapasitor dapat mendekatinya (akan membutuhkan penyegaran secara teratur). Memori EEPROM / Flash memperpanjang persyaratan ini hingga 10 tahun, jadi untuk tujuan praktis disebut permanen. Tapi ini bukan sesuatu yang Anda lakukan dengan komponen biasa.

Memori permanen nyata menggunakan semacam fenomena bi-stable fisik. Magnetisasi inti ferit yang disebutkan oleh Dave digunakan secara luas (pernah mendengar tentang 'dump inti'?). Relai dua arah (atau kait) yang disebutkan oleh helloworld922 lebih mudah digunakan.

Ketika Anda melihat bagaimana ini dilakukan pada komputer awal Anda harus menyadari bahwa ada keseimbangan antara kompleksitas sel tunggal, dan kompleksitas sirkuit penggerak. Inti ferit sangat sederhana, tetapi pengemudian dan terutama sirkuit pembacaan sangat kompleks. Untuk relai dua arah, ini adalah kebalikannya: relai ini cukup kompleks per bit, tetapi sirkuit kontrolnya sangat sederhana.

Apa tujuanmu?

  • Jika Anda ingin membuat satu sel hanya untuk bersenang-senang, gunakan relai dua arah.

  • Jika Anda ingin mendemonstrasikan bagaimana hal itu dilakukan dalam praktek (DRAM / Flash) tanpa praktis, gunakan muatan yang disimpan dalam kapasitor, dan segarkan secara teratur.

  • Jika Anda ingin membuat sesuatu yang praktis, gunakan pengontrol mikro kecil yang memiliki EEPROM bawaan (atau dapat memprogram sendiri FLASH-nya).

Wouter van Ooijen
sumber
5

Sekring. Mungkin mengganggu untuk mengganti sering, sehingga Anda dapat meningkatkan ke pemutus.

William Price
sumber
5
Ini agak tipis untuk jawaban pada EE.SE. Tolong jelaskan.
Nick Alexeev
2
Jadi ... muncul 1 secara default (saat ini akan berlalu), untuk mengatur ke nol, Anda mengirim siput arus melalui sekering untuk meledakkannya, sekarang saat ini tidak akan lewat, untuk mengatur ke 1 lagi, Anda ganti sekeringnya?
Michael
1
Saya suka pemikiran out-of-the-box di sini. Ketika Anda menekan tombol untuk mematikan LED, itu menjatuhkan pemutus. Ketika Anda menekan tombol untuk menyalakan LED, itu akan mengatur ulang pemutus. Itu hanya versi aneh dari latching relay. Mungkin bukan pilihan terbaik, tetapi saya masih menikmati kreativitasnya.
MichaelS
1
Saya hanya merujuk pada bagaimana perangkat ROM awal bekerja. Mereka adalah sekering. Tiup sekring di tempat yang Anda inginkan nol. Saya tidak berpikir itu akan membutuhkan wawasan yang lebih dalam. Sekolah yang sangat tua.
William Price
3

Solusi Praktis:

Relai kait seperti yang disebutkan oleh @DaveTweed adalah yang paling sederhana.

Jika Anda menginginkan solusi solid state, Anda bisa menggunakan IC memori antarmuka paralel seperti ini . Anda bisa mengikat garis alamat ke alamat tetap dan hanya menggunakan salah satu baris data. Anda akan membutuhkan beberapa logika lem tambahan.

Solusi Menarik:

Jika Anda mencari proyek untuk menunjukkan memori maka Anda dapat menggunakan solenoida dengan beberapa inti histeris. Menjenuhkan inti dalam satu arah untuk menyimpan 1, menjenuhkannya di arah lain untuk menyimpan 0. Yang mengurus penulisan.

Lalu pasang yang tepat di atas sensor seperti sensor hall ini . Kemudian Anda dapat melihat polaritas bidang remanen dengan sensor hall (hanya pembanding analog) untuk menentukan keadaan.

Houston Fortney
sumber
3

Dari jawaban sekering / pemecah yang diberikan oleh William Price, muncul solusi yang paling jelas:

Sebuah saklar.

Ambil lampu. Hubungkan. Nyalakan. Cabut kabelnya. Pindahkan ke Hawaii. Colokkan.
Nyalakan kembali.

Matikan. Cabut kabelnya. Bawa pulang. Hubungkan.
Tetap mati.

Jika Anda ingin komputer mengaktifkan / menonaktifkan LED, itu tidak membantu. Namun, jika Anda menggunakan sakelar sakelar tombol tekan, dan solenoid yang diaktifkan secara elektronik, Anda bisa menyelesaikannya. Tekan tombol untuk menyalakan LED, itu mengaktifkan solenoid, LED menyala. Tekan lagi, LED mati. Cabut kabelnya, dan tombolnya masih hidup atau mati secara mekanis.

Jika Anda ingin mempertahankan fungsionalitas "ini jika pasti aktif, yang pasti tidak aktif" (alih-alih beralih), Anda dapat meminta tombol atas mengaktifkan satu solenoid yang menekan di bagian atas flip switch. Kemudian tombol bawah mengaktifkan solenoid kedua yang menekan bagian bawah saklar flip.

Tidak mengatakan ini adalah cara terbaik untuk melakukannya, tetapi ini fungsional.

Michael
sumber
1
Yang Anda lakukan hanyalah menjelaskan cara membuat relai bistable, yang merupakan salah satu solusi pertama yang diusulkan.
Dave Tweed
Bagian kedua, ya, hanyalah deskripsi relai bi-stable yang kikuk, mungkin berguna jika dia tertarik untuk membangun relay sendiri. Namun, bagian pertama tidak. Saya tidak berpikir itu cocok dengan maksud pertanyaan (saya kira dia tertarik untuk belajar elektronik daripada membangun desain yang paling sederhana), tetapi satu toggle switch adalah desain yang lebih sederhana, lebih mudah daripada bit elektronik, dan memenuhi persyaratan yang diberikan dalam pasangan kalimat pertama.
MichaelS
Anda mungkin benar, tetapi kami tidak akan pernah yakin karena OP tidak pernah kembali untuk membahasnya - meskipun dia "menerima" jawaban saya. Saya menafsirkan maksud keseluruhan pertanyaan untuk merujuk pada memori yang dapat ditulisi ulang secara elektronik, berdasarkan pada "Rangkaian harus dapat mengingat keadaan LED" . Ini akan mengesampingkan memori hanya baca (sakelar, jumper, dioda, dll.) Dan memori tulis-sekali (sekering).
Dave Tweed
Pemikiran saya adalah keadaan LED berhubungan langsung dengan tombol mana yang ditekan terakhir. Dari sudut pandang logika, menangkap status tombol identik dengan menangkap status LED.
MichaelS
2

Solusi satu komponen yang paling sederhana adalah relai yang stabil. Dan Anda hanya perlu resistor untuk membaca status.

Bruce
sumber
2

Anda bisa menggunakan mikrokontroler yang telah dibangun di EEPROM. PIC16F84A 8-bit memiliki 64 byte EEPROM, yang bagus untuk 10.000.000 dan minimal 1.000.000 menulis untuk setiap byte (ini dikenal sebagai byte endurance). PIC dipilih dalam jawaban lain, PIC12F635 memiliki 128 byte EEPROM dan daya tahan byte byte dari 100.000 menulis. The PIC24F16KA102 , prosesor 16-bit, memiliki 512 byte EEPROM dan juga daya tahan byte dari 100.000 menulis.

OP tidak menunjukkan seberapa sering LED akan berkedip. Untuk keperluan diskusi ini, mari kita asumsikan empat kali satu menit.

Dalam satu tahun akan berkedip

46024365=2,102,400 tsayames.

Karena EEPROM perlu menangkap peristiwa terakhir yang aktif dan tidak aktif, maka EEPROM akan ditulis dua kali lipat dari jumlah itu, atau sekitar 4,2 juta kali . Dalam lima tahun, ini adalah 21 juta kali.

Jelas, ini akan melebihi spesifikasi EEPROM yang sekarang saya buat menjadi mikrokontroler.

Tetapi ada solusi sederhana untuk ini. Alih-alih menggunakan byte yang sama berulang-ulang untuk melacak status hidup atau mati, seseorang dapat menggunakan array byte, yang mengisi seluruh chip.

Anda perlu dua byte untuk setiap elemen dalam array. Jadi EEPROM 64 byte, seperti yang ada di PIC16F84A, bisa menampung 32 elemen. Setiap kali Anda menulis ke EEPROM, Anda menulis 0 ke byte status (artinya elemen ini memiliki data), dan 0 ke byte data (LED tidak aktif) atau 0xFF (LED aktif terakhir). Lain kali Anda mengakses EEPROM, Anda indeks melalui elemen sampai Anda menemukan satu dengan byte status 0xFF, dan kemudian menggunakan elemen itu. Jika tidak ada yang tersisa, maka inisialisasi ulang EEPROM dan mulai lagi (untuk PIC low-end, ini berarti menulis 0xFF untuk setiap byte status; untuk PIC24, ada perintah untuk menghapus seluruh EEPROM). Jika Anda perlu mengetahui status terakhir LED, Anda mengindeks melalui array seperti sebelumnya, tetapi sekarang kembali satu elemen dan bacakan byte data.

enter image description here

Ini pada dasarnya membagi jumlah akses ke satu byte dengan faktor 16 untuk PIC16F84A (16 dan bukan 32 karena masing-masing byte status ditulis ke dua kali). Jadi itu akan mampu menangani total 16 juta penulisan, cukup untuk hampir empat tahun data. Dan PIC12F635 dengan EEPROM yang lebih besar tetapi daya tahan byte yang lebih kecil dari 100K, akan mampu menangani total 3,2 juta penulisan, cukup untuk sembilan bulan.

PIC24F16KA102, dengan EEPROM 512 byte dan fitur penghapusan massal, akan mampu menangani 25,6 juta penulisan, cukup untuk lebih dari lima tahun.

Jika tingkat berkedip hanya empat kali per jam, bukan empat kali per menit , maka ini berarti total 70.080 menulis per tahun. Bahkan PIC12F635, dengan daya tahan 100.000 tulis per byte, akan bertahan selama 45 tahun!

tcrosley
sumber
Anda dapat menahan diri dari menulis ke EEPROM sampai setelah kehilangan daya. Kapasitor harus menyimpan muatan yang cukup untuk menjaga agar UC beroperasi cukup lama untuk menulis kondisi saat ini. Ini bisa sangat meningkatkan umur panjang EEPROM Anda.
MichaelS
Juga, mengapa tidak menggunakan banyak bit per byte? Byte pertama menyimpan 7 bit data penghitungan dan 1 bit data LED. Pertama kali Anda menulis, Anda mengatur byte ke 0000001L, lalu 0000010L, dll. Ketika mencapai 1111111L, Anda mereset byte berikutnya ke semua nol. Setelah sampai ke byte terakhir, Anda mengatur ulang byte pertama ke nol. Kemudian lokasi baca Anda berikutnya adalah byte pertama dengan 7 bit teratas adalah 0 <7-bit <= 127, dan lokasi tulis berikutnya adalah byte pertama dengan 7-bit <127. Sekarang Anda hampir menggandakan akses Anda karena (hampir ) setiap penulisan adalah satu byte, bukan dua.
MichaelS
@MichaelS aku memikirkan itu juga. Pertama, Anda tidak dapat beralih dari 11111110 ke 11111101 karena Anda tidak dapat menulis angka 1 (saya membalikkan kondisi awal Anda.) Sebaliknya, Anda akan menulis angka 0, satu per satu di byte. Tapi itu tidak benar-benar ada gunanya dalam hal membatasi jumlah menulis per byte - Anda akhirnya harus menulis ke setiap byte delapan kali, bukan sekali.
tcrosley
Saya belum pernah menggunakan perangkat PIC yang tepat dalam pertanyaan, tetapi pemahaman saya adalah bahwa Anda menghapus semua data, kemudian mengubah bit yang seharusnya tidak menjadi default sekaligus. Jadi jika "dihapus" berarti semua 1s, maka Anda akan menghapus semuanya dan mengubah bit 1-6 dan mungkin L. Selanjutnya, Anda akan menghapus semuanya dan mengubah bit 1-5, 7, mungkin L. Menjelang akhir penghitungan , Anda hanya akan mengubah beberapa bit (1110110L -> 1110111L hanya mengubah bit 4 dan L). Karena ada peluang 50% per penghapusan, dan 50% per tulis, untuk bit yang diberikan untuk dihapus, itu rata-rata 100%, atau 8 bit per siklus hapus / tulis.
MichaelS
Dengan metode Anda, seluruh byte status dihapus beberapa saat sebelum digunakan, kemudian atur menjadi nol saat digunakan, atau 16 bit per siklus hapus / tulis. Pada saat yang sama, seluruh byte data Anda memiliki peluang 50% per hapus, peluang 50% per tulis, atau rata-rata 8 bit per siklus hapus / tulis. Totalnya kemudian 24 bit per siklus. Bahkan jika kita mengasumsikan setiap siklus hapus / tulis sama dengan per byte, itu masih dua byte yang berubah, bukan satu. (Tidak dapat mengedit komentar di atas, maksud saya 50/50 untuk bit yang diberikan untuk diubah , tidak dihapus, dalam kalimat terakhir.)
MichaelS
2

Ini mungkin saran yang sangat naif ... tetapi bagaimana dengan membangun kait bertenaga rendah yang digerakkan oleh baterai tombol . Kemudian gunakan output dari itu untuk dimasukkan ke OP-amp yang digerakkan oleh catu daya . Dengan cara itu Anda melepas baterai tombol dari strain memberi makan output yang berguna; Anda tidak dapat menggunakannya saat suplai dimatikan, kan?

SUNTING: Juga - sesuai dengan komentar di bawah ini - disarankan untuk membuatnya sehingga kait diisolasi dari OP-amp jika pasokannya hilang. Segala jenis relai - atau rangkaian setara - yang diumpankan oleh suplai harus dapat melakukan pekerjaan di sana.

Menimbang bahwa arloji sederhana dapat digerakkan oleh baterai tombol selama bertahun-tahun, menyalakan gerendel sederhana akan memberinya masa pakai per baterai yang berlangsung satu dekade. Anda bahkan dapat meletakkan dua baterai secara paralel sehingga Anda dapat menukar keduanya - satu pada saat itu - tanpa kehilangan informasinya.

MichaelK
sumber
Hanya ada sedikit Op-Amps yang tersedia yang memungkinkan tegangan pada input lebih tinggi dari tegangan suplai, yang akan menjadi kasus selama shutdown.
Arsenal
Jika itu masalahnya, apakah tidak ada cara untuk mematikan input ke OP-amp jika suplai hilang, pada dasarnya mengisolasi kait? Setiap jenis relay - atau rangkaian yang setara - akan melakukan trik di sana, bukan?
MichaelK
0

CPLD kecil dapat diprogram untuk mengarahkan protokol yang diperlukan untuk menulis sekumpulan nilai sederhana ke bus I2C.

NXP membuat serangkaian memori yang sangat kecil, yang dimaksudkan untuk mengganti sakelar dip, misalnya PCA8550 / PCA9561.

Gabungkan keduanya dan Anda memiliki saklar solid state yang sangat kecil yang mengingat keadaannya.

Jason Morgan
sumber