Caros amigos,
Hoje venho compartilhar mais um projeto, um contador digital up/down de cinco dígitos.
Em 1998 resolvi montar uma máquina para enrrolar transformadores. Na época os contadores digitais tinham um preço
significativo se comparado aos preços da atualidade e como meus recursos financeiros eram limitados, decidi usar um
contador mecânico. Os testes começaram com odômetros de carro e logo surgiram
as dificuldades, como por exemplo, sincronizar uma volta no eixo da máquina e
uma volta registrada no odômetro. Depois de tanto quebrar a cabeça resolvi
montar um contador digital baseado nos integrados CMOS, 4510 e 4511. Durante 6 anos usei meu contador CMOS sem maiores problemas. No entanto meus conhecimentos
de programação acerca dos microcontroladores foram evoluindo e surgiu a ideia
de usar um PIC para esta aplicação. Depois de trocar ideias com amigos mais experientes em programação e microcontroladores, em 2006 montei o circuito abaixo.
Este circuito foi montado em uma caixa padrão DIN 98x48x135. O resultado ficou muito bom. Prometo postar uma foto do contador em breve.
O firmware utilizado na época foi o seguinte, compilado no CCS:
/*---------------------------------------------------------------Projeto: Contador Digital up/downAutor: Mariano André AndersonFirmware: CD001 - 17/10/2006---------------------------------------------------------------*/
#include <16F628.h>
#use delay(clock=4000000)
#fuses XT, NOWDT, PUT, NOBROWNOUT, PROTECT, NOLVP
#define en373 pin_a0
#define clock pin_a4
#define upd pin_a3
#define bt1 pin_a1
#define bt2 pin_a2
//- Variáveis Globais -------------------------------------------
int unidade, dezena, centena, milhar, umilhar, i;
//- Função para converter o valor da variável para 7 segmentos --
// 0 = ligado 1 = desligado
// BAFGPCDE A
byte const converte[]={ 0b00011000, //0 * * * * *
0b01111011, //1 * *
0b00101100, //2 F * * B
0b00101001, //3 * G *
0b01001011, //4 * * * * *
0b10001001, //5 * *
0b10001000, //6 E * * C
0b00111011, //7 * *
0b00001000, //8 * * * * *
0b00001001}; //9 D * P
//- Função para atualizar o display -----------------------------
void atualiza_display()
{
output_b (converte[unidade]);
output_high(en373);
delay_us(1);
output_low(en373);
output_b(0b11101111);
delay_ms(1);
output_b (converte[dezena]);
output_high(en373);
delay_us(1);
output_low(en373);
output_b(0b11110111);
delay_ms(1);
output_b (converte[centena]);
output_high(en373);
delay_us(1);
output_low(en373);
output_b(0b11111011);
delay_ms(1);
output_b (converte[milhar]);
output_high(en373);
delay_us(1);
output_low(en373);
output_b(0b11111101);
delay_ms(1);
output_b (converte[umilhar]);
output_high(en373);
delay_us(1);
output_low(en373);
output_b(0b11111110);
delay_ms(1);
}
//- Função para somar -------------------------------------------
void mais_um()
{
unidade++;
if (unidade > 9)
{
unidade = 0;
dezena++;
}
if (dezena > 9)
{
dezena = 0;
centena++;
}
if (centena > 9)
{
centena = 0;
milhar++;
}
if (milhar > 9)
{
milhar = 0;
umilhar++;
}
if (umilhar > 9)
{
umilhar = 0;
}
i=0;
}
//- Função para subtrair um -------------------------------------
void menos_um()
{
unidade--;
if (unidade > 9)
{
unidade = 9;
dezena--;
}
if (dezena > 9)
{
dezena = 9;
centena--;
}
if (centena > 9)
{
centena = 9;
milhar--;
}
if (milhar > 9)
{
milhar = 9;
umilhar--;
}
if (umilhar > 9)
{
umilhar = 9;
}
i=0;
}
//- Início da rotina principal ----------------------------------
void main()
{
set_tris_b (0b00000000);
set_tris_a (0b00011110);
unidade = 0;
dezena = 0;
centena = 0;
milhar = 0;
umilhar = 0;
while (true)
{
atualiza_display();
{
if (i==1)
{
if ((!input(clock)) && ( input(upd))) mais_um();
if ((!input(clock)) && (!input(upd))) menos_um();
}
if (input(clock))
{
delay_us(200);
if ( input(clock)) i=1;
}
}
milhar = 0;
umilhar = 0;
while (true)
{
atualiza_display();
{
if (i==1)
{
if ((!input(clock)) && ( input(upd))) mais_um();
if ((!input(clock)) && (!input(upd))) menos_um();
}
if (input(clock))
{
delay_us(200);
if ( input(clock)) i=1;
}
}
}
}
//- Fim ---------------------------------------------------------
Sinta-se a vontade para montar este circuito e fazer melhorias no firmware. E se depois você quiser compartilhar os resultados (sem interesse comercial) o blog estará a disponível para divulgação. Neste caso favor enviar os arquivos por e-mail que será dado os devidos créditos.
Abraço.
Para baixar os arquivos deste projeto acesse:
https://onedrive.live.com/?cid=5E8E07978949298A&id=5e8e07978949298a%21245
Olá amigo não sou bom em programação tem como eu usar no meu carro como odometro usando o sensor de velocidade
ResponderExcluirObs siena 98 fiat
Obrigado
Olá! Este é um contador simples, alimentado por 12V, que soma ou subtrai uma unidade a cada pulso de entrada (depende da entrada up/down) e pode ser programado/reprogramado conforme a necessidade. Sem pensar muito eu diria que é possível mas acredito que há outros detalhes a serem verificados no carro. Talvez com poucos ajustes no programa do contador já será possível utiliza-lo como odômetro. Sugiro que você converse com um mecânico/eletricista de carros para esclarecer sobre o funcionamento dos odômetros digitais, para evitar danos indesejados no seu carro.
ExcluirAtte.
Mariano
Olá amigo.
ResponderExcluirEstou tentando montar um dimmer para lampada com incremento e decremento
vc pode me ajudar nesta função.
EX:Uma chave com 4 leds
Quatro toques liga leds diferentes
Olá Fabio!
ExcluirTenho alguns exemplos mas não exatamente para dimmer, mas vou fazer o possível para lhe ajudar. Assim que possível vou postar aqui no blog e te aviso nestes comentários, ok.
Um grande abraço.
Mariano
Boa tarde Mariano, teria como vc postar o esquema em pdf, a imagem esta um pouco distorcida
ResponderExcluirOlá Marcelo! Posso lhe enviar os arquivos sim, sem problemas, mas você pode baixá-los acessando, no topo do Blog, o link "Arquivos para Baixar" - https://skydrive.live.com/?cid=5e8e07978949298a#cid=5E8E07978949298A&id=5E8E07978949298A%21122.
ExcluirGrande abraço.
Outra pergunta, qual a função dos botoes S2 e S3, e o que vai ligado nos bornes 1 e 2 ?
ResponderExcluirComo é feita a mudança da contagem up para down?
Gostaria de montar um contador desses para minha bobinadeira, agradeço a sua atenção.
Olá Marcelo! Bem, os botões S2 e S3 podem ser utilizados para várias funções, vai depender de como foi programado. No firmware acima, não há funções para estes botões.
ExcluirA mudança de up para down é feita mudando o nível da entrada do borne 2, de nível 1 para 0. O nível 1 é UP e o nível 0 é DOWN.
O pulso para contagem, no borne 1 (clock) é igual, sempre que tiver um nível 0 na entrada é feito um incremento na contagem, conforme o nível do borne up/down.
Qualquer dúvida é só escrever.
Abraço.
Mariano,primeiro obrigado pela sua atenção, é que preciso deste contador, eu simulei no proteus, por se tratar de um contador multiplexado, parece que a simulação "pesa" e os displays acendem de modo aleatório. Deu para perceber que os botões funcionam correto, mas os pulsos funcionam com o botão s3 e não com aterramento do clock no borne 1 como vc disse, não sei se o circuito real funciona da maneira como disse, estamos apenas trocando informação, de qualquer maneira obrigado pela atenção.
ExcluirOlá Marcelo!
ExcluirFique a vontade em escrever e esclarecer suas dúvidas. O objetivo do Blog é justamente compartilhar informações, na forma de projetos que desenvolvo nas minhas horas de folga.
Quanto a simulação no Proteus eu não saberei lhe responder quanto ao funcionamento deste projeto. Entendo que aplicativos de simulação possam ser úteis para muitos casos mas já tive problemas em simulações de projetos que utilizavam microcontroladores e a partir daí não utilizei mais simuladores, passei a fazer uma placa, em casa mesmo, para testar o firmware.
Este contador foi montado justamente para minha bobinadeira de transformadores. Você pode observar as fotos da montagem final neste link:
http://marianoandre.blogspot.com.br/2012/05/contador-digital-com-pic-montado.html
Eu ainda tenho uma placa, que fiz a mais, quando montei meu contador. Como foram feitas em casa mesmo, a qualidade não é das melhores mas talvez ainda possa lhe ser útil. Se você me informar seu e-mail, eu tiro uma foto da placa e lhe envio. Caso seja do seu interesse, posso lhe enviar para que você possa montar e testar o projeto.
Vou ver se consigo fazer um vídeo do contador funcionando e posto no Blog.
Qualquer dúvida, estamos ai.
Grande abraço.
Mariano
Bom dia Mariano, a sua placa por ser feito em casa está otima, claro que nada melhor que um teste em protoboard ou montagem final, simulei porque nao tenho protoboard, mas é indispensável, estou fazendo uma placa e os pulsos vao sair de um sensor otico, espero que funcione, quanto as fotos da placa me ajudaram bastante, obrigado pela atenção
ExcluirOutro detalhe, na foto não vi o oscilador de cristal nem os capacitores de 33pf, vc retirou por algum problema?
Meu email fortini46@gmail.com
Olá Marcelo!
ExcluirQSL (tudo entendido) quanto a simulação e testes. Nas fotos do contador montado não consta o cristal nem os capacitores de 33pF porque experimentei o modo de oscilador interno. Mas não muda nada no funcionamento, pode usar o cristal que também funciona.
Abraço.
Mariano
Não sendo eu muito "folgado", teria como vc mandar uma foto do layout da placa ou mesmo um arquivo em pdf, no meu email, sua placa ficou muito boa, vai me ajudar muito, bom domingo!
ExcluirVou ver o que consigo para você. Abraço
Excluirnão sou muito bom em programa de pic mas e esse que esta logo abaixo do esquema fico muito crato se puder mi ajudar pic 16f628
ExcluirOlá! Você precisa de ajudar para montagem ou no firmware?
ExcluirOlá Mariano. Obrigado por ter me ajudado com seu projeto. Venho procurando por um bom tempo um circuito como esse para colocar no meu tape deck de rolo e a unica coisa que adicionei foi um rotary encoder e ficou muito bom. Valeu!!
ResponderExcluirOlá André!
ExcluirLegal, fico feliz que o projeto lhe foi útil.
Grande abraço.
Mto bacana amigo, obrigado pela iniciativa em postar todo o material, .hex e pcb para montagem. Já montei um gravador de Pic que grava pics de 8 até 4 terminais.
ResponderExcluirMeu tio trabalha enrolando transformadores e utiliza esse contadores retirados de toca fitas rs, vou montar este circuito para ele. Grande abraço
olá Mariano adorei o seu projecto, era mesmo isso que procurava, mas tenho algumas dificuldade em programa-lo... seria possivel usar um pic 16f877 neste projecto?
ResponderExcluirOlá Alcides! Fico feliz que tenha gostado do projeto, procurei fazer algo bastante simples e fácil de montar. Não há impedimento para usar um PIC16F877, porém será necessário desenhar um novo layout para o circuito impresso, além de pequenas alterações no firmware.
ExcluirAbraço.
olá Mariano, Adorei o seu projecto, era mesmo isso que eu procurava, a meses que tenho um projecto identico a esse para fazer mais ñ sabia por onde começar... será k é póssivel substituir este PIC por um PIC 16F877 ?, gostaria tbm acrescentar um sensor para contar o numero de volta de um motor, como ficaria a programação que para mim é a parte mais dificil...
ResponderExcluirOlá Alcides! Fico feliz que tenha gostado do projeto. Para usar um PIC16F877 no lugar voê vai precisar alterar um pouco o layout mas também poderá eliminar o outro circuito integrado (74HC373) já que o 877 tem mais pinos que podem ser utilizados.
ExcluirNa programação será necessário mudar o modelo do microcontrolador. Se o sensor que você utilizar para verificar a rotação do motor for compatível com a programação existente, neste caso não precisará mudar nada no que refere-se a leitura do sensor.
Qual é o tipo ou modelo do sensor que você pretende utilizar no seu projeto?
Oi. É possível usar um PIC16F877 basta alterar o desenho do circuito impresso e o firmware. Como o 16F877 é mais robusto, é possível implementar várias outras funções aumentando a complexidade do projeto. Peço que descreva exatamente o que você precisa, incluindo as funções que deseja acrescentar, porque talvez seja mais interessante fazer um novo projeto, utilizando por exemplo um LCD no lugar de display de 7 segmentos.
ResponderExcluirAbraço.
bom dia, ja construi esse projeto mas nao sei como passar essa firmware para os componentes, tem como me ajudar se preferir pode me passar para meu email carlosseja@hotmail.com
ResponderExcluirbom dia, eu construi esse projeto mas nao sei como passar a firmware para os componentes, preciso fazer 30 contador desses ja estudei muito a respeito mas nao consegui um passo a passo, teria como me ajudar, meu email carlosseja@hotmail.com
ResponderExcluirhttps://www.youtube.com/watch?v=Ocdtx2E-Ihc
ExcluirESPERO QUE ISTO TE AJUDE.
Existem varios tipos de gravadores de pic melhores do que deste video.
ExcluirOlá Carlos!
ResponderExcluirFaço minhas as palavras do Marcelo. Qual seria sua dúvida mais especificamente?
Abraço.
em qual aplicativo foi feito a programação do código?
ResponderExcluirOlá! Este código foi escrito no compilador CCS.
Excluirem qual aplicativo foi feito a programação do código?
ResponderExcluirOlá Juarez! Este código foi escrito no compilador CCS.
ExcluirBoa noite Mariano, obrigado pela resposta, para esse contador ficar completo, deveria ter a função de programar um determinado numero de voltas e quando atingir esse numero, uma saida fosse ativada para acionar um relé e nesse momento desligar o sistema, seria possivel incluir mais essa função?
ResponderExcluirOlá Juarez, tudo bem? Sim, concordo que seria legal ter esta funcionalidade no contador. Na ocasião em que montei este projeto acabei não implementando. Não é difícil de implementar esta função, no entanto, seria preciso fazer umas "alterações" no circuito para que fosse possível. Minha sugestão seria aproveitar a ideia inicial e fazer um projeto novo utilizando um PIC16F872, por exemplo, que possui um número maior de IO.
ExcluirDá uma olhada no projeto da uPAC. Link:http://marianoandre.blogspot.com.br/2012/04/upac-placa-para-automacao-e-controle.html
Com este projeto você poderia fazer um contador mas atualizado, com várias funções e até mesmo controlar via RS-232, o que você acha?
Havendo interesse e disponibilidade, posso lhe conseguir esta placa montada ou apenas a PCI para você montar.
Qualquer coisa estou à disposição.
Abraço.
Bom dia Mariano, o projeto é muito interessante, mas, no momento o que eu preciso mesmo é de um contador para uma bobinadeira, projeto apresentado nesse artigo seria ideal e nem precisava ter 5 digitos, 4 já seria suficiente, eu encontrei um outro artigo que tem esse recurso, porem a saida apenas pisca, ou seja, sai do modo desativado, ativa e depois volta ao modo desativado, o ideal é que fique ativado, eu não manjo nada de programação, muito mau consigo fazer um led piscar, isso olhando o código dos outros, rsrs, minha área é eletronica, voce conseguiria incluir essa função no seu projeto, outro corrigir esse que eu tenho? e qual seria o custo?
ExcluirBom dia Juarez, saudações!
ExcluirSe você quiser compartilhar o circuito do outro projeto que você comentou, pode enviar para o e-mail (mariano.andre@gmail.com) que então vou analisar para ver o que pode ser feito. Peço que descreva exatamente o que você precisa no contador, funções e recursos de hardware. Assim já vou modelando um novo projeto, que posso lhe atender. Também é importante que você informe urgência, pois apesar de não dispor de tempo para assumir novos projetos, gostaria de lhe ajudar.
Sobre custos, entendo sua preocupação mas fique tranquilo, havendo necessidade de envolver valores lhe informo antecipadamente.
Vamos conversado, o importante é você conseguir resolver o problema da sua bobinadeira.
Abraço.
boa noite Mariano, obrigado pela atenção, eu já tinha separado dois projetos para vc analisar, mas acabei encontrei outro que tem as funções que eu preciso, caso voce queira dar uma olhada eu te mando os tres. um abraço
ExcluirOlá Juarez! Fico feliz que tenha encontrado solução para seu problema. Se quiser compartilhar os projetos, pode enviar para mariano.andre@gmail.com e quando tiveres terminado a sua montagem, manda umas fotos. Abraço
ExcluirBoa noite Mariano, vou manda os projetos que encontrei e esse ultimo que já montei no protoboard e funcionou muito bem, e ficaria melhor se incluir um botão start, estou trabalhando no layout da placa e depois que montar, enviarei as fotos
ResponderExcluirola Mariano, parabens pelo projeto.vc teria o arquivo hex deste contador?
ResponderExcluirOlá Rogelson!
ExcluirTenho sim, envio para qual endereço de e-mail?
Olá Mariano André Anderson,
ResponderExcluirO código abaixo em CCS, com "int 16" conta até 65535, com int 8 conta até 255. O que preciso é que ele conte até 39.999 e pule para 0. Você pode ajudar me ajudar com a variável que faça isso? Meu e-mail: euclidesmz@gmail.com
int16 adjust (int16 var) {
int16 delay=0;
unsigned int i=0,j=0;
int_to_seg(var,0);
while(!input(p2)) {
delay=250 ; i=1 ; j=0 ;
while(input(up)||input(down)) {
if (input(up))
var+=i;
else
var-=i;
int_to_seg(var,0);
j++;
if(j>1) i=1;
delay_ms(delay);
if(delay>=100)
delay-=20;
} }
return var;
}
Boa Noite!
ResponderExcluirQuero montar o seu contador digital para contar peças.
Aonde ligo uma chave na saída ou tenho que montar um gerador de clock e ligar nele ?
E por favor pode me mandar o arquivo hex para o e-mail cleberspindler@yahoo.com ?