¿Cómo hacer un circuito de memoria permanente de 1 bit?


13

Me gustaría hacer un circuito simple para almacenar o guardar 1 bit de datos. El circuito debe poder recordar el estado de un LED (encendido o apagado) incluso si el suministro está desconectado del circuito. Necesito que funcione como un disco duro, memoria flash o tarjeta de memoria SD de teléfonos celulares.

Hice un circuito como se muestra en la imagen, la salida es un LED en serie con resistencia de 470 ohmios. Utilizo dos botones de bush para cargar o descargar el condensador para que el LED de salida esté encendido o apagado.

Después de desconectar el suministro o apagar la electricidad, el circuito pudo recordar el estado del LED durante unos minutos.

Después de 2 o 3 minutos, el condensador se descargó por completo y el circuito perdió sus datos.

ingrese la descripción de la imagen aquí ¿Cómo puedo detener la descarga del capacitor? ¿O cómo puedo reducir la velocidad de descarga para que el circuito pierda sus datos después de una semana o más?

En este circuito, utilizo 555 como inversor (no puerta), pero puedo utilizar cualquier otro IC, mi objetivo es crear una memoria permanente simple.


1
¿Qué tan reacio eres a usar una celda de moneda? No hay forma de duplicar una celda EEPROM / flash / FRAM a nivel macro.
Ignacio Vazquez-Abrams

8
@ IgnacioVazquez-Abrams Podría usar un relé de enclavamiento ...
helloworld922

2
@MichaelGeorge: No, el objetivo de un relé de enclavamiento es que utiliza un imán permanente para preservar su estado sin la aplicación de energía externa. Solo necesita un pulso de electricidad para cambiar su estado.
Dave Tweed

66
Puede obtener un condensador para mantener su carga durante una semana con un diseño y construcción cuidadosos: m.electronicdesign.com/analog/…
pjc50

3
Con respecto a la descarga del condensador: pueden retener el voltaje durante MUCHO tiempo, si se desconectan adecuadamente. robotroom.com/Capacitor-Self-Discharge-1.html
FarO

Respuestas:


29

La memoria electrónica no volátil original se basa en núcleos de ferrita. Si bien es relativamente fácil magnetizar un núcleo de este tipo en una dirección u otra para almacenar uno o cero, se necesitan algunos circuitos bastante sofisticados para volver a leerlo de manera confiable.

Los chips no volátiles modernos dependen del almacenamiento de carga, pero para que esto funcione, debe poder crear un condensador que esencialmente no tenga fugas y una forma de leer esa carga. Esto solo se puede hacer en el contexto de la microelectrónica, donde el condensador es una pequeña pieza de metal (la "puerta flotante") que está completamente encerrada en vidrio (dióxido de silicio) y se lee por medio de su influencia en un transistor cercano. .

Otra opción es la RAM ferrorelectrica (FRAM), que utiliza un material dieléctrico especial que tiene dos estados de polarización estables y distintos. Nuevamente, esto solo funciona en microelectrónica.

Por lo tanto, debe elegir algún otro fenómeno físico para almacenar su bit de información. Una opción obvia es el relé de enclavamiento, que almacena información en la posición física de su armadura, que se mantiene en cualquiera de las dos posiciones estables mediante un imán permanente o un resorte. La posición se puede cambiar aplicando un pulso relativamente corto de corriente, y la lectura se logra conectando contactos eléctricos a la armadura.



Como solo tiene un núcleo, ¿no podría leerlo con un sensor de efecto Hall o algo así?
user253751

1
@immibis: no es fácil. El campo magnético está casi completamente contenido dentro del núcleo mismo, con muy poca fuga externa.
Dave Tweed

8

Haga un circuito que active un interruptor mecánico, por ejemplo. caja inútil El circuito necesitaría ser encendido para cambiar / leer el estado, pero lo mantendría en el medio.


6

Una solución simple sería un microcontrolador como un PIC12F635 que está disponible en un DIP de 8 pines o más pequeño, y tiene un reloj incorporado y un circuito de reinicio de caída de voltaje (este último es importante para mantener la integridad de la EEPROM no volátil almacenamiento).

El código requerido no es mucho, un buen proyecto inicial.

Las únicas partes externas requeridas serían un condensador de derivación y una resistencia limitadora de corriente para el LED.

La solución más simple es probablemente un relé de señal de enclavamiento de 2 bobinas.


6

