Ir ao conteúdo
  • Cadastre-se

PIC Pic 16f628a não executa o código corretamete


Posts recomendados

Olá, estou trabalhando em um projeto onde aperto um botão, o pic mande o sinal pra ponte h mandar um motor girar num sentido, atinge um sensor, o motor gira no outro sentido, e quando atinge o segundo sensor o motor volta por dois segundos, para e aguarda até que o botão seja pressionado novamente começando o cilclo novamente.

 

Estou usando o pic 16f628a

O ci de ponte h é o L293D

 

Fiz um pequeno código que funciona perfeitamente no proteus, más quando montei o circuito, o pic fez algo totalmente diferente do programado ele não estava obedecendo a função "if"

Estou aprendendo ainda a linguagem C.

Segue o código que fiz no mikro c e o esquema no proteus.

Obs.: o esquema já ta pronto pra montagem na pcb

 

 #define start RB0_bit                           // Define RB0_bit como start
 #define revert RB1_bit                          // Define RB1_bit como revert
 #define stop RB2_bit                            // Define RB2_bit como stop
 #define cc RB3_bit                              // Define RB3_bit como cc
 #define cw RB4_bit                              // Define RB4_bit como cw
 #define motor_enable RB5_bit                    // Define RB5_bit como motor_enable

 bit flagB0, flagB1, flagB2;                     // Configura as variaveis

void main()
{


 TRISB0_bit = 1;                                 // Define RB0 como entrada
 TRISB1_bit = 1;                                 // Define RB1 como entrada
 TRISB2_bit = 1;                                 // Define RB2 como entrada

 

 TRISB3_bit = 0;                                 // Define RB3 como saida
 TRISB4_bit = 0;                                 // Define RB4 como saida
 TRISB5_bit = 0;                                 // Define RB5 como saida
 
 RB3_bit = 0;                                      // Define o valor inicial de RB3 como 0
 RB4_bit = 0;                                      // Define o valor inicial de RB4 como 0
 RB5_bit = 0;                                      // Define o valor inicial de RB5 como 0

  for(;;)                                                // Loop Infinito
  {
  if ((start == 1) && (flagB0 == 0))               // Se o botao start for pressionado, verifica se a flagB0 esta em "0"
     {
      delay_ms(50);                                       // Delay de para reduzir o bounce
       if ((start == 1) && (flagB0 == 0))          // Verifica se o botao start continua pressionado e se a flagB0 continua em "0"
       motor_enable = 1;                                // Habilita o motor
       cc = 1;                                                  // Coloca o pino "RB3" em nivel logico alto
       cw = 0;                                                 // Coloca o pino "RB4" em nivel logico baixo
       flagB0 = 1;                                           // Define a flagB0 em "1"
       flagB2 = 0;                                           // Define a flagB2 em "0"

      }

  if ((revert == 1)&& (flagB1 == 0))              // Se o botao revert for pressionado,verifica se a flagB1 esta e "0"
      {
       delay_ms(50);                                      // Delay para reduzir o bounce
       if ((revert == 1) && (flagB1 == 0))        // Verifica se o botao revert continua pressionado e se a flagB1 continua em "0"
       cc = 0;                                                  // Coloca o pino "RB3" em nivel logico baixo
       cw = 1;                                                 // Coloca o pino "RB4" em nivel logico alto
       flagB1 = 1;                                           // Define a flagB1 em "1"
      }
  if ((stop == 1) && (flagB2 == 0))               // Se o botao stop for pressionado,verifica se a flagB2 esta e "0"
      {
       delay_ms(50);                                    // Delay para reduzir o bounce
       if ((stop == 1) && (flagB2 == 0))         // Verifica se o botao stop continua pressionado e se a flagB2 continua em "0"
       cc = 1;                                                 // Coloca o pino "RB3" em nivel logico alto
       cw = 0;                                                // Coloca o pino "RB4" em nivel logico baixo
       delay_ms(2000);                                 // Aguarda 2 segundos
       cc = 0;                                                 // Coloca o pino "RB3" em niveç logico baixo
       motor_enable = 0;                               // Desabilita o motor
       flagB0 = 0;                                           // Define a falgB0 em "0"
       flagB2 = 1;                                           // Define a falgB2 em "1"

      }

     }
}

 

image.png

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...