Как сделать 1-битную схему постоянной памяти?


13

Я хотел бы сделать простую схему для хранения или сохранения 1 бита данных. Цепь должна быть в состоянии запомнить состояние светодиода (включен или выключен), даже если питание отключено от цепи. Мне нужно, чтобы он работал как жесткий диск, флэш-память или карта памяти SD мобильных телефонов.

Я сделал схему, как показано на рисунке, на выходе есть светодиод последовательно с резистором 470 Ом. Я использую две кнопки втулки для зарядки или разрядки конденсатора, чтобы выходной светодиод был включен или выключен.

После отключения питания или отключения электричества цепь смогла запомнить состояние светодиода на несколько минут.

Через 2 или 3 минуты конденсатор полностью разрядился и схема потеряла свои данные.

введите описание изображения здесь Как я могу остановить разрядку конденсатора? или как я могу снизить скорость разряда, чтобы цепь теряла свои данные через неделю или более?

В этой схеме я использую 555 в качестве инвертора (не гейта), но я могу использовать любые другие микросхемы. Моя цель - просто создать простую постоянную память.


1
Насколько вы против использования ячейки монеты? Невозможно дублировать ячейку EEPROM / flash / FRAM на макроуровне.
Игнасио Васкес-Абрамс

8
@ IgnacioVazquez-Abrams Вы можете использовать реле с
блокировкой

2
@MichaelGeorge: Нет, весь смысл защелкивающегося реле в том, что оно использует постоянный магнит для сохранения своего состояния без применения внешнего питания. Вам просто нужен импульс электричества, чтобы изменить его состояние.
Дэйв Твид

6
Вы можете получить конденсатор, чтобы держать его заряд в течение недели с некоторым тщательным проектированием и конструкцией: m.electronicdesign.com/analog/…
pjc50

3
Относительно разряда конденсаторов: они могут сохранять напряжение в течение ДЛИТЕЛЬНОГО времени, если правильно отсоединены. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Ответы:


29

Оригинальная электронная энергонезависимая память основана на ферритовых сердечниках. Хотя относительно легко намагничивать такое ядро ​​в одном или другом направлении, чтобы сохранить единицу или ноль, для надежного считывания требуется несколько довольно сложных схем.

Современные энергонезависимые микросхемы основаны на накоплении заряда, но для того, чтобы это работало, вам необходимо создать конденсатор с практически нулевой утечкой и способ считывания этого заряда. Это может быть сделано только в контексте микроэлектроники, где конденсатор представляет собой крошечный кусок металла («плавающий затвор»), который полностью заключен в стекло (диоксид кремния) и считывается посредством его влияния на соседний транзистор. ,

Другим выбором является ферроэлектрическое ОЗУ (FRAM), в котором используется специальный диэлектрический материал, имеющий два различных стабильных состояния поляризации. Опять же, это работает только в микроэлектронике.

Поэтому вам нужно выбрать какое-то другое физическое явление для хранения вашей информации. Одним очевидным выбором является запирающее реле, которое хранит информацию в физическом положении своего якоря, которое удерживается в одном из двух устойчивых положений постоянным магнитом или пружиной. Положение может быть изменено путем подачи относительно короткого импульса тока, а считывание осуществляется путем присоединения электрических контактов к якорю.


1
тематическая ссылка: hackaday.com/2015/08/31/core-memory-for-the-hard-core
RJR

Поскольку у вас есть только одно ядро, не могли бы вы прочитать его с помощью датчика Холла или чего-то еще?
user253751

1
@immibis: не легко. Магнитное поле почти полностью содержится внутри самого сердечника, с очень малой внешней утечкой.
Дэйв Твид

8

Сделайте цепь, которая щелкает механическим выключателем, например. бесполезная коробка. Схема должна быть включена, чтобы изменить / прочитать состояние, но это будет держать его между ними.


6

Простым решением будет микроконтроллер, такой как PIC12F635 который доступен в 8-контактном DIP или меньше, и имеет встроенную схему сброса тактовых импульсов и отключения (последний важен для поддержания целостности энергонезависимой ЭСППЗУ). место хранения).

Требуемый код не очень, хороший стартовый проект.

Единственными необходимыми внешними деталями будут байпасный конденсатор и ограничитель тока для светодиода.

Самым простым решением, вероятно, является сигнальное реле с 2 катушками.


6

