sexta-feira, 12 de novembro de 2010

Esteira - contador de objetos

Por Rafael Varango de Aguiar


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

10 comentários :

  1. me desculpe gustavo mas o blog não estava configurado para aparecer o comentário de imediato , mas foi este seu comentario :

    Gustavo 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.

    ResponderExcluir
  2. boa tarde voç~e poderia me informar qual programa voçê usou para fazer a programação ????
    muitop obrigado desde ja

    ResponderExcluir
    Respostas
    1. 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.

      Excluir
  3. Oi, meu nome é junior, atualmente estou fazendo o curso de mecatrônica,
    estou 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

    ResponderExcluir
    Respostas
    1. 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.

      Excluir
  4. ce num teim o hex ai pra eu usa o willem usb prog naum ??? agradeço !!!

    ResponderExcluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir
  6. Testei o código no arduino e ele apresentou varios erros, em qual programa foi feito?

    ResponderExcluir

olá,digite aqui seu comentário!