1ビットの永久メモリ回路を作る方法は?


13

1ビットのデータを保存または保存する簡単な回路を作成したいと思います。回路は、電源が回路から切断されていても、LEDの状態(onまたはoff)を記憶できる必要があります。携帯電話のハードドライブ、フラッシュメモリ、SDメモリカードのように動作する必要があります。

写真のように回路を作りました。出力は470オームの抵抗と直列のLEDです。出力LEDがオンまたはオフになるように、2つのブッシュボタンを使用してコンデンサを充電または放電します。

電源を切るか、電気を切った後、回路は数分間LEDの状態を記憶することができました。

2〜3分後、コンデンサは完全に放電し、回路はデータを失いました。

enter image description here コンデンサの放電を止めるにはどうすればよいですか?または、回路が1週間以上後にデータを失うように放電の速度を遅くするにはどうすればよいですか?

この回路では、555をインバーター(ゲートではなく)として使用していますが、他のICを使用することもできますが、私の目的は単純な永続メモリを作成することです。


1
コインセルの使用はどの程度嫌いですか?EEPROM /フラッシュ/ FRAMセルをマクロレベルで複製する方法はありません。
イグナシオバスケス-アブラムス

8
@ IgnacioVazquez-Abramsラッチングリレーを使用できます...-
helloworld922

2
@MichaelGeorge:いいえ、ラッチングリレーの重要な点は、永久磁石を使用して、外部電源を印加せずに状態を保持することです。その状態を変えるには、電気のパルスが必要です。
デイブツイード

6
:あなたは、いくつかの慎重な設計と建設を週にその電荷を保持するためのコンデンサを得ることができますm.electronicdesign.com/analog/...
pjc50

3
コンデンサの放電に関して:適切に切断されている場合、電圧を長時間保持することがあります。robotroom.com/Capacitor-Self-Discharge-1.html
FarO

回答:


29

オリジナルの電子不揮発性メモリは、フェライトコアに基づいています。そのようなコアを一方向または他方向に磁化して1または0を格納することは比較的簡単ですが、それを確実に読み返すにはかなり洗練された回路が必要です。

最新の不揮発性チップは電荷蓄積に依存していますが、これを機能させるためには、漏れが本質的にゼロのコンデンサと、その電荷を読み出す方法を作成できる必要があります。これは、コンデンサがガラス(二酸化ケイ素)に完全に包まれた小さな金属片(「フローティングゲート」)であり、近くのトランジスタへの影響によって読み取られるマイクロエレクトロニクスのコンテキストでのみ実行できます。 。

別の選択肢として、ferrorelectric RAM(FRAM)があります。これは、2つの異なる安定した偏光状態を持つ特別な誘電体を使用します。繰り返しますが、これはマイクロエレクトロニクスでのみ機能します。

したがって、少しの情報を保存するには、他の物理現象を選択する必要があります。明らかな選択肢の1つはラッチリレーです。ラッチリレーはアーマチュアの物理的な位置に情報を保存し、永久磁石またはスプリングによって2つの安定した位置のいずれかに保持されます。比較的短い電流パルスを印加することで位置を変更でき、アーマチュアに電気接点を取り付けることで読み取りが行われます。



コアは1つしかないので、ホール効果センサーなどで読み取れませんか?
user253751

1
@immibis:簡単ではありません。磁場は、コア自体にほぼ完全に含まれており、外部漏れはほとんどありません。
デイブツイード

8

メカニカルスイッチをフリックする回路を作成します。無駄な箱。状態を変更/読み取るには、回路の電源を入れる必要がありますが、その間は維持されます。


6

シンプルなソリューションは、PIC12F635などのマイクロコントローラーです。、8ピンDIP以下で利用可能なであり、クロックおよびブラウンアウトリセット回路を内蔵しています(後者はEEPROM不揮発性の整合性を維持するために重要です)ストレージ)。

必要なコードはそれほど多くない、良いスタータープロジェクトです。

必要な外部部品は、バイパスコンデンサとLEDの電流制限抵抗だけです。

最も簡単な解決策は、おそらく2コイルのラッチ信号リレーです。


6