Чистая электроника не создаст постоянную ячейку памяти, но заряд в конденсаторе может приблизиться к ней (потребуется регулярное обновление). ЭСППЗУ / флэш-память расширяет это требование до 10 лет, поэтому для практических целей она называется постоянной. Но это не то, что вы делаете с обычными компонентами.

Настоящая постоянная память использует некое физическое бистабильное явление. Намагничивание ферритовых сердечников, упомянутых Дейвом, широко использовалось (когда-либо слышали о «сбросе сердечника»?). Бистабильное (или защелкивающееся) реле, упомянутое helloworld922, проще в использовании.

Когда вы посмотрите на то, как это было сделано на ранних компьютерах, вы должны понять, что существует баланс между сложностью отдельной ячейки и сложностью схемы управления. Ферритовый сердечник очень прост, но схема управления и особенно схема считывания очень сложны. Для бистабильного реле все наоборот: реле довольно сложное на бит, но схема управления очень проста.

Какова ваша цель?

  • Если вы хотите сделать одну ячейку ради удовольствия, используйте бистабильное реле.

  • Если вы хотите продемонстрировать, как это делается на практике (DRAM / Flash), не будучи практичным, используйте заряд, хранящийся в конденсаторе, и регулярно обновляйте его.

  • Если вы хотите сделать что-то практичное, используйте небольшой микроконтроллер со встроенной EEPROM (или можете самостоятельно программировать его FLASH).


5

Предохранитель Часто меня раздражает замена, так что вы можете перейти на прерыватель.


5
Это немного тонко для ответа на EE.SE. Пожалуйста, дополните.
Ник Алексеев

2
Итак ... по умолчанию устанавливается 1 (ток пройдет), чтобы установить на ноль, вы посылаете ток тока через предохранитель, чтобы перегореть, теперь ток не пройдет, чтобы снова установить на 1, вы заменяете предохранитель?
Майкл

1
Мне нравится нестандартное мышление здесь. Когда вы нажимаете кнопку, чтобы выключить светодиод, он отключает выключатель. Когда вы нажимаете кнопку, чтобы включить светодиод, он сбрасывает выключатель. Это просто странная версия запирающего реле. Вероятно, не самый лучший вариант, но я все еще наслаждаюсь творчеством.
MichaelS

1
Я просто имел в виду, как работали ранние устройства ROM. Они были массивом взрывателей. Перегорайте предохранители там, где хотите нули. Я не думал, что это потребует более глубокого понимания. Очень старая школа.
Уильям Прайс

3

Практическое решение:

Реле с фиксацией, как упомянуто @DaveTweed, является самым простым.

Если вы хотите твердотельное решение, вы можете использовать микросхему памяти параллельного интерфейса, как эта вещь . Вы можете просто привязать адресные строки к фиксированному адресу и использовать только одну из строк данных. Вам понадобится дополнительная клейкая логика.

Интересное решение:

Если вы ищете проект для демонстрации памяти, то вы можете использовать соленоид с некоторым гистерезисным ядром. Насыщать ядро ​​в одном направлении, чтобы сохранить 1, насыщать его в другом направлении, чтобы сохранить 0. Это заботится о записи.

Затем установите его над датчиком, таким как датчик Холла . Затем вы можете посмотреть на полярность остаточного поля с помощью датчика Холла (просто аналоговый компаратор), чтобы определить состояние.


3

Из ответа предохранителя / прерывателя, данного Уильямом Прайсом, пришло наиболее очевидное решение:

Переключатель.

Возьми лампу. Подключите его. Включите. Отключите его. Переместить его на Гавайи. Подключите его.
Он снова включается.

Выключи это. Отключите его. Возьми это домой. Подключите его.
Он остается выключенным.

Если вы хотите, чтобы компьютер активировал / деактивировал светодиод, это не так полезно. Однако, если вы используете тумблер кнопки и соленоид с электронным управлением, вы можете выполнить свою работу. Нажмите кнопку, чтобы включить светодиод, он активирует соленоид, светодиод включается. Нажмите еще раз, светодиод выключится. Отключите его, и кнопка все еще механически включена или выключена.

Если вы хотите сохранить явную функциональность «это если определенно включено, то определенно выключено» (вместо переключателя), вы можете заставить верхнюю кнопку активировать один соленоид, который нажимает на верхнюю часть переключателя. Затем нижняя кнопка активирует второй соленоид, который нажимает на нижнюю часть переключателя.

