Ir ao conteúdo

Posts recomendados

Postado

Olá Pessoal, sou novo no mundo dos PICs. estou fazendo um projeto no qual através de cinco botões eu aciono 5 relês com o 16f628A. O problema é que 4 saídas do PIC esta saindo só 1v e na 5a saida só sai 0,25v.  todas as saidas nao deveriam estar saindo proximo de 5v?

O sistema funciona assim, as saidas do pic acionam um optoacoplador 2501 que chaveia a saida 12v para os reles.

Esta a programaçao que fiz no PIC C Compiler

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  //#FUSES NOPUT                    //No Power Up Timer
  //#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  //#FUSES NOCPD                    //No EE protection
  //#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(internal=4000000)


#use fast_io (a)
#use fast_io (b)

   
  


void main()
{
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_4MHZ);

//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

  
 
   set_tris_a (0b00111100);            // 0 SAIDA 1 ENTRADA   76543210
   Set_tris_b (0b00001111);
   
   output_low (pin_B0);
   output_low (pin_B1);
   output_low (pin_B2);
   output_low (pin_B3);
   output_low (pin_B4);
   output_low (pin_B5);
   output_low (pin_B6);
   output_low (pin_B7);

   output_low (pin_A0);
   output_low (pin_A1);
   output_low (pin_A2);
   output_low (pin_A3);
   output_low (pin_A4);
   output_low (pin_A5);
   output_low (pin_A6);
   output_low (pin_A7);
   

   Int Milha = 0;
   Int Teto = 0 ;
   Int Lanterna = 0; 
   Int Baixo = 0;
   Int Alerta = 0;
   
   
   while(true)
   {
   
   // Milha
   
   If(input(pin_B3))
   {
      Milha ++;
     delay_ms (300);
   }   
   
   If ( Milha >> 1)
   {
      Milha = 0;
   }
   If ( Milha == 1 )
   {
      output_high (pin_B4);
   }
   Else 
   output_low (pin_B4);

  
  // Teto
   
   If(input(pin_B2))
   {
      Teto ++;
     delay_ms (300);
   }   
   
   If ( Teto >> 1)
   {
      Teto = 0;
   }
   If ( Teto == 1 )
   {
      output_high (pin_B5);
   }
   Else 
   output_low (pin_B5);


 // Lanterna
   
   If(input(pin_B1))
   {
      Lanterna ++;
     delay_ms (300);
   }   
   
   If ( Lanterna >> 1)
   {
      Lanterna = 0;
   }
   If ( Lanterna == 1 )
   {
      output_high (pin_B6);
   }
   Else 
   output_low (pin_B6);


 // Baixo
   
      
   If(input(pin_B0))
   {
      Baixo ++;
     delay_ms (300);
   }   
   
   If ( Baixo >> 1)
   {
      Baixo = 0;
   }
   If ( Baixo == 1 )
   {
      output_high (pin_B7);
   }
   Else 
   output_low (pin_B7);
   

// Alerta
   
   If(input(pin_A3))
   {
      Alerta ++;
     delay_ms (300);
   }   
   
   If ( Alerta >> 1)
   {
      Alerta = 0;
   }
   If ( Alerta == 1 )
   {
      output_high (pin_A0);
   }
   Else 
   output_low (pin_A0);

 }
while(true)
   {
   }

}

Obrigado, 

Postado

Pelo que eu me lembre,

entrada = 1 e saída = 0.

Acho melhor configurar o TRISA como entrada e o TRISB como saída. 

E aquela parte onde colocou tudo em zero eu não entendi. 

 

Postado

Que venha a ser setada a condição inicial de uma saida, até aí tudo normal, mas uma entrada, sei lá, até onde sei é o meio externo que dá valor a uma entrada.

Quanto ao fato do nível 1 não passar de 1V, por favor, poste o circuito elétrico.

Postado

Experimente isto;


 #include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC                    //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  //#FUSES NOPUT                    //No Power Up Timer
  //#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  //#FUSES NOCPD                    //No EE protection
  //#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(internal=4000000)