純粋な電子機器は永続的なメモリセルを作成しませんが、コンデンサの電荷がそれに近づく可能性があります(定期的な更新が必要になります)。EEPROM /フラッシュメモリは、この要件を数十年に拡張しているため、実際的な目的では永続的と呼ばれます。しかし、これは通常のコンポーネントで行うことではありません。

実際の永久記憶は、ある種の物理的な双安定現象を使用します。Daveが言及したフェライトコアの磁化は、広く使用されていました(「コアダンプ」を聞いたことはありませんか?)。helloworld922で言及されている双安定(またはラッチ)リレーは使いやすいです。

初期のコンピューターでこれがどのように行われていたかを見るとき、単一セルの複雑さと駆動回路の複雑さとの間にバランスがあることに気づかなければなりません。フェライトコアは非常にシンプルですが、駆動、特に読み出し回路は非常に複雑です。双安定リレーの場合は逆です。リレーはビットごとにかなり複雑ですが、制御回路は非常に単純です。

あなたの目的はなんですか?

  • 楽しみのために1つのセルを作成する場合は、双安定リレーを使用します。

  • 実用的ではなく、実際の実行方法(DRAM / Flash)をデモする場合は、コンデンサに保存された電荷を使用し、定期的に更新してください。

  • 何か実用的なものにしたい場合は、EEPROMが内蔵されている(またはフラッシュを自己プログラムできる)小さなマイクロコントローラーを使用します。


5

ヒューズ。頻繁に交換するのは面倒なので、ブレーカーにアップグレードできます。


5
これはEE.SEの答えとしては少し薄いです。詳しく説明してください。
ニックアレキセフ

2
だから...デフォルトで1が発生し(電流が通過します)、ゼロに設定するには、ヒューズに電流のスラグを送ってヒューズを吹き飛ばしますが、現在は電流が流れないので、再び1に設定して交換しますヒューズ?
マイケル

1
私はここですぐに使える思考が好きです。ボタンを押してLEDをオフにすると、ブレーカーが作動します。ボタンを押してLEDをオンにすると、ブレーカーがリセットされます。これは、ラッチングリレーの奇妙なバージョンです。おそらく最良の選択肢ではありませんが、私はまだ創造性を楽しんでいます。
MichaelS

1
私は単に初期のROMデバイスがどのように機能するかについて言及していました。それらはヒューズの配列でした。ゼロが必要な場所でヒューズを吹き飛ばします。もっと深い洞察が必要だとは思いませんでした。非常に古い学校です。
ウィリアム価格

3

実用的なソリューション:

@DaveTweedが言及したラッチリレーが最も簡単です。

ソリッドステートソリューションが必要な場合は、次のようなパラレルインターフェイスメモリICを使用できます。 この。アドレス行を固定アドレスに結び付けて、データ行の1つだけを使用できます。追加のグルーロジックが必要になります。

興味深いソリューション:

メモリを実証するプロジェクトを探している場合は、いくつかのヒステリシスコアを持つソレノイドを使用できます。コアを一方向に飽和させて1を保存し、他の方向に飽和させて0を保存します。これにより書き込みが処理されます。

次に、このホールセンサーのようなセンサーの真上に取り付けます。次に、ホールセンサー(アナログコンパレーター)で残留磁場の極性を調べて、状態を判断できます。


3

ウィリアムプライスのヒューズ/ブレーカーの答えから、最も明白な解決策が生まれました。

スイッチ。

ランプを取る。プラグを差し込みます。電源を入れます。プラグを抜きます。ハワイに移動します。差し込みます。
電源が入ります。

消して。プラグを抜きます。家に持ち帰って 差し込み
ます。オフのままです。

コンピューターでLEDをアクティブ/非アクティブにしたい場合、あまり役に立ちません。ただし、プッシュボタントグルスイッチと電子的に作動するソレノイドを使用すれば、仕事を終わらせることができます。ボタンを押してLEDをオンにすると、ソレノイドが作動し、LEDがオンになります。もう一度押すと、LEDが消えます。プラグを外しても、ボタンは機械的にオンまたはオフに設定されたままです。

(トグルの代わりに)明示的な「これが確実にオンの場合、それは間違いなくオフ」機能を保持したい場合は、トップスイッチでフリップスイッチの上部を押すソレノイドをアクティブにすることができます。次に、下のボタンを押すと、フリップスイッチの下を押す2番目のソレノイドがアクティブになります。

