×
Ir ao conteúdo
  • Cadastre-se

PIC Como fazer o pino 3 (GP4) piscar por 500 ms. com o PIC 12f675


Posts recomendados

Colegas, como seria o trecho do código (só a parte ali dos IF´s) que faria um 12f675 agir assim: Assim que Gp0 recebe um nível alto (1), inicia um monitoramento interno e quando Gp0 ficar em nível 0 por mais que 1000ms (1 segundo) o pino 3 (GP4) pisca por 500 ms. Por exemplo: Pino 7 começa a receber pulsos, se parar de recebê-los por 1 s ou mais, imediatamente pino 2 pulsa só 1 vez. Depois, o pino 7 voltará a receber pulsos, e aí ocorre tudo de novo, ou seja, recebe os pulsos no pino 7 e só vai piscar o pino 2 quando parar de entrar pulsos no pino 7 por 1 s ou mais.

if (gp0==1) {

delay_ms(1000);

if(gp0==0{

gp4=1;

delay_ms(500);

gp4=0;

}

}

 

Tá errado. 

 

Como seria o correto ?

 

GRATO

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Algo como:
 

for (;;)
{
while(!gp0); //aguarda 1
while(gp0); //"monitoramento interno"
while(!gp0)
	{
	delayms(1);//1mS
	if (tempo++>999) {gp4=1;delayms(500);gp4=0;tempo=0;}
	}
}

?

off semi on.. é pra você?  pra 'alguém'? pra que serve?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Pinos usam nascer como entrada ou funções alternativas. Declarou corretamente o pino 7 como entrada e 3 como saída? Ele não é open source (vendo o d.s....)? Ligou o catodo ou anodo do led?  Declarou como I/O? Entradas usam ter pullup interno. Deixou coerente? Também há a questão dos fuses. Setou corretamente? Já fez 1 led piscar? Não queime etapas.

 

Off semi on ... subentendi...

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

ok. Teça comentários sobre as demais observações que fiz. Todas, uma a uma. Publique fotos e desenhos, publique  o fonte completo e o .hex e o .cof gerado. Não basta ctrl-c ctrl-v. O fonte que "sugeri" pode ser melhorado e/ou corrigido depois de entendido por completo (visto que nem eu me auto entendi😁).

 

Que bom que 'resolveu' 😁

2 horas atrás, eletron1791 disse:

int1 tempo=0;

if (tempo++>999) {gp4=1;delay_ms(500);gp4=0;tempo=0;}

 

Ou seja, sem mexer em nada, só ao energizar o PIC era para gp4 pulsar quando tempo for maior que 999 (alias este 999 é em que ? microsegundos ?)

Bem ... os 999 é em mS. Antes dele tem um delay de 1mS, percebe? Se>999 => =1000 ...1000mS=1segundo 🤪

E isso:

2 horas atrás, eletron1791 disse:

if (tempo++>999) {gp4=1;delay_ms(500);gp4=0;tempo=0;}

deve estar dentro de um loop eterno pra funcionar. Por isso te pedi seu fonte e etc.. mas...

Que bom que resolveu!

 De nada.

Pra você também!

49 minutos atrás, eletron1791 disse:

Acabei resolvendo de outra forma adaptando um 555. 

 

Muito grato pela ajuda.

 

Bom feriado.

 

Link para o comentário
Compartilhar em outros sites

Fui mexendo de curiosidade e desconfio que o tal tempo++ não está funcionando. Pois eu comentei todo aquele trecho do seu código e deixei somente isso:

 

int1 tempo=0;

if (tempo++>999) {gp4=1;delay_ms(500);gp4=0;tempo=0;}

 

Ou seja, sem mexer em nada, só ao energizar o PIC era para gp4 pulsar quando tempo for maior que 999 (alias este 999 é em que ? microsegundos ?)

 

Mas nada acontece (eu sei, postar código completo, fotos, etc...mas é que é uma bobagem tão boba, é só pra dar certo um lance aqui. Quero dar um pausa automático numa caixinha de som). 

 

Foi mal, o PIC é o 12f629, esqueci de dizer desde o inicio

Link para o comentário
Compartilhar em outros sites

Meu 555 acabou não dando tão certo quanto eu pensei

 

E agora a ajuda que eu preciso é: Gp0 tem 10K para GND e botão para o +5. Quando eu pressionar ele 4 vezes, Gp4 tem que pulsar por 500ms (tem um led no pino 3)


     

   int1 cont=0;



        if (Gp0==1) {
        cont++; }
        if (cont==4) {
        Gp4=1;
        delay_ms(500);
        Gp4=0;
        cont=0;
        }

 

Não aconteceu nada

 

como tem que ficar ?

 

 

 

Ah, sobre o botão, tem que atuar quando ele abrir os contatos

Link para o comentário
Compartilhar em outros sites

CONSEGUI, fiz assim:

int x=0;



if (Gp0==1) {
        x++;
        delay_ms(500);
          if(x>5){
          Gp4=1;
          delay_ms(500);
          Gp4=0;
          x=0;
        }
      }

 

No caso quando x for maior que 5. Só esta parte que fiquei sem entender pois se eu colocar x == 5 o compilador CCS exibe um warning, condition always FALSE

 

Mas tá bom, com x > 5 também resolve meu problema.

 

Saudações !

 

 

 

Link para o comentário
Compartilhar em outros sites

  • DiF alterou o título para Como fazer o pino 3 (GP4) piscar por 500 ms. com o PIC 12f675

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

GRÁTIS: ebook Redes Wi-Fi

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!