Um contador up/down que salva contagem na EEprom em caso de falta de energia elétrica na rede…
Os contadores digitais são dispositivos que mostram uma contagem em um visor de LCD ou em displays de 7 seguimentos. O valor desta contagem pode ser incrementado ao apertar o botão “Up” ou decrementado se apertar o botão “Down”. Os contadores podem ser usados em muitas aplicações práticas, como placares esportivos, organizadores de fila, hodômetros, catracas eletrônicas, etc.
Este artigo tratará de um contador up/down que salva a contagem na EEprom interna do PIC. Veja o esquema abaixo:
Para controlar os processos de leitura de interruptores e multiplexação dos displays de 7 seguimentos foi usado o conhecido PIC 16F628A.
O portB aciona os seguimentos de cada display. Apenas o pino 13 foi usado como saída para um relé.
Este relé liga quando a contagem for diferente de zero e desliga em zero. Dependendo da aplicação talvez você prefira não usar esta saída.
O portA aciona os transistores drives dos displays ligados nos cátodos (ou ânodo, conforme a versão). Também serve de entrada para os interruptores de pressão momentânea para incrementar (Up) e decrementar (Down), além do interruptor para zerar a contagem e também a memória. Note que o pino 3 foi usado como um sensor de falta de energia. Em funcionamento este pino está em nível ‘1’ por meio do divisor de tensão e o diodo Zener de 5 Volts ligado na tensão de 12 Volts na fonte. Quando ocorre uma queda de tensão na rede elétrica, a tensão acumulada pelo capacitor de entrada da fonte começa a cair e quando chega em aproximadamente 8 Volts produzirá nível lógico ‘0’ no pino 3. Isto faz que a rotina salve a contagem na EEprom interna. Ao voltar a energia, na inicialização do programa, os registradores da contagem serão carregados com os valores salvos.
Por que foi usado este método de salvamento? Muitos preferem simplesmente ir salvando na EEprom a cada aperto em um dos botões. Isto significa que a memória EEprom será constantemente utilizada. Em certa aplicações, talvez tenha que acumular contagens altas e várias vezes por dia. Nesta situação, a EEprom poderá ter sua vida útil reduzida, com a perda do microcontrolador. O datasheet do PIC 16F628A informa logo na página inicial, o tempo de vida da EEprom: 40 anos para a retenção dos dados e 1 milhão de ciclos de escrita. Se queremos que ela dure o tempo de vida máximo então temos de descobrir quantas vezes podemos gravar uma mesma posição de memória por dia.
1000000 / (40 * 365 ) = 68 vezes.
No caso proposto, o salvamento ocorrerá somente ao desligar o equipamento, ou quando ocorre a falta de energia elétrica na rede, aumentando em muito a vida útil da EEprom interna.
Logicamente em montagens de pouco uso não haveria necessidade de ter esta preocupação com a vida da EEprom. Mas é sempre bom lembrar que tudo tem um tempo de vida, inclusive as memória internas do PIC e tomar cuidado em como as usamos.
Obs. Esta montagem é experimental, sendo de caráter didático, montada apenas em placa experimental (do tipo “Breadboard”), sujeita a “bugs” ainda não detectados. Está sendo fornecido os arquivos para que cada hobista possa alterar o programa segundo suas necessidades.
Segue abaixo uma pasta zipada com os arquivos da montagem. Ao descompactar, você encontrará 4 pastas, com versão usando 4 dígitos, 3 dígitos, 2 dígitos e 1 dígito. Encontrará esquemas e arquivos .hex para ânodo ou cátodo comum em cada uma das pastas.
Em 21/01/2018 foi postado esta nova versão, com ‘debounce’ de interruptores melhorado:
Em 13/06/2020 foi acrescentado esta versão alternativa, para 4 dígitos, sem botão ‘Down’, mas um botão ‘Mem’ em seu lugar. Contagem apenas crescente, com memorização do valor ao apertar botão ‘Mem’. Se o botão ‘Mem’ estiver apertado durante o pós reset, então os dígitos mostrarão o valor salvo:
Manuais:
Datasheet do PIC16F628A
Curiosidades:
Por que parar de fumar?
O que devo saber sobre esteróides?
Conceito equilibrado sobre animais de estimação
Desatualizada ou à frente do seu tempo?
Como a vida se originou?
Outros assuntos:
O caminho para a felicidade
Como cuidar de um parente com uma doença terminal
Como controlar os gastos
Evolução ou Criação parte 1
Evolução ou Criação parte 2
Evolução ou Criação parte 3
Vídeos:
As maravilhas da criação revelam a glória de Deus
Em frente dos meus olhos
Porque Deus criou a Terra?
Aprenda a perdoar
Até o próximo artigo!
Boa tarde. utilizo numa antena rastreável. um contador de voltas digital Up down da FUNKITS. está com problemas. resolvi comprar um na China GDD5135A-CD200V/50A-P12V. aceitável, mas está se perdendo nos registos no sentido que uso um relê, pois os pulsos saltam. Não sou tec. preciso de uma solução para este caso. ou se alguém puder fazer um com 3 dígitos, me informe o custo. possivelmente, utilizarei 3 unidades.
Obs. O reset a qualquer momento da contagem, guardando a última posição ao desligar. utilizo um sensor óptico para esta contagem.
atenciosamente,
orlando jr
Olá Orlando Jr!
Tente colocar esta sua proposta no fórum. Pode ser que alguém se interesse em produzir estes contadores ou indicar uma solução para o que você já tem, como por exemplo, colocar um diodo na bobina do rele para não gerar pulsos de alta tensão quando ele desliga.
O código mais próximo que achei até agora é esse, mas está em outra linguagem, precisa ser para o pic16f877a e compilador CCS:
void display_char (char character){
//Uint8 i;
//Uint8 index;
//index=((int)character – 32)*5;
//if ((int)character >=32 && (int)character <=127){
//for (i=0;i< 5; i++){
//OSD9616_send(0x40,font[(index+4)-i]);
//}
//OSD9616_send(0x40,0x00); // space between characters
//}
//}
Olá emazzu630!
Você poderá usar a biblioteca embutida no CCS compiler para comunicação I2c. Verifique o Help do CCS para usa-la corretamente. Também poderá obter ajuda no seu uso, inclusive com exemplos, no fórum da CCS.
Olá Claudio Larios, utilizei o código fonte de quatro displays anodo comum, adicionei mais um display ficando com cinco e converti o código para PIC 16F877A. Funcionou perfeitamente, gostei muito do desempenho.
Agora solicito ajuda para o código que faça a seguinte função: Ao clicar em “up” deve aparecer “5”, ao clicar novamente apareça “10”, depois “15”, depois “20” e assim por diante (multiplica 1 pulso por 5). Isso é só no display, na saída i2c deve sair pulso a pulso sem a multiplicação. Isso é importante, se preferir entrar em contato por e-mail, ficarei grato: euclidesmz@gmail.com
Desde já, obrigado.