Не сказать, что это лучший способ сделать это удаленно, но это функционально.


1
Все, что вы сделали, это описали, как построить бистабильное реле, что было одним из первых предложенных решений.
Дэйв Твид

Вторая часть, да, это просто описание неуклюжего бистабильного реле, может быть полезно, если он заинтересован в создании своего собственного реле. Первая часть, однако, нет. Я не думаю, что это соответствует цели вопроса (я предполагаю, что он интересуется изучением электроники, а не созданием самой простой конструкции), но один тумблер является более простой и простой конструкцией, чем электронные биты, и отвечает требованиям, приведенным в первые пару предложений.
MichaelS

Вы можете быть правы, но мы никогда не будем уверены, так как ОП никогда не возвращался, чтобы обсудить это - хотя он «принял» мой ответ. Я интерпретировал общее намерение этого вопроса, чтобы обратиться к электронно перезаписываемой памяти, основываясь на «Схема должна быть в состоянии запомнить состояние светодиода» . Это исключит постоянную память (переключатели, перемычки, диоды и т. Д.) И однократную запись (предохранители).
Дэйв Твид

Я думаю, что состояние светодиода напрямую связано с тем, какая кнопка была нажата последней. С логической точки зрения регистрация состояния кнопок идентична записи состояния светодиода.
MichaelS

2

Самым простым однокомпонентным решением будет бистабильное реле. И вам понадобится только резистор, чтобы прочитать состояние.


2

Вы можете использовать микроконтроллер, который имеет встроенную EEPROM. 8-битный PIC16F84A имеет 64 байта EEPROM, что обычно для 10 000 000 и минимум 1 000 000 записей в каждый байт (это известно как стойкость байтов). PIC, выбранный в другом ответе, PIC12F635, имеет 128-байтовую EEPROM и выдерживает байты 100 000 операций записи. PIC24F16KA102 , 16-битный процессор, имеет 512 байт EEPROM , а также выносливость байт 100000 записей.

ОП не указывает, как часто светодиод будет мигать. Для целей этого обсуждения давайте предположим, что это четыре раза в минуту.

Через год он будет мигать

4*60*24*365знак равно2,102,400 Tямеs,

Поскольку EEPROM должна записывать как последние события включения, так и выключения, она будет записана в два раза больше этого числа, или примерно в 4,2 миллиона раз . За пять лет это будет 21 миллион раз.

Ясно, что это превысит спецификации любого EEPROM, который я сейчас встроил в микроконтроллер.

Но для этого есть простое решение. Вместо того, чтобы использовать один и тот же байт снова и снова для отслеживания состояния включения или выключения, можно использовать массив байтов, который заполняет весь чип.

Вам нужно два байта для каждого элемента в массиве. Таким образом, 64-байтовая EEPROM, как и в PIC16F84A, может содержать 32 элемента. Каждый раз, когда вы пишете в EEPROM, вы записываете 0 в байт состояния (это означает, что у этого элемента есть данные) и либо 0 в байт данных (светодиод был последним выключенным), либо 0xFF (светодиод был последним включенным). В следующий раз, когда вы получите доступ к EEPROM, вы индексируете элементы, пока не найдете элемент с байтом состояния 0xFF, а затем используете этот элемент. Если ничего не осталось, то заново инициализируйте EEPROM и начните заново (для PIC нижнего уровня это означает запись 0xFF в каждый из байтов состояния; для PIC24 есть команда для удаления всего EEPROM). Если вам нужно знать последнее состояние светодиода, вы индексируете массив, как и раньше, но теперь возвращаетесь на один элемент назад и считываете байт данных.

введите описание изображения здесь

Это, по существу, делит число обращений к одному байту в 16 раз для PIC16F84A (16, а не 32, поскольку каждый из байтов состояния записывается дважды). Таким образом, он сможет обработать 16 миллионов записей, что достаточно для почти четырехлетних данных. И PIC12F635 с его большей EEPROM, но меньшей байтовой стойкостью в 100 Кбайт сможет обрабатывать всего 3,2 миллиона операций записи, чего хватит на девять месяцев.

PIC24F16KA102, с 512-байтовым EEPROM и функцией массового стирания, сможет обрабатывать 25,6 миллиона операций записи, чего хватит на пять лет.

Если частота мигания была только четыре раза в час вместо четырех раз в минуту , то это означает, что в общей сложности 70 080 записей в год. Даже PIC12F635, с его выносливостью 100 000 операций записи на байт, прослужит 45 лет!