これをリモートで行うのが最良の方法であるとは言いませんが、機能的です。


1
これまでに行ったのは、提案された最初のソリューションの1つであった双安定リレーの構築方法を説明することだけです。
デイブツイード

2番目の部分は、はい、不格好な双安定リレーの単なる説明です。もし彼が彼自身のリレーを構築することに興味があるなら、おそらく役に立つでしょう。ただし、最初の部分はそうではありません。私はそれが質問の意図と一致するとは思わない(私は彼が可能な限り単純な設計を構築するよりもエレクトロニクスを学ぶことに興味があると思う)が、単一のトグルスイッチは電子ビットよりもシンプルで簡単な設計であり、で与えられた要件を満たしている最初の数文。
MichaelS

あなたは正しいかもしれませんが、OPがそれについて議論するために戻ってこなかったので、私たちは決して確信しません-彼は私の答えを「受け入れた」のに。「回路はLEDの状態を記憶できるはずです」に基づいて、電子的に書き換え可能なメモリを参照するように質問の全体的な意図を解釈しました。これにより、読み取り専用メモリー(スイッチ、ジャンパー、ダイオードなど)および1回限りのメモリー(ヒューズ)が除外されます。
デイブツイード

私の考えでは、LEDの状態は最後に押したボタンに直接関係しています。ロジックの観点から、ボタンの状態をキャプチャすることは、LEDの状態をキャプチャすることと同じです。
MichaelS

2

最も単純な1コンポーネントソリューションは、双安定リレーです。そして、状態を読み取るために必要なのは抵抗のみです。


2

EEPROMを内蔵したマイクロコントローラーを使用できます。8ビットPIC16F84Aには64バイトのEEPROMがあり、通常は10,000,000回、各バイトへの最低1,000,000回の書き込みに適しています(これはバイト耐久性と呼ばれます)。別の回答で選択されたPIC、PIC12F635には128バイトのEEPROMと100,000回の書き込みのバイト耐久性があります。PIC24F16KA102、16ビットプロセッサは、また、512 EEPROMのバイト100,000書込みのバイト耐久性を有しています。

OPは、LEDが点滅する頻度を示しません。この説明のために、1分間に4回と仮定します。

1年で点滅します

46024365=2102400 tmes

EEPROMは最後のオンイベントとオフイベントの両方をキャプチャする必要があるため、その数の2倍、つまり約420万回に書き込まれます。5年間で、これは2,100万回です。

明らかに、これは現在マイクロコントローラーに組み込まれているEEPROMの仕様を超えます。

しかし、これには簡単な解決策があります。同じバイトを繰り返し使用してオンまたはオフの状態を追跡する代わりに、バイトの配列を使用してチップ全体を埋めることができます。

配列の各要素に2バイトが必要です。したがって、PIC16F84Aのような64バイトEEPROMは、32個の要素を保持できます。EEPROMに書き込むたびに、ステータスバイトに0を書き込み(この要素にデータがあることを意味する)、データバイトに0を書き込む(LEDが最後にオフになった)か、0xFF(LEDが最後にオンになった)のいずれかを書き込みます。次回EEPROMにアクセスするときは、0xFFステータスバイトを持つものが見つかるまで要素をインデックスし、その要素を使用します。何も残っていない場合は、EEPROMを再初期化してやり直します(ローエンドPICの場合、これは各ステータスバイトに0xFFを書き込むことを意味します。PIC24の場合、EEPROM全体を消去するコマンドがあります)。LEDの最後のステータスを知る必要がある場合は、以前と同じように配列をインデックスしますが、1つの要素に戻ってデータバイトを読み取ります。

enter image description here

これは、PIC16F84Aの場合、基本的に1バイトへのアクセス数を16倍に分割します(各ステータスバイトが2回書き込まれるため、32ではなく16)。したがって、ほぼ4年間のデータに十分な合計1,600万の書き込みを処理できます。また、PIC12F635は、EEPROMが大きく、バイト耐久性が100Kと小さいため、9か月間で合計320万回の書き込みを処理できます。

512バイトのEEPROMとバルク消去機能を備えたPIC24F16KA102は、5年間以上で2560万回の書き込みを処理できます。

