Me gustaría hacer un circuito simple para almacenar o guardar 1 bit de datos. El circuito debería 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 celulares.
Hice un circuito como se muestra en la imagen, la salida es un LED en serie con una resistencia de 470 ohmios. Utilizo dos botones de casquillo 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 capacitor se descargó por completo y el circuito perdió sus datos.
¿Cómo puedo evitar que el capacitor se descargue? 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, uso 555 como inversor (no puerta), pero puedo usar cualquier otro IC. Mi objetivo es hacer una memoria permanente simple.
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 un uno o un cero, se necesita un circuito bastante sofisticado para leerlo de manera confiable.
Los chips no volátiles modernos se basan en el almacenamiento de carga, pero para que esto funcione, debe poder crear un capacitor que tenga esencialmente cero fugas y una forma de leer esa carga. Esto solo se puede hacer en el contexto de la microelectrónica, donde el capacitor es una pequeña pieza de metal (la "puerta flotante") que está completamente recubierta de vidrio (dióxido de silicio) y se lee por medio de su influencia en un transistor cercano. .
Otra opción es la RAM ferroeléctrica (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 información. Una opción obvia es el relé de enganche, 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 de corriente relativamente corto, y la lectura se logra conectando contactos eléctricos a la armadura.
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.
La electrónica pura no hará una celda de memoria permanente, pero la carga en un capacitor puede acercarse a ella (necesitará una actualización regular). La memoria EEPROM/Flash amplía este requisito a decenas de años, por lo que a efectos prácticos se denomina permanente. Pero esto no es algo que puedas hacer con componentes ordinarios.
La memoria permanente real utiliza algún tipo de fenómeno físico biestable. La magnetización de los núcleos de ferrita mencionada por Dave se usó ampliamente (¿alguna vez has oído hablar de un 'volcado de núcleo'?). El relé biestable (o de enganche) 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 única y la complejidad del circuito de conducción. Un núcleo de ferrita es muy simple, pero el circuito de conducción y especialmente el de lectura es muy complejo. Para un relé biestable es 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 demostrar cómo se hace en la práctica (DRAM/Flash) sin que sea práctico, utilice una carga almacenada en un condensador y actualícela periódicamente.
Si quiere hacer algo práctico, use un pequeño microcontrolador que tenga una EEPROM incorporada (o que pueda autoprogramar su FLASH).
un fusible Puede ser molesto reemplazarlo con frecuencia, por lo que podría actualizar a un interruptor.
Una solución simple sería un microcontrolador como el PIC12F635 que está disponible en un DIP de 8 pines o más pequeño, y tiene un reloj incorporado y un circuito de restablecimiento de caída de tensión (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 capacitor 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.
Un relé de enganche como lo menciona @DaveTweed es el más simple.
Si desea una solución de estado sólido, puede usar un IC de memoria de interfaz paralela como este . Puede vincular las líneas de dirección a una dirección fija y usar solo una de las líneas de datos. Necesitará algo de lógica de pegamento adicional.
Si está buscando un proyecto para demostrar la memoria, entonces podría usar un solenoide con un núcleo histérico. 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 ocupa de las escrituras.
Luego móntelo 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.
De la respuesta de fusible/interruptor dada por William Price surgió la solución más obvia:
Un interruptor.
Toma una lámpara. Conéctalo. Enciéndelo. Desenchúfelo. Muévelo a Hawai. Conéctalo.
Se vuelve a encender.
Apágalo. Desenchúfelo. Llévalo a casa. Conéctelo.
Permanece apagado.
Si desea que una computadora active/desactive el LED, no es tan útil. Sin embargo, si usa un interruptor de palanca de botón y un solenoide activado electrónicamente, podría hacer el trabajo. Presione el botón para encender el LED, activa el solenoide, el LED se enciende. Presione de nuevo, el LED se apaga. Desenchúfelo, y el botón todavía está activado o desactivado mecánicamente.
Si desea conservar la funcionalidad explícita "esto si definitivamente está encendido, eso definitivamente está apagado" (en lugar de un interruptor), puede hacer que el botón superior active un solenoide que presiona la parte superior de un interruptor basculante. Luego, el botón inferior activa un segundo solenoide que presiona la parte inferior del interruptor basculante.
No digo que esta sea remotamente la mejor manera de hacerlo, pero es funcional.
La solución más simple de un componente sería un relé biestable. Y solo necesitarás una resistencia para leer el estado.
Podría usar un microcontrolador que tenga una EEPROM incorporada. El PIC16F84A de 8 bits tiene 64 bytes de EEPROM, lo que es bueno para normalmente 10 000 000 y un mínimo de 1 000 000 escrituras en cada byte (esto se conoce como resistencia de bytes). El PIC elegido en otra respuesta, PIC12F635 tiene una EEPROM de 128 bytes y una resistencia de bytes 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á
Dado que la EEPROM necesita capturar los últimos eventos de encendido y apagado, se escribirá el 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 incorporé a un microcontrolador.
Pero hay una solución simple para esto. En lugar de usar el mismo byte una y otra vez para realizar un seguimiento del estado de encendido o apagado, se puede usar una serie de bytes que llenan todo el chip.
Necesita dos bytes para cada elemento de 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 se apagó por última vez) o 0xFF (el LED se encendió por última vez). La próxima vez que acceda a la EEPROM, indexe 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 toda la EEPROM). Si necesita conocer el último estado del LED, indexe la matriz como antes, pero ahora retroceda un elemento y lea el byte de datos.
Básicamente, esto 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 una resistencia de bytes más pequeña 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 función de borrado masivo, podría manejar 25,6 millones de escrituras, suficiente para más de cinco años.
Si la tasa de parpadeo fue solo cuatro veces por hora en lugar de cuatro veces por minuto , 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!
Esta puede ser una sugerencia muy ingenua ... pero ¿qué tal construir un pestillo de transistor de baja potencia impulsado por una batería de botón ? Luego use la salida de eso para alimentar un amplificador operacional que es impulsado por la fuente de alimentación . Así descargas la pila de botón del esfuerzo de alimentar la salida útil; no puedes usar eso de todos modos mientras el suministro está apagado, ¿verdad?
EDITAR: Además, de acuerdo con el comentario a continuación, es recomendable 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 debería poder hacer el trabajo allí.
Teniendo en cuenta que un simple reloj de pulsera puede funcionar con una pila de botón durante años, encender un pestillo simple debería darle una vida útil por pila de una década. Incluso puede poner dos baterías en paralelo para poder intercambiarlas, una a la vez, sin perder la información.
Se puede programar un CPLD pequeño para controlar el protocolo necesario para escribir un conjunto simple de valores en un bus I2C.
NXP fabrica 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.
Ignacio Vázquez-Abrams
holamundo922
miguel jorge
Ignacio Vázquez-Abrams
david tweed
pjc50
Faraón
david tweed