Je voudrais faire un circuit simple pour stocker ou enregistrer 1 bit de données. Le circuit doit pouvoir se souvenir de l'état d'une LED (allumée ou éteinte) même si l'alimentation est déconnectée du circuit. J'en ai besoin pour fonctionner comme un disque dur, une mémoire flash ou une carte mémoire SD de téléphones portables.
J'ai fait un circuit comme indiqué sur l'image, la sortie est une LED en série avec une résistance de 470 ohms. J'utilise deux boutons de bush pour charger ou décharger le condensateur afin que la LED de sortie soit allumée ou éteinte.
Après avoir coupé l'alimentation ou coupé l'électricité, le circuit a pu se souvenir de l'état de la LED pendant quelques minutes.
Après 2 ou 3 minutes, le condensateur s'est complètement déchargé et le circuit a perdu ses données.
Comment puis-je empêcher le condensateur de se décharger? ou comment puis-je ralentir la vitesse de décharge pour que le circuit perde ses données après une semaine ou plus?
Dans ce circuit, j'utilise 555 comme onduleur (pas de porte) mais je peux utiliser n'importe quel autre CI, mon objectif est simplement de créer une simple mémoire permanente.
la source
Réponses:
La mémoire électronique non volatile d' origine est basée sur des noyaux de ferrite. Bien qu'il soit relativement facile de magnétiser un tel noyau dans une direction ou dans l'autre pour stocker un ou un zéro, il faut des circuits assez sophistiqués pour le relire de manière fiable.
Les puces non volatiles modernes reposent sur le stockage des charges, mais pour que cela fonctionne, vous devez être en mesure de créer un condensateur qui n'a pratiquement aucune fuite et un moyen de lire cette charge. Cela ne peut se faire que dans le contexte de la microélectronique, où le condensateur est un minuscule morceau de métal (la "grille flottante") qui est complètement enveloppé dans du verre (dioxyde de silicium) et qui est lu au moyen de son influence sur un transistor à proximité. .
Un autre choix est la RAM ferrorélectrique (FRAM), qui utilise un matériau diélectrique spécial qui a deux états de polarisation stables et distincts. Encore une fois, cela ne fonctionne que dans la microélectronique.
Par conséquent, vous devez choisir un autre phénomène physique pour stocker votre information. Un choix évident est le relais de verrouillage, qui stocke les informations dans la position physique de son armature, qui est maintenue dans l'une des deux positions stables par un aimant permanent ou un ressort. La position peut être modifiée en appliquant une impulsion de courant relativement courte, et la lecture est réalisée en fixant des contacts électriques à l'armature.
la source
Faire un circuit qui actionne un interrupteur mécanique, par exemple. boîte inutile. Le circuit devrait être alimenté pour changer / lire l'état mais il le garderait entre les deux.
la source
Une solution simple serait un microcontrôleur tel qu'un PIC12F635 qui est disponible dans un DIP à 8 broches ou plus petit, et a une horloge intégrée et un circuit de réinitialisation de brunissement (ce dernier est important pour maintenir l'intégrité de l'EEPROM non volatile espace de rangement).
Le code requis n'est pas beaucoup, un bon projet de démarrage.
Les seules pièces externes requises seraient un condensateur de dérivation et une résistance de limitation de courant pour la LED.
La solution la plus simple est probablement un relais de signal à verrouillage à 2 bobines.
la source
L'électronique pure ne fera pas une cellule de mémoire permanente, mais la charge dans un condensateur peut s'en approcher (aura besoin d'un rafraîchissement régulier). La mémoire EEPROM / Flash étend cette exigence à 10 ans, donc pour des raisons pratiques, elle est appelée permanente. Mais ce n'est pas quelque chose que vous atteignez avec des composants ordinaires.
La vraie mémoire permanente utilise une sorte de phénomène physique bi-stable. L'aimantation des noyaux de ferrite mentionnée par Dave a été largement utilisée (vous avez déjà entendu parler d'un «core dump»?). Le relais bi-stable (ou à verrouillage) mentionné par helloworld922 est plus facile à utiliser.
Lorsque vous regardez comment cela a été fait dans les premiers ordinateurs, vous devez vous rendre compte qu'il existe un équilibre entre la complexité de la cellule unique et la complexité du circuit de conduite. Un noyau en ferrite est très simple, mais le circuit de pilotage et surtout le circuit de lecture est très complexe. Pour un relais bi-stable, c'est l'inverse: le relais est assez complexe par bit, mais le circuit de contrôle est très simple.
Quel est ton but?
Si vous voulez faire une seule cellule pour le plaisir, utilisez un relais bi-stable.
Si vous souhaitez démontrer comment cela se fait dans la pratique (DRAM / Flash) sans être pratique, utilisez une charge stockée dans un condensateur et actualisez-la régulièrement.
Si vous voulez faire quelque chose de pratique, utilisez un petit micro-contrôleur qui a une EEPROM intégrée (ou peut auto-programmer son FLASH).
la source
Un fusible. Il peut être ennuyeux de le remplacer souvent, vous pouvez donc passer à un disjoncteur.
la source
Solution pratique:
Un relais à verrouillage tel que mentionné par @DaveTweed est le plus simple.
Si vous voulez une solution à semi-conducteurs, vous pouvez utiliser un CI de mémoire d'interface parallèle comme celui-ci . Vous pouvez simplement lier les lignes d'adresse à une adresse fixe et utiliser uniquement l'une des lignes de données. Vous aurez besoin d'une logique de collage supplémentaire.
Solution intéressante:
Si vous cherchez un projet pour démontrer la mémoire, vous pouvez utiliser un solénoïde avec un noyau hystérétique. Saturer le noyau dans une direction pour stocker un 1, le saturer dans l'autre direction pour stocker un 0. Cela prend en charge les écritures.
Ensuite, montez-le juste au-dessus d'un capteur comme ce capteur à effet Hall . Ensuite, vous pouvez regarder la polarité du champ rémanent avec le capteur à effet Hall (juste un comparateur analogique) pour déterminer l'état.
la source
De la réponse fusible / disjoncteur donnée par William Price est venue la solution la plus évidente:
Un interrupteur.
Prenez une lampe. Branchez-le. Allumez-le. Débranchez-le. Déplacez-le à Hawaï. Branche le.
Il se rallume.
Éteignez-le. Débranchez-le. Ramène ça à la maison. Branchez-le.
Il reste éteint.
Si vous voulez qu'un ordinateur active / désactive la LED, ce n'est pas aussi utile. Cependant, si vous utilisez un interrupteur à bascule à bouton-poussoir et un solénoïde activé électroniquement, vous pourriez faire le travail. Appuyez sur le bouton pour allumer la LED, il active le solénoïde, la LED s'allume. Appuyez à nouveau, la LED s'éteint. Débranchez-le et le bouton est toujours activé ou désactivé mécaniquement.
Si vous vouliez conserver la fonctionnalité explicite "ceci si définitivement allumé, qui est définitivement éteint" (au lieu d'une bascule), vous pourriez avoir le bouton du haut activer un solénoïde qui appuie sur le haut d'un interrupteur à bascule. Ensuite, le bouton du bas active un deuxième solénoïde qui appuie sur le bas de l'interrupteur à bascule.
Ne pas dire que c'est à distance la meilleure façon de le faire, mais c'est fonctionnel.
la source
La solution à un composant la plus simple serait un relais bi-stable. Et vous n'aurez besoin que d'une résistance pour lire l'état.
la source
Vous pouvez utiliser un microcontrôleur intégré à l'EEPROM. Le PIC16F84A 8 bits possède 64 octets d'EEPROM, ce qui est généralement bon pour 10 000 000 et un minimum de 1 000 000 d'écritures dans chaque octet (c'est ce que l'on appelle l'endurance des octets). Le PIC choisi dans une autre réponse, PIC12F635 a une EEPROM de 128 octets et une endurance d'octets de 100 000 écritures. Le PIC24F16KA102 , un processeur 16 bits, possède 512 octets d'EEPROM et également une endurance d'octets de 100 000 écritures.
L'OP n'indique pas à quelle fréquence la LED clignote. Aux fins de cette discussion, supposons qu'il s'agit de quatre fois par minute.
Dans un an, il clignotera
Étant donné que l'EEPROM doit capturer à la fois les derniers événements d'activation et de désactivation, elle sera écrite au double de ce nombre, soit environ 4,2 millions de fois . En cinq ans, c'est 21 millions de fois.
De toute évidence, cela dépassera les spécifications de toute EEPROM que j'ai maintenant intégrée dans un microcontrôleur.
Mais il existe une solution simple à cela. Au lieu d'utiliser le même octet encore et encore pour garder une trace de l'état activé ou désactivé, on peut utiliser un tableau d'octets, qui remplit la puce entière.
Vous avez besoin de deux octets pour chaque élément du tableau. Une EEPROM de 64 octets, comme celle du PIC16F84A, pourrait donc contenir 32 éléments. Chaque fois que vous écrivez dans l'EEPROM, vous écrivez un 0 à l'octet d'état (ce qui signifie que cet élément contient des données), et soit un 0 à l'octet de données (la LED était éteinte en dernier) ou un 0xFF (la LED était allumée en dernier). La prochaine fois que vous accédez à l'EEPROM, vous indexez les éléments jusqu'à ce que vous en trouviez un avec un octet d'état 0xFF, puis utilisez cet élément. S'il n'en reste plus, réinitialisez l'EEPROM et recommencez (pour les PIC bas de gamme, cela signifie écrire 0xFF dans chacun des octets d'état; pour le PIC24, il existe une commande pour effacer la totalité de l'EEPROM). Si vous avez besoin de connaître le dernier état de la LED, vous indexez le tableau comme précédemment, mais vous revenez maintenant à un élément et lisez l'octet de données.
Cela divise essentiellement le nombre d'accès à un seul octet par un facteur de 16 pour le PIC16F84A (16 et non 32 car chacun des octets d'état est écrit deux fois). Ainsi, il serait capable de gérer 16 millions d'écritures au total, assez pour près de quatre ans de données. Et le PIC12F635 avec sa plus grande EEPROM mais une endurance d'octets plus petite de 100K, serait capable de gérer 3,2 millions d'écritures au total, assez pour neuf mois.
Le PIC24F16KA102, avec son EEPROM de 512 octets et sa fonction d'effacement en masse, serait capable de gérer 25,6 millions d'écritures, ce qui est suffisant pour plus de cinq ans.
Si le taux de clignotement n'était que de quatre fois par heure au lieu de quatre fois par minute , cela signifie un total de 70 080 écritures par an. Même le PIC12F635, avec son endurance de 100 000 écritures par octet, durerait 45 ans!
la source
Cela peut être une suggestion très naïve ... mais que diriez-vous de construire un verrou de transistor de faible puissance entraîné par une pile bouton . Utilisez ensuite la sortie de celle-ci pour alimenter un ampli-OP alimenté par l'alimentation . De cette façon, vous déchargez la pile bouton de la tension d'alimentation de la sortie utile; vous ne pouvez pas l'utiliser de toute façon lorsque l'alimentation est coupée, non?
EDIT: Aussi - selon le commentaire ci-dessous - il est conseillé de faire en sorte que le loquet soit isolé de l'ampli OP en cas de coupure de l'alimentation. Tout type de relais - ou circuit équivalent - alimenté par l'alimentation doit pouvoir y effectuer le travail.
Étant donné qu'une simple montre-bracelet peut être entraînée par une pile bouton pendant des années, alimenter un simple verrou devrait lui donner une durée de vie par pile qui dure une décennie. Vous pouvez même mettre deux batteries en parallèle afin de pouvoir les échanger - une à la fois - sans perdre les informations.
la source
Un petit CPLD peut être programmé pour piloter le protocole nécessaire à l'écriture d'un simple ensemble de valeurs sur un bus I2C.
NXP fabrique une gamme de très petites mémoires, destinées à remplacer les commutateurs DIP, par exemple PCA8550 / PCA9561.
Combinez les deux et vous avez un très petit commutateur à semi-conducteurs qui se souvient de son état.
la source