Вы можете воздерживаться от записи в EEPROM до потери мощности. Конденсаторы должны хранить достаточно заряда, чтобы поддерживать работу УК в течение достаточного времени для записи текущего состояния. Это может значительно увеличить долговечность вашей EEPROM.
MichaelS

Кроме того, почему бы не использовать несколько битов на байт? Первый байт хранит 7 бит данных счета и 1 бит данных светодиода. При первой записи вы устанавливаете байт 0000001L, затем 0000010L и т. Д. Когда он достигает 1111111L, вы сбрасываете следующий байт на все нули. Получив последний байт, вы сбрасываете первый байт в ноль. Тогда ваше следующее местоположение чтения - это первый байт, чьи старшие 7 битов равны 0 <7-бит <= 127, а следующее местоположение записи - первый байт с 7-битным <127. Теперь вы почти удвоили свой доступ, потому что (почти ) каждая запись в один байт вместо двух.
MichaelS

@MichaelS Я тоже об этом думал. Во-первых, вы не можете перейти с 11111110 на 11111101, потому что вы не можете записать 1 (я перевернул ваше начальное условие.) Вместо этого вы бы записали 0, по одному через байт. Но на самом деле это не приносит никакой пользы с точки зрения ограничения количества записей на байт - в итоге вам придется записывать каждый байт восемь раз, а не один раз.
tcrosley

Я не использовал конкретные устройства PIC, о которых идет речь, но, насколько я понимаю, вы удаляете все данные, а затем меняете все биты, которые не должны быть по умолчанию сразу. Таким образом, если «стереть» означает все 1, то вы удалили бы все и изменили биты 1-6 и, возможно, L. Затем, вы удалили бы все и изменили биты 1-5, 7, возможно, L. К концу счета Вы бы изменили только несколько бит (1110110L -> 1110111L изменяет только бит 4 и L). Поскольку существует вероятность 50% на стирание и 50% на запись, при удалении данного бита это в среднем составляет 100% или 8 бит на цикл стирания / записи.
MichaelS

При использовании вашего метода весь байт состояния стирается за некоторое время до использования, затем устанавливается на ноль при использовании или 16 бит на цикл стирания / записи. В то же время весь ваш байт данных имеет шанс 50% на стирание, 50% на запись или среднее значение 8 бит на цикл стирания / записи. Всего получается 24 бита за цикл. Даже если мы предположим, что каждый цикл стирания / записи эквивалентен каждому байту, он все равно меняет два байта вместо одного. (Невозможно изменить вышеупомянутый комментарий, я имел в виду 50/50 для данного бита, который будет изменен , а не удален в последнем предложении.)
MichaelS

2

Это может быть очень наивным предложением ... но как насчет создания маломощной транзисторной защелки, приводимой в действие кнопочной батареей . Затем используйте выход этого сигнала для подачи на операционный усилитель, который приводится в действие источником питания . Таким образом, вы разряжаете батарею кнопки, из-за чего вы загружаете полезную продукцию; Вы не можете использовать это в любом случае, когда питание отключено, верно?

РЕДАКТИРОВАТЬ: Кроме того - в соответствии с комментарием ниже - желательно сделать так, чтобы защелка была изолирована от операционного усилителя, если питание исчезает. Любое реле или эквивалентная схема, питаемая источником питания, должно быть в состоянии выполнить работу там.

Учитывая, что простые наручные часы могут работать от батарейки на кнопке в течение многих лет, питание простой защелки должно дать им срок службы на батарею, который длится десятилетие. Вы можете даже поставить две батареи параллельно, чтобы вы могли их поменять - по одной за раз - без потери информации.


Имеется очень мало доступных операционных усилителей, которые допускают напряжение на входе выше, чем напряжение питания, что было бы в случае отключения.
Арсенал

Если это так, разве нет способа отключить вход для операционного усилителя, если питание отключается, по существу изолируя защелку? Любое реле - или эквивалентная схема - сработает, не так ли?
MichaelK

0

Небольшой CPLD может быть запрограммирован для управления протоколом, необходимым для записи простого набора значений на шину I2C.

NXP производит серию очень маленьких блоков памяти, предназначенных для замены dip-переключателей, например, PCA8550 / PCA9561.

Объедините их, и вы получите очень маленький полупроводниковый переключатель, который запоминает его состояние.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.