Quando o fornecimento DC é dado ao microcontrolador ATmega16, eu quero continuar funcionando do mesmo estado, de onde ele foi parado


0

Estou escrevendo meu código no BASCOM-AVR. Tem 2 loops if e 1 loop dentro do primeiro loop if. Eu darei o fornecimento CC ao controlador ATmega16. Agora, o que eu quero é, se a energia é cortada quando o código está em loop, o funcionamento deve continuar a partir desse mesmo passo dentro de loop quando a energia é ligada. Isso é possível?

Se alguém não conseguir compreender a minha pergunta, por favor, deixe-me saber, vou tentar explicar de uma maneira diferente.

Gentilmente à espera de ajuda.


@DavidPostill está bem. obrigado .. deixe-me saber se você encontrar alguma coisa.
Deep Chhowala

1
Por que você quer esse comportamento?
jsotola

Eu acho que sua discussão de dois loops não é relevante para o seu problema. Se sim, sugiro que você o remova da sua pergunta. Você pode adicionar uma extensão de suprimento de curto prazo com um capacitor e colocar a unidade para dormir quando a energia for perdida e acordar do repouso na restauração de energia?
Transistor

Sim, o que você descreve é ​​possível.
brhans

Um modo de desligamento permite que o MPU salve os parâmetros para flash ou EEprom ou NVRAM. Quando ele acorda, recarrega o índice de onde parou.
Sparky256

Respostas:


2

Na prática, você não pode fazer isso. Para realizar o que você quer, seria necessário salvar cada registrar no processador e cada RAM local para algum tipo de memória não-volátil toda vez que algo muda, e então de alguma forma recarrega todos os registradores e RAM da memória não-volátil quando a energia é restaurada. Você também precisa ter certeza de que o processador não perdeu energia enquanto estava no meio da cópia, senão você acaba com um estado bizarro na memória não-volátil. Seria uma boa idéia adicionar verificação de erros para garantir que você salvou uma imagem válida ... e tudo isso deve ser feito após cada instrução ser executada.

Uma opção mais razoável é adicionar algum tipo de backup de bateria, depois detectar quando a energia principal está caindo e mover o processador para um estado de baixa energia.


Isso não é bem verdade, o programa pode ser escrito no ponto de verificação significativo operações e salve as informações importantes para continuar após uma falha de energia. Talvez seja o suficiente para salvar os dois contadores de loop; Talvez também seja necessário poupar um progresso fracionário através do laço interno, mas é possível alcançá-lo. Apenas coisas com efeitos colaterais não pode ser repetido com segurança; se você parar no meio de um cálculo, é bom repetir isso desde o início, contanto que nenhuma ação permanente tenha sido tomada. Na verdade, os processadores modernos fazem isso o tempo todo na forma de execução especulativa ...
Chris Stratton

@ChrisStratton Obrigado pelo esclarecimento. O que você diz é verdade, mas sugere que o OP esteja disposto e seja capaz de realizar o tipo de análise que identificaria os pontos críticos. Eu senti que o OP estava procurando algo muito mais fácil e eu estava tentando enfatizar a dificuldade prática.
Elliot Alderson

Então, isso é possível ou não? Se sim, você pode me ajudar com um trecho?
Deep Chhowala

Não é um "trecho", é um problema difícil. Primeiro, modifique seu hardware para detectar a perda de energia principal, mas ainda resta energia suficiente nos capacitores da fonte de alimentação para fazer algum trabalho. Esse trabalho é salvar o completo Estado do processador ... o que isso significa para você. Em seguida, escreva um manipulador de redefinição que detecte que a energia foi perdida, recarregue o estado e inicie a partir daí.
Elliot Alderson

0

Off topic para Superusuário, mas dará uma breve resposta.

Para que seu código se recupere de uma perda de energia, você precisa adicionar um código que registre seu progresso em um arquivo. Dependendo de suas necessidades, talvez seja necessário registrar o início e / ou a conclusão de cada ação. Em seguida, você adicionaria código ao início do script que leria para registrar e continuar de onde parou. Obviamente, com uma perda de energia, algo pode não ser logado corretamente, então você pode escrever código para verificar se as coisas foram feitas.


Sim, mas é possível fazer isso no controlador ATmega16? Eu sou muito novo neste campo.
Deep Chhowala

@DeepChhowala O ATmega não pode se recuperar de uma perda de energia.
Keltari

Sua alegação de que um ATmega não pode fazer isso é factualmente falsa. Na verdade, é mais fácil em um sistema pequeno, pois você pode usar um capacitor por tempo suficiente para salvar o estado, e você tem EEPROM no chip para salvá-lo. Você também pode usar um dispositivo de armazenamento maior, mas como perda inesperada de energia, independentemente do sistema ao qual eles estão conectados.
Chris Stratton

Então, é a coisa que eu quero, possível ou não?
Deep Chhowala

Eu posso colar todo o código se você quiser ver isso, é muito pequeno, no máximo 50 linhas, eu acho.
Deep Chhowala
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.