Fråga:
Hur man gör en 1 bit permanent minneskrets?
Michael George
2015-09-01 03:52:08 UTC
view on stackexchange narkive permalink

Jag skulle vilja skapa en enkel krets för att lagra eller spara 1 bit data. Kretsen ska kunna komma ihåg tillståndet för en lysdiod (till eller från) även om strömförsörjningen är frånkopplad från kretsen. Jag behöver det för att fungera som en hårddisk, ett flashminne eller ett SD-minneskort på mobiltelefoner.

Jag skapade en krets som visas på bilden. Utgången är en lysdiod i serie med ett motstånd på 470 ohm. Jag använder två bussningsknappar för att ladda eller ladda ur kondensatorn så att utgångslampan är på eller av.

Efter att ha kopplat bort strömmen eller stängt av strömmen kunde kretsen komma ihåg statusen för lysdioden i några minuter.

Efter 2 eller 3 minuter urladdades kondensatorn helt och kretsen förlorade sina data.

enter image description here Hur kan jag förhindra att kondensatorn laddas ur? eller hur kan jag sänka urladdningshastigheten så att kretsen tappar sina data efter en vecka eller mer?

I den här kretsen använder jag 555 som en inverter (inte grind) men jag kan använda andra IC: er, Mitt mål är bara att skapa ett enkelt permanent minne.