La electrónica pura no hará una celda de memoria permanente, pero la carga en un condensador puede acercarse a ella (necesitará una actualización periódica). La memoria EEPROM / Flash extiende este requisito a 10 años, por lo que para fines prácticos se llama permanente. Pero esto no es algo que alcances con los componentes ordinarios.

La memoria permanente real utiliza algún tipo de fenómeno físico bi-estable. La magnetización de los núcleos de ferrita mencionados por Dave se usó ampliamente (¿alguna vez se le escuchó un "volcado de núcleo"?). El relé biestable (o de enclavamiento) mencionado por helloworld922 es más fácil de usar.

Cuando observa cómo se hizo esto en las primeras computadoras, debe darse cuenta de que existe un equilibrio entre la complejidad de la celda individual y la complejidad del circuito de conducción. Un núcleo de ferrita es muy simple, pero la conducción y especialmente el circuito de lectura es muy complejo. Para un relé biestable es todo lo contrario: el relé es bastante complejo por bit, pero el circuito de control es muy simple.

¿Cual es tu propósito?

  • Si desea hacer una celda solo por diversión, use un relé biestable.

  • Si desea hacer una demostración de cómo se hace en la práctica (DRAM / Flash) sin ser práctico, use una carga almacenada en un condensador y actualícela regularmente.

  • Si desea hacer algo práctico, use un pequeño microcontrolador que tenga EEPROM incorporada (o que pueda programar su FLASH).


5

Un fusible Puede ser molesto reemplazarlo con frecuencia, por lo que puede actualizar a un interruptor.


55
Esto es un poco delgado para una respuesta en EE. UU. Por favor elabora.
Nick Alexeev

2
Entonces ... aparece un 1 por defecto (la corriente pasará), para establecer a cero, envía una descarga de corriente a través del fusible para quemarlo, ahora la corriente no pasará, para establecer a 1 nuevamente, reemplace ¿el fusible?
Michael

1
Me gusta el pensamiento original aquí. Cuando presiona el botón para apagar el LED, se dispara el interruptor. Cuando presiona el botón para encender el LED, restablece el interruptor. Es solo una versión extraña del relé de enclavamiento. Probablemente no sea la mejor opción, pero aún disfruto de la creatividad.
MichaelS

1
Simplemente me refería a cómo funcionaban los primeros dispositivos ROM. Eran una serie de fusibles. Sople los fusibles donde quiera ceros. No pensé que requeriría una visión más profunda. Muy de la vieja escuela.
William Price

3

Solución práctica:

Un relé de enclavamiento como lo menciona @DaveTweed es el más simple.

Si desea una solución de estado sólido, podría usar una memoria de interfaz paralela IC como esta . Simplemente puede vincular las líneas de dirección a una dirección fija y solo usar una de las líneas de datos. Necesitarás algo de lógica de pegamento adicional.

Solución interesante:

Si está buscando un proyecto para demostrar memoria, entonces podría usar un solenoide con algún núcleo histéreo. Sature el núcleo en una dirección para almacenar un 1, satúrelo en la otra dirección para almacenar un 0. Eso se encarga de las escrituras.

Luego monte eso justo encima de un sensor como este sensor de pasillo . Luego puede observar la polaridad del campo remanente con el sensor hall (solo un comparador analógico) para determinar el estado.


3

De la respuesta de fusible / disyuntor dada por William Price vino la solución más obvia:

Un interruptor.

Toma una lampara. Enchúfelo. Enciéndalo. Desenchúfelo. Muévelo a Hawai. Enchúfelo.
Se vuelve a encender.

Apágalo. Desenchúfelo. Llévalo a casa. Enchúfelo.
Se queda apagado.

Si desea que una computadora active / desactive el LED, no es tan útil. Sin embargo, si utiliza un interruptor de palanca y un solenoide activado electrónicamente, puede hacer el trabajo. Presione el botón para encender el LED, activa el solenoide, el LED se enciende. Presione nuevamente, el LED se apaga. Desconéctelo, y el botón todavía está mecánicamente activado o desactivado.

Si desea conservar la funcionalidad explícita "esto si está definitivamente encendido, eso está definitivamente apagado" (en lugar de una palanca), puede hacer que el botón superior active un solenoide que presiona en la parte superior de un interruptor de encendido. Luego, el botón inferior activa un segundo solenoide que presiona la parte inferior del interruptor.

No digo que esto sea remotamente la mejor manera de hacerlo, pero es funcional.


1
Todo lo que ha hecho es describir cómo construir un relé biestable, que fue una de las primeras soluciones propuestas.
Dave Tweed