#use fast_io (a)
#use fast_io (b)

   Int Milha = 0;
   Int Teto = 0 ;
   Int Lanterna = 0; 
   Int Baixo = 0;
   Int Alerta = 0;

#int_RTCC
void RTCC_isr(void) {
 // Milha
   
   If(input(pin_B3))
   {
      Milha ++;
     delay_ms (300);
   }   
   
   If ( Milha >> 1)
   {
      Milha = 0;
   }
   If ( Milha == 1 )
   {
      output_high (pin_B4);
   }
   Else 
   output_low (pin_B4);

  
  // Teto
   
   If(input(pin_B2))
   {
      Teto ++;
     delay_ms (300);
   }   
   
   If ( Teto >> 1)
   {
      Teto = 0;
   }
   If ( Teto == 1 )
   {
      output_high (pin_B5);
   }
   Else 
   output_low (pin_B5);


 // Lanterna
   
   If(input(pin_B1))
   {
      Lanterna ++;
     delay_ms (300);
   }   
   
   If ( Lanterna >> 1)
   {
      Lanterna = 0;
   }
   If ( Lanterna == 1 )
   {
      output_high (pin_B6);
   }
   Else 
   output_low (pin_B6);


 // Baixo
   
      
   If(input(pin_B0))
   {
      Baixo ++;
     delay_ms (300);
   }   
   
   If ( Baixo >> 1)
   {
      Baixo = 0;
   }
   If ( Baixo == 1 )
   {
      output_high (pin_B7);
   }
   Else 
   output_low (pin_B7);
   

// Alerta
   
   If(input(pin_A3))
   {
      Alerta ++;
     delay_ms (300);
   }   
   
   If ( Alerta >> 1)
   {
      Alerta = 0;
   }
   If ( Alerta == 1 )
   {
      output_high (pin_A0);
   }
   Else 
   output_low (pin_A0);
 }
   

void main()
{
   
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_oscillator(OSC_4MHZ);

//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

  
 
   set_tris_a (0b00111100);            // 0 SAIDA 1 ENTRADA   76543210
   Set_tris_b (0b00001111);
   
   output_low (pin_B0);
   output_low (pin_B1);
   output_low (pin_B2);
   output_low (pin_B3);
   output_low (pin_B4);
   output_low (pin_B5);
   output_low (pin_B6);
   output_low (pin_B7);

   output_low (pin_A0);
   output_low (pin_A1);
   output_low (pin_A2);
   output_low (pin_A3);
   output_low (pin_A4);
   output_low (pin_A5);
   output_low (pin_A6);
   output_low (pin_A7);
   

   Milha = 0;
   Teto = 0 ;
   Lanterna = 0; 
   Baixo = 0;
   Alerta = 0;
   

while(true)
   {
   }

} 

 

  • Membro VIP
Postado
9 horas atrás, Marcelo Marinelli disse:

If ( Alerta >> 1)
   {
      Alerta = 0;
   }

isso ta estranho

Publique esquema

 

9 horas atrás, Marcelo Marinelli disse:

#FUSES NOMCLR                   //Master Clear pin used for I/O

Eu (eu) gosto de usar o pino reset. Se bem que não lembro se o 628 tem opção pra uso como IO neste pino. Veja o d.s. e confirme

 

3 horas atrás, vtrx disse:

while(true) { }

sem interrupt isso fica sem sentido

Postado
4 minutos atrás, Isadora Ferraz disse:

isso ta estranho

Publique esquema

 

Eu (eu) gosto de usar o pino reset. Se bem que não lembro se o 628 tem opção pra uso como IO neste pino. Veja o d.s. e confirme

 

sem interrupt isso fica sem sentido

Acho que ele habilitou a interrupção aqui;

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

E a rotina de interrupção aqui;

#int_RTCC
void RTCC_isr(void)...

 

  • Membro VIP
Postado
28 minutos atrás, vtrx disse:

Acho que ele habilitou a interrupção aqui;

ok.... Só não vi onde 'liberou geral' . :confused:  Me lembro vagamente que era a GIE...

Esta sintaxe ccs me dá nos nervos......:mad::angry:

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!