Hur motvilligt är du för att använda en myntcell?Det finns inget sätt att duplicera en EEPROM / flash / FRAM-cell på makronivå.
@IgnacioVazquez-Abrams Du kan använda ett spärrrelä ...
@IgnacioVazquez-Abrams Jag vill inte kopiera någonting, jag vill veta hur det fungerar och skapa en enkel minnescell.eller något som gör samma jobb för en minnescell.Bara för att lära sig elektronik
En minnescell är lätt.En icke-flyktig minnescell är det inte.
@MichaelGeorge: Nej, hela poängen med ett spärrrelä är att det använder en permanentmagnet för att bevara sitt tillstånd utan att applicera extern ström.Du behöver bara en puls av el för att ändra dess tillstånd.
Du kan få en kondensator att hålla sin laddning i en vecka med noggrann design och konstruktion: http://m.electronicdesign.com/analog/whats-all-capacitor-leakage-stuff-anyhow
När det gäller urladdning av kondensator: de kan behålla spänningen under lång tid om de är ordentligt frånkopplade.http://www.robotroom.com/Capacitor-Self-Discharge-1.html
En av de tidigaste elektroniska datorerna, [Atanasoff-Berry Computer] (https://en.wikipedia.org/wiki/Atanasoff%E2%80%93Berry_computer), använde kondensatorer i den allra första DRAM.De var monterade på ett par trummor som roterade för att ansluta dem sekventiellt till uppsättningar kontakter för att skriva, läsa och uppdatera (en gång per sekund).
Elva svar:
Dave Tweed
2015-09-01 04:22:31 UTC
view on stackexchange narkive permalink

Det ursprungliga elektroniska icke-flyktiga minnet är baserat på ferritkärnor. Även om det är relativt lätt att magnetisera en sådan kärna i ena riktningen eller den andra för att lagra en eller en noll, krävs det ganska sofistikerade kretsar för att läsa tillbaka den på ett tillförlitligt sätt. men för att detta ska fungera måste du kunna skapa en kondensator som i princip har noll läckage och ett sätt att läsa upp den laddningen. Detta kan bara göras i samband med mikroelektronik, där kondensatorn är en liten bit metall (den "flytande grinden") som är helt innesluten i glas (kiseldioxid) och läses ut med hjälp av dess inflytande på en närliggande transistor .

Ett annat val är ferrorelektriskt RAM (FRAM), som använder ett speciellt dielektriskt material som har två distinkta, stabila polarisationstillstånd. Återigen fungerar detta bara inom mikroelektronik.

Därför måste du välja något annat fysiskt fenomen för att lagra din bit av information. Ett självklart val är spärrreläet, som lagrar information i det fysiska läget för armaturen, som hålls i endera av två stabila positioner av en permanentmagnet eller en fjäder. Läget kan ändras genom att applicera en relativt kort strömpuls, och avläsningen åstadkommes genom att fästa elektriska kontakter till ankaret.

aktuell länk: http://hackaday.com/2015/08/31/core-memory-for-the-hard-core/
Eftersom du bara har en kärna, kunde du inte läsa den med en Hall-effektsensor eller något?
@immibis: Inte lätt.Magnetfältet är nästan helt inneslutet i själva kärnan, med väldigt lite externt läckage.
JamesRyan
2015-09-01 15:32:21 UTC
view on stackexchange narkive permalink

Skapa en krets som slår en mekanisk brytare t.ex. värdelös låda. Kretsen måste drivas upp för att ändra / läsa tillstånd men den skulle hålla den däremellan.

Spehro Pefhany
2015-09-01 04:55:12 UTC
view on stackexchange narkive permalink

En enkel lösning skulle vara en mikrostyrenhet som en PIC12F635 som finns i en 8-stifts DIP eller mindre, och har en inbyggd klocka och brun ut-återställningskrets (den senare är viktigt för att upprätthålla integriteten för EEPROM icke-flyktiga lagring).

Koden som krävs är inte mycket, ett bra startprojekt.

De enda externa delarna som krävs är en bypasskondensator och ett strömbegränsande motstånd för lysdioden.

Den allra enklaste lösningen är förmodligen ett 2-spoligt låssignalrelä.

Wouter van Ooijen
2015-09-01 12:10:47 UTC
view on stackexchange narkive permalink

Ren elektronik kommer inte att skapa en permanent minnescell, men laddning i en kondensator kan närma sig den (behöver uppdateras regelbundet). EEPROM / Flash-minne utökar detta krav till tio år, så för praktiska ändamål kallas det permanent. Men det här är inte något du gör med vanliga komponenter.

Verkligt permanent minne använder någon form av fysiskt, bi-stabilt fenomen. Magnetiseringen av ferritkärnor som nämns av Dave användes i stor utsträckning (någonsin hört talas om en "kärndump"?). Det bi-stabila (eller spärrande) reläet som nämns av helloworld922 är lättare att använda.

När du tittar på hur detta gjordes i tidiga datorer måste du inse att det finns en balans mellan den enskilda cellens komplexitet, och körkretsens komplexitet. En ferritkärna är väldigt enkel, men körning och särskilt avläsningskretsen är mycket komplex. För ett bi-stabilt relä är det motsatt: reläet är ganska komplext per bit, men styrkretsarna är mycket enkla.

Vad är ditt syfte?

  • Om du vill skapa en cell bara för skojs skull, använd ett bi-stabilt relä.

  • Om du vill demonstrera hur det görs i praktiken (DRAM / Flash) utan att vara praktiskt, använd en laddning lagrad i en kondensator och uppdatera den regelbundet.

  • Om du vill göra något praktiskt, använd en liten mikrokontroller som har inbyggd EEPROM (eller kan självprogrammera sin FLASH).

William Price
2015-09-01 22:38:56 UTC
view on stackexchange narkive permalink

En säkring. Det kan vara irriterande att byta ut ofta, så du kan uppgradera till en brytare.

Det här är lite tunt för ett svar på EE.SE.Vänligen utveckla.
Så ... kommer upp en 1 som standard (strömmen kommer att passera), för att ställa in till noll skickar du en strömström genom säkringen för att blåsa den, nu kommer strömmen inte att passera, för att sätta till 1 igen, ersättersäkringen?
Jag gillar att tänka ut ur lådan här.När du trycker på knappen för att stänga av lysdioden, snubblar den brytaren.När du trycker på knappen för att tända lysdioden återställs brytaren.Det är bara en konstig version av spärrreläet.Förmodligen inte det bästa alternativet, men jag tycker fortfarande om kreativiteten.
Jag hänvisade helt enkelt till hur tidiga ROM-enheter fungerade.De var en rad säkringar.Blås säkringarna där du vill ha nollor.Jag trodde inte att det skulle kräva djupare insikt.Mycket gammaldags.
Houston Fortney
2015-09-02 00:50:12 UTC
view on stackexchange narkive permalink

Praktisk lösning:

Ett spärrrelä som nämnts av @DaveTweed är det enklaste.

Om du vill ha en halvledarlösning kan du använda ett parallellt gränssnittsminne IC som den här saken. Du kan bara knyta adressraderna till en fast adress och bara använda en av datalinjerna. Du behöver lite ytterligare limlogik.

Intressant lösning:

Om du letar efter ett projekt för att visa minne kan du använda en solenoid med någon hysteretisk kärna. Mätta kärnan i en riktning för att lagra en 1, mätta den i den andra riktningen för att lagra en 0. Det tar hand om skrivningar.

Montera sedan det precis ovanför en sensor som denna hallsensor. Sedan kan du titta på polariteten i remanentfältet med hallsensorn (bara en analog komparator) för att bestämma tillståndet.

MichaelS
2015-09-02 10:48:37 UTC
view on stackexchange narkive permalink

Från säkrings- / brytarsvaret från William Price kom den mest uppenbara lösningen:

En brytare.

Ta en lampa. Anslut den. Sätt på den. Koppla ur den. Flytta den till Hawaii. Koppla in den.
Den slås på igen.

Stäng av den. Koppla ur den. Ta det hem. Koppla in den.
Den förblir avstängd.

Om du vill att en dator ska aktivera / avaktivera lysdioden är det inte lika användbart. Om du använder en tryckknappsväxlare och en elektroniskt aktiverad solenoid kan du dock få jobbet gjort. Tryck på knappen för att tända lysdioden, den aktiverar solenoiden, lysdioden tänds. Tryck igen, lysdioden släcks. Koppla bort den och knappen är fortfarande mekaniskt inställd på eller av.

Om du vill behålla den explicita funktionen "detta om definitivt på, det är definitivt av" (istället för en växling) kan du låt den övre knappen aktivera en magnetventil som trycker på toppen av en vippomkopplare. Sedan aktiverar den nedre knappen en andra solenoid som trycker på vändningens botten.

Att inte säga att detta är det bästa sättet att göra det på distans, men det är funktionellt.

Allt du har gjort är att beskriva hur man bygger ett bistabilt relä, vilket var en av de första lösningarna som föreslogs.
Den andra delen, ja, är bara en beskrivning av ett klumpigt bi-stabilt relä, kanske användbart om han är intresserad av att bygga sitt eget relä.Den första delen är dock inte.Jag tror inte att det matchar avsikten med frågan (jag antar att han är intresserad av att lära sig elektronik snarare än att bygga en enklast möjlig design), men en enda vippströmbrytare är en enklare, lättare design än elektroniska bitar och uppfyller kraven ide första parmeningarna.
Du kan ha rätt, men vi kommer aldrig att vara säkra eftersom OP aldrig kom tillbaka för att diskutera det - även om han "accepterade" mitt svar.Jag tolkade den övergripande avsikten med frågan att hänvisa till elektroniskt omskrivbart minne, baserat på * "Kretsen ska kunna komma ihåg tillståndet för en lysdiod" *.Detta skulle utesluta skrivskyddat minne (omkopplare, byglar, dioder etc.) och skrivminne (säkringar).
Jag tänker på att lysdioden är direkt relaterad till vilken knapp som tryckts senast.Ur en logisk synpunkt är det att fånga knapparnas tillstånd identiskt med att fånga statusen för lysdioden.
tcrosley
2015-09-01 04:40:45 UTC
view on stackexchange narkive permalink

Du kan använda en mikrokontroller som har inbyggt EEPROM. 8-bitars PIC16F84A har 64 byte EEPROM, vilket är bra för vanligtvis 10 000 000 och minst 1 000 000 skrivningar till varje byte (detta kallas byteuthållighet). PIC vald i ett annat svar, PIC12F635 har en EEPROM med 128 byte och en byte uthållighet på 100.000 skrivningar. PIC24F16KA102, en 16-bitars processor, har 512 byte EEPROM och en byteuthållighet på 100 000 skrivningar.

OP anger inte hur ofta lysdioden blinkar. Låt oss anta att det är fyra gånger i minuten i denna diskussion.

Om ett år blinkar det

$$ 4 * 60 * 24 * 365 = 2 102 400 \ mellanslagstider. $$

Eftersom EEPROM måste fånga både sista på och av händelserna, kommer den att skrivas till dubbelt så mycket, eller ungefär 4,2 miljoner gånger stark>. På fem år är detta 21 miljoner gånger.

Det är uppenbart att detta kommer att överträffa specifikationerna för alla EEPROM som jag nu har inbyggt i en mikrokontroller.

Men det finns en enkel lösning på detta. Istället för att använda samma byte om och om igen för att hålla reda på på eller av-status kan man använda en rad byte som fyller hela chipet.

Du behöver två byte för varje element i matrisen. Så en 64 byte EEPROM, som den i PIC16F84A, kunde innehålla 32 element. Varje gång du skriver till EEPROM skriver du ett 0 till statusbyte (vilket betyder att detta element har data), och antingen ett 0 till databyte (lysdioden var senast av) eller en 0xFF (lysdiod var senast på). Nästa gång du öppnar EEPROM indexerar du genom elementen tills du hittar en med en 0xFF-statusbyte och använder sedan det elementet. Om det inte finns någon kvar, initialisera sedan EEPROM igen och börja om (för PIC: erna i slutet betyder det att du skriver 0xFF till var och en av statusbyten; för PIC24 finns det ett kommando att radera hela EEPROM). Om du behöver veta den sista statusen för lysdioden, indexerar du genom matrisen som tidigare, men nu går du tillbaka ett element och läser upp databiten.

enter image description here

Detta delar i huvudsak antalet åtkomster till en enda byte med en faktor 16 för PIC16F84A (16 och inte 32 eftersom varje statusbyte skrivs till två gånger). Så det skulle kunna hantera 16 miljoner skrivningar totalt, tillräckligt för nästan fyra års data. Och PIC12F635 med sin större EEPROM men mindre byte uthållighet på 100K skulle kunna hantera 3,2 miljoner skrivningar totalt, tillräckligt för nio månader.

PIC24F16KA102, med dess 512 byte EEPROM och bulk radera funktion, skulle kunna hantera 25,6 miljoner skrivningar, tillräckligt i över fem år.

Om blinkhastigheten bara var fyra gånger per timme istället för fyra gånger per minut , då betyder det totalt 70 080 skrivningar per år. Även PIC12F635, med sin uthållighet på 100 000 skriv per byte, skulle hålla i 45 år!

Du kan avstå från att skriva till EEPROM förrän efter att ha förlorat makten.Kondensatorerna ska lagra tillräckligt med laddning för att hålla uC igång tillräckligt länge för att skriva det aktuella läget.Detta kan avsevärt öka din EEPROMs livslängd.
Varför inte använda flera bitar per byte?Första byte lagrar 7 bitar räknedata och 1 bit LED-data.Första gången du skriver ställer du in byten till 0000001L, sedan 0000010L, etc. När den når 1111111L återställer du nästa byte till alla nollor.Efter att ha kommit till den sista byten återställer du den första byten till nollor.Då är din nästa läsplats den första byten vars 7 bästa bitar är 0 <7-bitar <= 127, och nästa skrivplats är den första byten med 7-bitar <127. Nu har du nästan fördubblat dina åtkomst eftersom (nästan) varje skriv är till en enda byte istället för två.
@MichaelS Jag tänkte också på det.Först kan du inte gå från 11111110 till 11111101 eftersom du inte kan skriva 1 (jag har vänt ditt startvillkor.) I stället skulle du skriva 0, en i taget över byten.Men det gör inte riktigt bra när det gäller att begränsa antalet skrivningar per byte - du måste skriva till varje byte åtta gånger istället för en gång.
Jag har inte använt exakta PIC-enheter i fråga, men min uppfattning är att du raderar all data och sedan byter bitar som inte ska vara standard på en gång.Så om "raderad" betyder alla 1: ar, skulle du radera allt och byta bit 1-6 och eventuellt L. Därefter skulle du radera allt och ändra bitar 1-5, 7, eventuellt L. Mot slutet av räkningen, skulle du bara ändra några bitar (1110110L -> 1110111L ändrar bara bit 4 och L).Eftersom det finns 50% chans per radering och 50% per skrivning, för att en viss bit ska raderas, är det i genomsnitt 100% eller 8 bitar per radering / skrivcykel.
Med din metod raderas hela statusbyte en tid före användning och ställs sedan till noll vid användning eller 16 bitar per radering / skrivcykel.Samtidigt har hela din databyte 50% chans per radering, 50% chans per skrivning eller i genomsnitt 8 bitar per radering / skrivcykel.Totalt blir då 24 bitar per cykel.Även om vi antar att varje radering / skrivcykel är ekvivalent per byte, ändras det ändå två byte istället för en.(Kan inte redigera ovanstående kommentar, jag menade 50/50 för en viss bit för att * ändras *, inte raderas, i sista meningen.)
@MichaelS Radering, som sätter tillbaka alla byte till 0xff, sker först efter att * alla * byte har använts.Så i en 256 byte EEPROM skulle radering ske en gång varje 256 räknas.Du behöver inte radera före varje skrivning i detta schema.Det finns två typer av "slitagegränser" i en EEPROM;en på byte-nivå (så kallad "uthållighet") och den andra på global nivå på grund av raderingar.Den senare är vanligtvis tio gånger den förra.
Båda PIC: erna som du länkade raderar byte-nivå varje gång du skriver.Se sidan 13 (din länk) och 93 (PIC12F635).Jag ser inget om en global radering.Hur som helst är det fortfarande en radering, en skrivning per skrivning.Jag är inte säker på varför en global radering skulle vara mindre beskattande än en lokal radering.
se även http://stackoverflow.com/a/10669628/1015327 eller http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom
@MichaelS - tack för korrigeringarna av den globala raderingen.Jag baserade mina beräkningar på byte uthållighet ändå så det spelar ingen roll.Men jag kommer att uppdatera mitt svar för att ange att vissa EEPROM inte kräver en separat radering.(PIC24F-familjen har till exempel en bulkraderingsfunktion.)
Bruce
2015-09-02 00:25:57 UTC
view on stackexchange narkive permalink

Den enklaste enkomponentlösningen skulle vara ett bi-stabilt relä. Och du behöver bara ett motstånd för att läsa läget.

MichaelK
2015-09-02 16:25:01 UTC
view on stackexchange narkive permalink

Detta kan vara ett mycket naivt förslag ... men vad sägs om att bygga en lågeffekt transistorlås som drivs av ett knappbatteri . Använd sedan utgången från det till matas in i en OP-förstärkare som drivs av strömförsörjningen . På det sättet lossar du knappbatteriet för belastningen att mata den användbara utgången; du kan inte använda det ändå medan leveransen är avstängd, eller hur?

REDIGERA: Enligt kommentaren nedan är det också lämpligt att göra det så att spärren är isolerad från OP-förstärkaren om matningen går bort. Varje typ av relä - eller motsvarande krets - som matas av strömförsörjningen bör kunna göra jobbet där.

Med tanke på att ett enkelt armbandsur kan drivas av ett knappbatteri i flera år, driva en enkel spärren ska ge den en livstid per batteri som varar ett decennium. Du kan till och med sätta i två batterier parallellt så att du kan byta ut dem - ett åt gången - utan att förlora informationen.

Det finns bara mycket få Op-förstärkare tillgängliga som tillåter en spänning vid ingången högre än matningsspänningen, vilket skulle vara fallet under avstängning.
Om så är fallet, finns det inte ett sätt att stänga av ingången till OP-förstärkaren om strömförsörjningen försvinner och i huvudsak isolerar spärren?Någon typ av relä - eller motsvarande krets - skulle göra tricket där, eller hur?
Jason Morgan
2019-07-23 19:19:38 UTC
view on stackexchange narkive permalink

En liten CPLD kan programmeras för att driva det protokoll som behövs för att skriva en enkel uppsättning värden till en I2C-buss.

NXP gör en rad mycket små minnen, avsedda att ersätta dip-switchar, t.ex.PCA8550 / PCA9561.

Kombinera de två och du har en mycket liten halvledarswitch som kommer ihåg dess tillstånd.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...