La segunda parte, sí, es solo una descripción de un relé biestable torpe, quizás útil si está interesado en construir su propio relé. La primera parte, sin embargo, no lo es. No creo que coincida con la intención de la pregunta (supongo que está interesado en aprender electrónica en lugar de construir el diseño más simple posible), pero un solo interruptor de palanca es un diseño más simple y fácil que los bits electrónicos, y cumple con los requisitos establecidos en Las primeras dos oraciones.
MichaelS

Puede que tenga razón, pero nunca estaremos seguros ya que el OP nunca volvió a discutirlo, aunque él "aceptó" mi respuesta. Interpreté que la intención general de la pregunta se refería a la memoria regrabable electrónicamente, basada en "El circuito debería ser capaz de recordar el estado de un LED" . Esto descartaría la memoria de solo lectura (interruptores, puentes, diodos, etc.) y la memoria de escritura única (fusibles).
Dave Tweed

Mi pensamiento es que el estado del LED está directamente relacionado con qué botón se presionó por última vez. Desde un punto de vista lógico, capturar el estado de los botones es idéntico a capturar el estado del LED.
MichaelS

2

La solución más simple de un componente sería un relé biestable. Y solo necesitará una resistencia para leer el estado.


2

Podrías usar un microcontrolador que haya incorporado EEPROM. El PIC16F84A de 8 bits tiene 64 bytes de EEPROM, que es bueno para típicamente 10,000,000 y un mínimo de 1,000,000 de escrituras en cada byte (esto se conoce como resistencia de byte). El PIC elegido en otra respuesta, PIC12F635 tiene una EEPROM de 128 bytes y una resistencia de 100.000 escrituras. El PIC24F16KA102 , un procesador de 16 bits, tiene 512 bytes de EEPROM y también una resistencia de bytes de 100,000 escrituras.

El OP no indica con qué frecuencia parpadeará el LED. Para los propósitos de esta discusión, supongamos que es cuatro veces por minuto.

En un año parpadeará

4 460 6024365=2,102,400 tyometromis.

Dado que la EEPROM necesita capturar los últimos eventos de encendido y apagado, se escribirá al doble de ese número, o alrededor de 4,2 millones de veces . En cinco años, esto es 21 millones de veces.

Claramente, esto excederá las especificaciones de cualquier EEPROM que ahora haya incorporado en un microcontrolador.

Pero hay una solución simple para esto. En lugar de utilizar el mismo byte una y otra vez para realizar un seguimiento del estado activado o desactivado, se puede utilizar una matriz de bytes, que llenan todo el chip.

Necesita dos bytes para cada elemento en la matriz. Entonces, una EEPROM de 64 bytes, como la del PIC16F84A, podría contener 32 elementos. Cada vez que escribe en la EEPROM, escribe un 0 en el byte de estado (lo que significa que este elemento tiene datos) y un 0 en el byte de datos (el LED estaba apagado por última vez) o un 0xFF (el LED estaba encendido por última vez). La próxima vez que acceda a la EEPROM, indexará a través de los elementos hasta que encuentre uno con un byte de estado 0xFF, y luego use ese elemento. Si no queda ninguno, reinicialice la EEPROM y comience de nuevo (para los PIC de gama baja, esto significa escribir 0xFF en cada uno de los bytes de estado; para el PIC24, hay un comando para borrar la EEPROM completa). Si necesita conocer el último estado del LED, indexe a través de la matriz como antes, pero ahora retroceda un elemento y lea el byte de datos.

ingrese la descripción de la imagen aquí

Esto esencialmente divide el número de accesos a un solo byte por un factor de 16 para el PIC16F84A (16 y no 32 porque cada uno de los bytes de estado se escribe dos veces). Por lo tanto, podría manejar 16 millones de escrituras en total, suficiente para casi cuatro años de datos. Y el PIC12F635 con su EEPROM más grande pero con una resistencia de byte menor de 100K, podría manejar 3.2 millones de escrituras en total, suficiente para nueve meses.

El PIC24F16KA102, con su EEPROM de 512 bytes y su función de borrado masivo, podría manejar 25.6 millones de escrituras, suficiente por más de cinco años.

Si la tasa de parpadeo fue solo cuatro veces por hora en lugar de cuatro veces por minuto , entonces esto significa un total de 70,080 escrituras por año. ¡Incluso el PIC12F635, con su resistencia de 100,000 escrituras por byte, duraría 45 años!


