CÓDIGO FONTE :
/**************************************************************************
* Esteira Contadora de Objetos *
***************************************************************************
* Rafael Varago de Aguiar Varago Automatics *
***************************************************************************
* Versão: 2.2 *
* Data: 20/09/2010 *
* *
* RAM: 5% ROM: 17% *
***************************************************************************
* Controle de 2 Displays 7 segmentos que apresentaram a contagem das peças*
* ao contar uma peça uma buzina tambem soara, o projeto terá a opção de *
* congelar a contagem, resetar a contagem, guardar valor da contagem na *
* memória EEPROM, e por último terá a opção de recuperar está valor sempre*
* que desejado, ao contar uma peça uma pequena buzina é acionada por *
* alguns instantes para servir de sinalizador auditivo *
**************************************************************************/
#include <16f628a.h> // Informa o PIC
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOCPD,NOMCLR,INTRC_IO // Configs internas
#use delay (clock=4000000) // Seleciona delay para 4Mhz de clock
/**************************************************************************
**************************************************************************/
// Definições de pinos
#define ldr pin_a0 // Sensor de passagem de peças
#define bz pin_a1 // Indicador sonoro de passagem de peças
#define stop pin_a2 // Congela a Contagem
#define reset pin_a3 // Reseta a "
#define gcont pin_a4 // Grava a " na EEPROM
#define rcont pin_a5 // Recupera a " na "
#define dd pin_a6 // Catodo Display de unidade
#define du pin_a7 // " " de dezena
/**************************************************************************
**************************************************************************/
// Variaveis globais
int cont; // Armazanam o valor da contagem do placar
/**************************************************************************
**************************************************************************/
// Tabela para converter o valor da contagem para exibir no display
byte const tabela[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xe7};
/**************************************************************************
**************************************************************************/
void jogacont(void){ // Rotina para jogar valores no contador
output_high(du); // Apaga display de unidade
output_low(dd); // Seleciona display de dezena
output_b(tabela[cont/10]); // Joga o valor do contador
delay_ms(50); // Tempo para display ligado
output_high(dd); // Apaga display de dezena
output_low(du); // Seleciona display de unidade
output_b(tabela[cont%10]); // Joga o valor do contador
delay_ms(50); // Tempo para display ligado
return; // Retorna
}
int para_cont(int a){ // Rotina para parar contagem
while(1){ // Laço infinito até STOP ser novamente pressionado
jogacont(); // Chama rotina para jogar valores no contador
if(!input(stop)){ // Executa bloco caso botão STOP for pressionado
while(!input(stop)){
} // Laço para soltar tecla
return (1);
}
if(!input(reset)){ // Zera o contador caso RESET sejá pressionado
while(!input(reset)){
} // Laço para soltar tecla
cont=0; // Zera cont
}
if(!input(gcont)){ // Grava valor do contador na EEPROM
while(!input(gcont)){
} // Laço para soltar tecla
write_eeprom(1,cont); // Salva o valor do contador na EEPROM
}
if(!input(rcont)){ // Recupera valor do contador na EEPROM
while(!input(rcont)){
} // Laço para soltar tecla
cont=read_eeprom(1); // Recupera o valor do contador da EEPROM
}
}
} // Fim do bloco para botão STOP pressionado
/**************************************************************************
**************************************************************************/
void main(void){ // Rotina principal
int temp,aux; // Variavel auxiliar de tempo de execução de laço
aux=0; // Variavel para controlar laço
set_tris_a(0b00111101); // configuração da direção dos pinos de I/O
set_tris_b(0b00000000);
cont=0; // Garante que o contador comece em zero
delay_ms(300); // Estabilização da EEPROM
while(1){ // Laço de repetição infinito
if(!input(ldr)){ // Testa se sensor foi cortado (passagem de peças)
while(!input(ldr)){
} // Laço para sensor voltar ao estado normal
if(cont < 99){ // Executa se o contador estiver abaixo do limite
cont ++; // Incrementa 1 em cont
temp=5; // Joga 5 em temp para definir tempo para disparar buzzer
while(temp != 0){ // Laço para acionar o buzzer
output_high(bz); // Joga nivel alto no buzzer
delay_ms(5); // Tempo para gerar frequencia de nivel alto
output_low(bz); // Joga nivel baixo no buzzer
delay_ms(5); // Tempo para gerar frequencia de nivel baixo
temp --; // Decrementa 1 de temp
delay_ms(temp); // Delay carregado com o valor de temp
} // Fim do laço do buzzer
}
else cont=0; // Se contador já estiver em 99 o mesmo é zerado
} // Fim do teste de sensor cortado
if(!input(stop)){ // Executa bloco caso botão STOP for pressionado
while(!input(stop)){
} // Laço para soltar tecla
while(!para_cont(aux)){ // Chama rotina para parar contagem
}
} // Fim do bloco para STOP
if(!input(reset)){ // Zera o contador caso RESET sejá pressionado
while(!input(reset)){
} // Laço para soltar tecla
cont=0; // Zera cont
}
if(!input(gcont)){ // Grava valor do contador na EEPROM
while(!input(gcont)){
} // Laço para soltar tecla
write_eeprom(1,cont); // Salva o valor do contador na EEPROM
}
if(!input(rcont)){ // Recupera valor do contador na EEPROM
while(!input(rcont)){
} // Laço para soltar tecla
cont=read_eeprom(1); // Recupera o valor do contador da EEPROM
}
jogacont(); // Chama rotina para jogar valores no contador
} // Fim do laço de repetição
} // Fim do programa
* Esteira Contadora de Objetos *
***************************************************************************
* Rafael Varago de Aguiar Varago Automatics *
***************************************************************************
* Versão: 2.2 *
* Data: 20/09/2010 *
* *
* RAM: 5% ROM: 17% *
***************************************************************************
* Controle de 2 Displays 7 segmentos que apresentaram a contagem das peças*
* ao contar uma peça uma buzina tambem soara, o projeto terá a opção de *
* congelar a contagem, resetar a contagem, guardar valor da contagem na *
* memória EEPROM, e por último terá a opção de recuperar está valor sempre*
* que desejado, ao contar uma peça uma pequena buzina é acionada por *
* alguns instantes para servir de sinalizador auditivo *
**************************************************************************/
#include <16f628a.h> // Informa o PIC
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP,NOCPD,NOMCLR,INTRC_IO // Configs internas
#use delay (clock=4000000) // Seleciona delay para 4Mhz de clock
/**************************************************************************
**************************************************************************/
// Definições de pinos
#define ldr pin_a0 // Sensor de passagem de peças
#define bz pin_a1 // Indicador sonoro de passagem de peças
#define stop pin_a2 // Congela a Contagem
#define reset pin_a3 // Reseta a "
#define gcont pin_a4 // Grava a " na EEPROM
#define rcont pin_a5 // Recupera a " na "
#define dd pin_a6 // Catodo Display de unidade
#define du pin_a7 // " " de dezena
/**************************************************************************
**************************************************************************/
// Variaveis globais
int cont; // Armazanam o valor da contagem do placar
/**************************************************************************
**************************************************************************/
// Tabela para converter o valor da contagem para exibir no display
byte const tabela[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xe7};
/**************************************************************************
**************************************************************************/
void jogacont(void){ // Rotina para jogar valores no contador
output_high(du); // Apaga display de unidade
output_low(dd); // Seleciona display de dezena
output_b(tabela[cont/10]); // Joga o valor do contador
delay_ms(50); // Tempo para display ligado
output_high(dd); // Apaga display de dezena
output_low(du); // Seleciona display de unidade
output_b(tabela[cont%10]); // Joga o valor do contador
delay_ms(50); // Tempo para display ligado
return; // Retorna
}
int para_cont(int a){ // Rotina para parar contagem
while(1){ // Laço infinito até STOP ser novamente pressionado
jogacont(); // Chama rotina para jogar valores no contador
if(!input(stop)){ // Executa bloco caso botão STOP for pressionado
while(!input(stop)){
} // Laço para soltar tecla
return (1);
}
if(!input(reset)){ // Zera o contador caso RESET sejá pressionado
while(!input(reset)){
} // Laço para soltar tecla
cont=0; // Zera cont
}
if(!input(gcont)){ // Grava valor do contador na EEPROM
while(!input(gcont)){
} // Laço para soltar tecla
write_eeprom(1,cont); // Salva o valor do contador na EEPROM
}
if(!input(rcont)){ // Recupera valor do contador na EEPROM
while(!input(rcont)){
} // Laço para soltar tecla
cont=read_eeprom(1); // Recupera o valor do contador da EEPROM
}
}
} // Fim do bloco para botão STOP pressionado
/**************************************************************************
**************************************************************************/
void main(void){ // Rotina principal
int temp,aux; // Variavel auxiliar de tempo de execução de laço
aux=0; // Variavel para controlar laço
set_tris_a(0b00111101); // configuração da direção dos pinos de I/O
set_tris_b(0b00000000);
cont=0; // Garante que o contador comece em zero
delay_ms(300); // Estabilização da EEPROM
while(1){ // Laço de repetição infinito
if(!input(ldr)){ // Testa se sensor foi cortado (passagem de peças)
while(!input(ldr)){
} // Laço para sensor voltar ao estado normal
if(cont < 99){ // Executa se o contador estiver abaixo do limite
cont ++; // Incrementa 1 em cont
temp=5; // Joga 5 em temp para definir tempo para disparar buzzer
while(temp != 0){ // Laço para acionar o buzzer
output_high(bz); // Joga nivel alto no buzzer
delay_ms(5); // Tempo para gerar frequencia de nivel alto
output_low(bz); // Joga nivel baixo no buzzer
delay_ms(5); // Tempo para gerar frequencia de nivel baixo
temp --; // Decrementa 1 de temp
delay_ms(temp); // Delay carregado com o valor de temp
} // Fim do laço do buzzer
}
else cont=0; // Se contador já estiver em 99 o mesmo é zerado
} // Fim do teste de sensor cortado
if(!input(stop)){ // Executa bloco caso botão STOP for pressionado
while(!input(stop)){
} // Laço para soltar tecla
while(!para_cont(aux)){ // Chama rotina para parar contagem
}
} // Fim do bloco para STOP
if(!input(reset)){ // Zera o contador caso RESET sejá pressionado
while(!input(reset)){
} // Laço para soltar tecla
cont=0; // Zera cont
}
if(!input(gcont)){ // Grava valor do contador na EEPROM
while(!input(gcont)){
} // Laço para soltar tecla
write_eeprom(1,cont); // Salva o valor do contador na EEPROM
}
if(!input(rcont)){ // Recupera valor do contador na EEPROM
while(!input(rcont)){
} // Laço para soltar tecla
cont=read_eeprom(1); // Recupera o valor do contador da EEPROM
}
jogacont(); // Chama rotina para jogar valores no contador
} // Fim do laço de repetição
} // Fim do programa
me desculpe gustavo mas o blog não estava configurado para aparecer o comentário de imediato , mas foi este seu comentario :
ResponderExcluirGustavo deixou um novo comentário sobre a sua postagem "Esteira - contador de objetos":
Projeto muito bom. Montei ele e funcionou perfeitamente . tá aprovado.
Isso q eu n entendo nda e consegui montar. sem contar q qlqr coisa, o pessoal aki da um help.
Voce usou o micro code??
Excluirboa tarde voç~e poderia me informar qual programa voçê usou para fazer a programação ????
ResponderExcluirmuitop obrigado desde ja
esse código foi feito pelo Rafael ,ele provavelmente usou o CCS(juntamente como MPlab),o CCS é um compilador C que funciona independente do MPlab mas se vc instalar um plugin ele roda dentro do MPlab.
ExcluirOi, meu nome é junior, atualmente estou fazendo o curso de mecatrônica,
ResponderExcluirestou interessado em fazer uma esteira dessa no meu tcc,
gostaria que vcs me ajudassem a fazer a minha, mas com o pic18f4550,
qualquer coisa por favor me mandem no meu email !!!
Obrigado, pela atenção!!
Email: zyunior@gmail.com
Olá, esse projeto foi enviado por um leitor do blog, mas se precisar de mais informações basta curti a fan page no facebook e então vc pode me enviar mensagem pelo bate papo do face.
Excluirce num teim o hex ai pra eu usa o willem usb prog naum ??? agradeço !!!
ResponderExcluirnão tenho o hex!
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirTestei o código no arduino e ele apresentou varios erros, em qual programa foi feito?
ResponderExcluir