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

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

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 – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!