Página 1 de 1

beckup em caso de falta de energia

MensagemEnviado: 17 Ago 2010 13:42
por cristian
boa tarde .

estou fazendo um pequeno projeto para um amigo onde o pic recebe via serial de um noteiro o valor da cedula e imprime um cupom com data e hora e outros dados

o cara ta preocupado com a falta de energia se ocorrer durante a impressao isso posso resolver pegando o status da impressora ( essa da daruma ) mas a minha preocupaçao é q ao imprimir o pic salva numa 24c512 esses dados para um relatorio futuro , se a energia acabar durante a gravaçao .

como vou saber onde parou ele grava cerca de 16 bytes por cupom entao tenho um indice q vai em sequencia salvar estes dados
pensei numa forma de check-sum pegando o indice atual e somando 16 e no final verificar se foram salvos todos ...sei al algo assim ainda estou pensando

alguem pode me ajudar ???

ja fiz pra salvar toda vez q entrar uma nota ele faz um beckup assim se faltar energia antes de imprimir o cumpom quando ligar o pic ele exibe novamente o valor da nota

o cara nao quer usar bateria

MensagemEnviado: 17 Ago 2010 14:11
por xultz
Põe um supercap, ele vai segurar a energia alguns segundos. O PIC pode ter uma entrada para saber que a energia acabou e ele está só no supercap, então ele entra em modo desespero, salva tudo e fica esperando pelo pior.

MensagemEnviado: 17 Ago 2010 14:47
por rafael.wachter
ou utiliza o µC e a eeprom alimentadas pela fonte e uma baterias de placa-mãe como nobreak, qdo faltar energia, detecta e salva tudo

MensagemEnviado: 17 Ago 2010 19:59
por cristian
tem algum problema o pic ta alimentado com 5v e de repente cair para 3v de uma bateria ? ele nao trava nem reseta nao ?

MensagemEnviado: 17 Ago 2010 20:11
por MOR_AL
... Ou utiliza algo para informar que o dado foi gravado completamente. Por exemplo, reserve um bit de um byte da eeprom. Nomeie-o como, por exemplo, dado gravado (DG).
Mantenha-o (inicialmente) em '1' lógico. Isso representará que o ultimo byte do seu dado foi gravado com sucesso.
Ao iniciar uma nova gravação de um dado, resete o bit DG. Isso informa que o dado está sendo gravado. Ao terminar a gravação, sete o bit DG. Conclusão:
DG = '0' - Último dado perdido.
DG = '1' - Último dado gravado.
Aumente a confiabilidade do seu processo. Introduza uma verificação do dado gravado. Compare-o com o dado a ser gravado. Após a verificação é que você deve setar o bit DG.
Isso vai reduzir a velocidade do seu processo, porém vai dar mais confiança nos valores gravados.
MOR_AL

MensagemEnviado: 18 Ago 2010 17:20
por FabioSom12
cristian escreveu:tem algum problema o pic ta alimentado com 5v e de repente cair para 3v de uma bateria ? ele nao trava nem reseta nao ?

Não trava nem reseta. Funfa bem suave.


Mas na minha opinião a ideia do supercap é bem melhor (manutenção zero). E nem precisa ser supercap, põe um 1000uf x 6,3V segurando somente o pic e a memoria. (Coloca diodos para isolar as alimentações do cap e da fonte).

Pra habilitar o modo desespero como xultz diz :lol: , coloca um opto verificando o sinal ac antes da fonte, e no modo desespero, você desabilita todas funções que consomem corrente, principalmente a impressão.
Acho que segura uns 3 segundo.

MensagemEnviado: 18 Ago 2010 21:28
por diogo_18sp
ola amigo eu fasso deste jeito para salvar as informaçoes na falta de energia, na minha fonte eu pego a tensao continua pulsante de 120 hz que tiro do retificador de onda completa, dai coloco um zener de 5v1 com um capacitor de 10uf a 47uf oque acontece quando desligar a energia a onda pulsante some ANTES do que a tensao continua do circuito dai fico monitorando num pino do pic quando for a zero acontece uma interrupçao dai salvo tudo espero que isto ajude

MensagemEnviado: 23 Ago 2010 09:24
por leo_alves_br
Olá Cristian posso dar minha sugestão sobre isso?

Aqui eu faço um sistema diferente do que o pessoal sugeriu.
Uso o PIC 18F452 e uma função que ele possui: Low Voltage Detect.

Funciona assim, você configura o LVDCON Register para ligar o flag LVDEN quando a tensão ficar entre 4.2 e 4.45V (esse valor eh configurado).
Depois você vai no INTCON e liga o Peripheral Interrupt, vai no PERIPHERAL INTERRUPT PRIORITY REGISTER 2 e coloca o bit LVDIP para High.
Habilita o PERIPHERAL INTERRUPT ENABLE REGISTER 2 no Bit LVDIE.

Assim sempre que a tensão chegar a este valor especificado o PIC vai gerar uma interrupt, dentro deste interrupt você pode salvar os dados na EEPROM do PIC.

Como a energia elétrica não acaba a todo momento, só algumas vezes, você não vai prejudicar a EEPROM do PIC pelo excesso de gravação.

Não recomendo a gravação via I2C pois corre o risco de falhas na gravação (você tem milesegundos).

Para gravar 5 bytes não precisei modificar nada em minha placa, mas para gravar 40bytes precisei usar um capacitor de 1000uF x 16V para garantir um tempo bom de queda de energia.

Cuidado com o BOR, configure ele para o menor valor possivel...

Até mais

Re: beckup em caso de falta de energia

MensagemEnviado: 23 Ago 2010 10:12
por Red Neck Guy
cristian escreveu:boa tarde .

estou fazendo um pequeno projeto para um amigo onde o pic recebe via serial de um noteiro o valor da cedula e imprime um cupom com data e hora e outros dados

o cara ta preocupado com a falta de energia se ocorrer durante a impressao isso posso resolver pegando o status da impressora ( essa da daruma ) mas a minha preocupaçao é q ao imprimir o pic salva numa 24c512 esses dados para um relatorio futuro , se a energia acabar durante a gravaçao .

como vou saber onde parou ele grava cerca de 16 bytes por cupom entao tenho um indice q vai em sequencia salvar estes dados
pensei numa forma de check-sum pegando o indice atual e somando 16 e no final verificar se foram salvos todos ...sei al algo assim ainda estou pensando

alguem pode me ajudar ???

ja fiz pra salvar toda vez q entrar uma nota ele faz um beckup assim se faltar energia antes de imprimir o cumpom quando ligar o pic ele exibe novamente o valor da nota

o cara nao quer usar bateria


Uma solução:
Cria um bloco de indice para a tua tabela de logs e faz o checksum dele.
Faz esse bloco dobrado e sempre quando for ler ou escrever na fila de logs pega o indice do bloco com o checksum bom. Dessa forma se desligar a placa no meio de uma gravação a tabela tu só perde o último log. Claro que tens que atualizar a tabela no final da escrita na eeprom.