Eu gostaria de fazer um circuito simples para armazenar ou salvar 1 bit de dados. O circuito deve ser capaz de lembrar o estado de um LED (ligado ou desligado), mesmo que a fonte esteja desconectada do circuito. Eu preciso que ele funcione como um disco rígido, memória flash ou cartão de memória SD de telefones celulares.
Eu fiz um circuito como mostrado na figura. A saída é um LED em série com resistor de 470 ohm. Eu uso dois botões de bucha para carregar ou descarregar o capacitor para que o LED de saída acenda ou apague.
Após desconectar o fornecimento ou desligar a eletricidade, o circuito conseguiu lembrar o estado do LED por alguns minutos.
Após 2 ou 3 minutos, o capacitor descarregou completamente e o circuito perdeu seus dados.
Como posso parar o capacitor de descarregar? ou como posso diminuir a taxa de descarga para que o circuito perca seus dados após uma semana ou mais?
Neste circuito, eu uso o 555 como um inversor (não o gate), mas posso usar outros ICs. Meu objetivo é criar uma memória permanente simples.
fonte
Respostas:
A memória eletrônica não volátil original é baseada em núcleos de ferrita. Embora seja relativamente fácil magnetizar esse núcleo em uma direção ou outra para armazenar um ou um zero, são necessários circuitos bastante sofisticados para lê-lo de forma confiável.
Os chips não voláteis modernos dependem do armazenamento de carga, mas, para fazer isso funcionar, você precisa criar um capacitor que tenha vazamento praticamente zero e uma maneira de ler essa carga. Isso só pode ser feito no contexto da microeletrônica, onde o capacitor é um pequeno pedaço de metal (o "portão flutuante") que é completamente envolto em vidro (dióxido de silício) e é lido por meio de sua influência em um transistor próximo .
Outra opção é a RAM ferrorelétrica (FRAM), que utiliza um material dielétrico especial que possui dois estados de polarização estáveis e distintos. Novamente, isso só funciona em microeletrônica.
Portanto, você precisa escolher outro fenômeno físico para armazenar suas informações. Uma escolha óbvia é o relé de travamento, que armazena informações na posição física de sua armadura, que é mantida em uma das duas posições estáveis por um ímã permanente ou uma mola. A posição pode ser alterada aplicando-se um pulso de corrente relativamente curto, e a leitura é realizada anexando contatos elétricos à armadura.
fonte
Faça um circuito que pressione um interruptor mecânico, por exemplo. caixa inútil. O circuito precisaria ser ligado para alterar / ler o estado, mas o manteria no meio.
fonte
Uma solução simples seria um microcontrolador, como um PIC12F635, disponível em um DIP de 8 pinos ou menor, e que possua um circuito interno de redefinição de clock e escurecimento (o último é importante para manter a integridade da EEPROM não volátil armazenamento).
O código necessário não é muito, um bom projeto inicial.
As únicas partes externas necessárias seriam um capacitor de derivação e um resistor limitador de corrente para o LED.
A solução mais simples é provavelmente um relé de sinal de duas bobinas.
fonte
A eletrônica pura não cria uma célula de memória permanente, mas a carga em um capacitor pode se aproximar dela (precisará de atualização regular). A memória EEPROM / Flash estende esse requisito para 10 anos, portanto, para fins práticos, é chamado permanente. Mas isso não é algo que você consegue fazer com componentes comuns.
A memória permanente real usa algum tipo de fenômeno biestável físico. A magnetização de núcleos de ferrita mencionada por Dave foi amplamente utilizada (já ouviu falar de um 'core dump'?). O relé biestável (ou com trava) mencionado pelo helloworld922 é mais fácil de usar.
Ao observar como isso foi feito nos primeiros computadores, você deve perceber que há um equilíbrio entre a complexidade da célula única e a complexidade do circuito de acionamento. Um núcleo de ferrite é muito simples, mas o circuito de acionamento e, especialmente, o circuito de leitura são muito complexos. Para um relé biestável, é o contrário: o relé é bastante complexo por bit, mas o circuito de controle é muito simples.
Qual é o seu propósito?
Se você deseja criar uma célula apenas para se divertir, use um relé biestável.
Se você quiser demonstrar como isso é feito na prática (DRAM / Flash) sem ser prático, use uma carga armazenada em um capacitor e atualize-a regularmente.
Se você quiser tornar algo prático, use um pequeno microcontrolador que possua EEPROM (ou possa programar seu FLASH) automaticamente.
fonte
Um fuso. Pode ser chato substituir com frequência, para que você possa atualizar para um disjuntor.
fonte
Solução prática:
Um relé de travamento, como mencionado por @DaveTweed, é o mais simples.
Se você deseja uma solução de estado sólido, pode usar um IC de memória de interface paralela como esse . Você pode apenas amarrar as linhas de endereço em um endereço fixo e usar apenas uma das linhas de dados. Você precisará de alguma lógica de cola adicional.
Solução interessante:
Se você estiver procurando por um projeto para demonstrar memória, poderá usar um solenóide com algum núcleo histérico. Sature o núcleo em uma direção para armazenar um 1, sature-o na outra direção para armazenar um 0. Isso cuida das gravações.
Em seguida, monte isso logo acima de um sensor como este sensor de hall . Depois, você pode observar a polaridade do campo remanescente com o sensor hall (apenas um comparador analógico) para determinar o estado.
fonte
Da resposta do fusível / disjuntor dada por William Price veio a solução mais óbvia:
Uma troca.
Pegue uma lâmpada. Conecte-o. Ligue-o. Desconecte-o. Mova para o Havaí. Conecte.
Ele liga novamente.
Desligue isso. Desconecte-o. Levar para casa. Conecte-o.
Ele permanece desligado.
Se você deseja que um computador ative / desative o LED, não é tão útil. No entanto, se você usar uma chave seletora de botão e um solenóide ativado eletronicamente, poderá fazer o trabalho. Pressione o botão para ligar o LED, ele ativa o solenóide, o LED acende. Empurre novamente, o LED apaga. Desconecte-o e o botão ainda está ativado ou desativado mecanicamente.
Se você quiser manter a funcionalidade explícita "isto, se definitivamente ativado, definitivamente desativado" (em vez de alternar), o botão superior ativará um solenóide que pressiona a parte superior de um interruptor. Em seguida, o botão inferior ativa um segundo solenóide que pressiona a parte inferior do interruptor.
Não estou dizendo que essa é a melhor maneira de fazer isso remotamente, mas é funcional.
fonte
A solução mais simples de um componente seria um relé biestável. E você só precisará de um resistor para ler o estado.
fonte
Você pode usar um microcontrolador incorporado na EEPROM. O PIC16F84A de 8 bits possui 64 bytes de EEPROM, o que é bom para normalmente 10.000.000 e um mínimo de 1.000.000 de gravações em cada byte (isso é conhecido como resistência de bytes). O PIC escolhido em outra resposta, o PIC12F635, possui uma EEPROM de 128 bytes e uma durabilidade de 100.000 gravações. O PIC24F16KA102 , um processador de 16 bits, possui 512 bytes de EEPROM e também uma resistência de bytes de 100.000 gravações.
O OP não indica com que frequência o LED pisca. Para os fins desta discussão, vamos supor que seja quatro vezes por minuto.
Em um ano ele piscará
Como a EEPROM precisa capturar os últimos eventos ativados e desativados, ela será gravada com o dobro desse número, ou cerca de 4,2 milhões de vezes . Em cinco anos, isso é 21 milhões de vezes.
Claramente, isso excederá as especificações de qualquer EEPROM que agora integro em um microcontrolador.
Mas existe uma solução simples para isso. Em vez de usar o mesmo byte repetidamente para acompanhar o status ativado ou desativado, pode-se usar uma matriz de bytes, que preenche todo o chip.
Você precisa de dois bytes para cada elemento na matriz. Portanto, uma EEPROM de 64 bytes, como a do PIC16F84A, pode conter 32 elementos. Cada vez que você grava na EEPROM, grava um 0 no byte de status (ou seja, este elemento possui dados) e um 0 no byte de dados (o LED foi desligado pela última vez) ou um 0xFF (o LED foi ligado pela última vez). Na próxima vez que você acessar a EEPROM, indexe os elementos até encontrar um com um byte de status 0xFF e use o elemento em questão. Se não houver mais, reinicialize a EEPROM e inicie novamente (para os PICs low-end, isso significa escrever 0xFF para cada um dos bytes de status; para o PIC24, existe um comando para apagar toda a EEPROM). Se você precisar conhecer o último status do LED, indexe através da matriz como antes, mas agora volte um elemento e leia o byte de dados.
Isso basicamente divide o número de acessos a um único byte por um fator de 16 para o PIC16F84A (16 e não 32 porque cada um dos bytes de status é gravado duas vezes). Portanto, seria capaz de lidar com 16 milhões de gravações no total, o suficiente para quase quatro anos de dados. E o PIC12F635, com sua EEPROM maior, mas menor capacidade de bytes de 100K, seria capaz de lidar com 3,2 milhões de gravações no total, o suficiente por nove meses.
O PIC24F16KA102, com seu EEPROM de 512 bytes e recurso de exclusão em massa, seria capaz de lidar com 25,6 milhões de gravações, o suficiente por mais de cinco anos.
Se a taxa de intermitência for de apenas quatro vezes por hora em vez de quatro vezes por minuto , isso significa um total de 70.080 gravações por ano. Até o PIC12F635, com sua capacidade de 100.000 gravações por byte, duraria 45 anos!
fonte
Isso pode ser uma sugestão muito ingênua ... mas que tal construir uma trava de transistor de baixa potência acionada por uma bateria de botão . Em seguida, use a saída para alimentar um amplificador operacional que é acionado pela fonte de alimentação . Dessa forma, você descarrega a bateria do botão da tensão de alimentar a saída útil; você não pode usá-lo de qualquer maneira enquanto o suprimento estiver desligado, certo?
EDIT: Também - de acordo com o comentário abaixo - é aconselhável fazê-lo para que a trava fique isolada do amplificador OP se o suprimento acabar. Qualquer tipo de relé - ou circuito equivalente - alimentado pelo suprimento deve ser capaz de fazer o trabalho lá.
Considerando que um simples relógio de pulso pode ser acionado por uma bateria de botão por anos, acionar uma trava simples deve proporcionar uma vida útil por bateria que dura uma década. Você pode até colocar duas pilhas em paralelo para poder trocá-las - uma de cada vez - sem perder as informações.
fonte
Um pequeno CPLD pode ser programado para conduzir o protocolo necessário para gravar um conjunto simples de valores em um barramento I2C.
O NXP cria uma variedade de memórias muito pequenas, destinadas a substituir interruptores DIP, por exemplo, PCA8550 / PCA9561.
Combine os dois e você terá uma chave de estado sólido muito pequena que lembra seu estado.
fonte