点滅速度が1 分間に4回ではなく、1 時間に4回だけの場合、これは年間70,080回の書き込みを意味します。1バイトあたり100,000回の書き込みに耐えるPIC12F635でさえ、45年間持続します。


電源が切れるまで、EEPROMへの書き込みを控えることができます。コンデンサは、現在の状態を書き込むのに十分な時間uCを動作させ続けるのに十分な電荷を保存する必要があります。これにより、EEPROMの寿命が大幅に延びる可能性があります。
MichaelS

また、なぜバイトごとに複数のビットを使用しないのですか?最初のバイトには、7ビットのカウントデータと1ビットのLEDデータが格納されます。初めて書き込むときは、バイトを0000001L、次に0000010Lなどに設定します。1111111Lに達すると、次のバイトをすべてゼロにリセットします。最後のバイトに到達したら、最初のバイトをゼロにリセットします。次に、次の読み取り位置は、上位7ビットが0 <7ビット<= 127である最初のバイトであり、次の書き込み位置は、7ビット<127である最初のバイトです。 )すべての書き込みは、2バイトではなく1バイトになります。
MichaelS

@MichaelS私もそれを考えました。まず、1を書き込むことができないため、11111110から11111101に移動できません(開始条件を反転しました)。代わりに、バイト全体に1つずつ、0を書き込みます。しかし、バイトあたりの書き込み回数を制限するという点では、実際には何の効果もありません。最終的に、各バイトを1回ではなく8回書き込む必要があります。
tcrosley

私は問題のPICデバイスを使用していませんが、私の理解では、すべてのデータを消去してから、デフォルトではないビットを一度に変更することです。したがって、「消去」がすべて1を意味する場合、すべてを消去し、ビット1〜6および場合によってはLを変更します。次に、すべてを消去してビット1〜5、7、おそらくLを変更します。 、ほんの数ビットを変更するだけです(1110110L-> 1110111Lはビット4とLのみを変更します)。特定のビットを消去するには、消去ごとに50%、書き込みごとに50%の確率があるため、平均100%、つまり消去/書き込みサイクルごとに8ビットです。
MichaelS

このメソッドでは、ステータスバイト全体が使用前にしばらく消去され、使用時にゼロに設定されるか、消去/書き込みサイクルごとに16ビットに設定されます。同時に、データバイト全体では、消去ごとに50%の確率、書き込みごとに50%の確率、または消去/書き込みサイクルごとに平均8ビットがあります。合計は、サイクルあたり24ビットです。各消去/書き込みサイクルがバイトごとに等しいと仮定しても、1バイトではなく2バイト変化します。(上記のコメントは編集できません。最後の文では、特定のビットが50/50に変更され、消去されませんでした。)
MichaelS

2

これは非常に素朴な提案かもしれませんが、ボタン電池で駆動する低電力トランジスタラッチを構築する方法はどうでしょうか。次に、その出力を使用して、電源によって駆動されるOPアンプに供給します。そうすれば、有用な出力を供給する負担のボタン電池をアンロードできます。とにかく、電源がオフになっている間は使用できませんか?

編集:また、以下のコメントによると、電源が切れた場合にラッチがOPアンプから分離されるようにすることをお勧めします。電源から供給されるあらゆる種類のリレー-または同等の回路-は、そこでジョブを実行できる必要があります。

単純な腕時計は何年もボタン電池で駆動できることを考えると、単純なラッチに電力を供給すると、電池ごとの寿命が10年続きます。情報を失うことなく、一度に1つずつ交換できるように、2つのバッテリーを並列に配置することもできます。


シャットダウン時の場合のように、入力電圧が供給電圧よりも高くなるオペアンプはごくわずかしかありません。
アーセナル

その場合、電源が切れてOP-ampへの入力を遮断し、本質的にラッチを遮断する方法はありませんか?どんな種類のリレー-または同等の回路でも-そこにトリックをするでしょうか?
MichaelK

0

小さなCPLDをプログラムして、単純な値のセットをI2Cバスに書き込むために必要なプロトコルを駆動できます。

NXPは、PCA8550 / PCA9561などのディップスイッチを置き換えることを目的とした、非常に小さなメモリを作成します。

2つを組み合わせると、状態を記憶する非常に小さな固体スイッチがあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.