Puede abstenerse de escribir en EEPROM hasta después de una pérdida de energía. Los condensadores deben almacenar suficiente carga para mantener el uC funcionando el tiempo suficiente para escribir el estado actual. Esto podría aumentar considerablemente la longevidad de su EEPROM.
MichaelS

Además, ¿por qué no usar múltiples bits por byte? El primer byte almacena 7 bits de datos de conteo y 1 bit de datos LED. La primera vez que escribe, establece el byte en 0000001L, luego 0000010L, etc. Cuando llega a 1111111L, restablece el siguiente byte a todos los ceros. Después de llegar al último byte, restablece el primer byte a ceros. Luego, su próxima ubicación de lectura es el primer byte cuyos 7 bits superiores son 0 <7 bits <= 127, y la siguiente ubicación de escritura es el primer byte con 7 bits <127. Ahora casi ha duplicado sus accesos porque (casi ) cada escritura es a un solo byte en lugar de dos.
MichaelS

@ Michael También pensé en eso. Primero, no puedes pasar de 11111110 a 11111101 porque no puedes escribir 1 (invertí tu condición inicial). En cambio, escribirías 0, uno a la vez a través del byte. Pero en realidad no sirve de nada en términos de limitar el número de escrituras por byte: terminas teniendo que escribir en cada byte ocho veces en lugar de una vez.
tcrosley

No he usado los dispositivos PIC exactos en cuestión, pero entiendo que borras todos los datos y luego cambias los bits que no deberían ser predeterminados de inmediato. Entonces, si "borrado" significa todos los 1, entonces borrarías todo y cambiarías los bits 1-6 y posiblemente L. A continuación, borrarías todo y cambiarías los bits 1-5, 7, posiblemente L. Hacia el final de la cuenta , solo estaría cambiando algunos bits (1110110L -> 1110111L solo cambia los bits 4 y L). Debido a que hay un 50% de posibilidades por borrado y un 50% por escritura, para que un bit determinado se borre, es un promedio de 100% u 8 bits por ciclo de borrado / escritura.
MichaelS

Con su método, todo el byte de estado se borra un tiempo antes de su uso, luego se establece en cero en uso, o 16 bits por ciclo de borrado / escritura. Al mismo tiempo, su byte de datos completo tiene una probabilidad del 50% por borrado, una probabilidad del 50% por escritura o un promedio de 8 bits por ciclo de borrado / escritura. El total es entonces de 24 bits por ciclo. Incluso si suponemos que cada ciclo de borrado / escritura es equivalente por byte, todavía cambian dos bytes en lugar de uno. (No se puede editar el comentario anterior, quise decir 50/50 para que un bit determinado cambie , no se borre, en la última oración.)
MichaelS

2

Esta puede ser una sugerencia muy ingenua ... pero ¿qué hay de construir un pestillo de transistor de baja potencia impulsado por una batería de botón ? Luego use la salida de eso a alimentar un amplificador operacional que es impulsado por la fuente de alimentación . De ese modo, descarga la batería del botón de la tensión de alimentar la salida útil; no puedes usar eso de todos modos mientras el suministro está apagado, ¿verdad?

EDITAR: Además, según el comentario a continuación, es aconsejable hacerlo de modo que el pestillo esté aislado del amplificador operacional si el suministro desaparece. Cualquier tipo de relé, o circuito equivalente, alimentado por el suministro debe poder hacer el trabajo allí.

Teniendo en cuenta que un simple reloj de pulsera puede funcionar con una batería de botón durante años, accionar un pestillo simple debería darle una vida útil por batería que dura una década. Incluso puede poner dos baterías en paralelo para poder cambiarlas, una a la vez, sin perder la información.


Solo hay muy pocos amplificadores operacionales disponibles que permitan un voltaje en la entrada más alto que el voltaje de suministro, que sería el caso durante el apagado.
Arsenal

Si ese es el caso, ¿no hay una manera de cerrar la entrada al amplificador operacional si el suministro desaparece, esencialmente aislando el pestillo? Cualquier tipo de relé, o circuito equivalente, funcionaría allí, ¿no?
MichaelK

0

Se puede programar un CPLD pequeño para controlar el protocolo necesario para escribir un conjunto simple de valores en un bus I2C.

NXP crea una gama de memorias muy pequeñas, destinadas a reemplazar los interruptores DIP, por ejemplo, PCA8550 / PCA9561.

Combine los dos y tendrá un interruptor de estado sólido muy pequeño que recuerda su estado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.