Ir ao conteúdo
  • Cadastre-se

Dúvida com pic16f628a


macdown

Posts recomendados

Pessoal, estou começando a mexer com pic só como hobby!

E ai testei um esquema simples no ISIS, o engraçado é que no ISIS funciona, mais quando gravo no pic ele nao funciona corretamente.

Usei um pic 16f628a com um botao de pulso e led, assim que o botao é acionado o led fica aceso só 10 segundos.

O problema é que sem o botao ele fica já fazendo a rotina em um loop sem que eu do o comando do botao...

Codigo usado:

#include <16f628a.h>

#use delay(clock=4000000)

#fuses INTRC_IO, NOWDT, PUT, BROWNOUT, NOMCLR, NOLVP

#define BOTAO PIN_A2

#define LED PIN_A1

void main(){

while(true){

if(input(BOTAO)){

output_high(LED);

delay_ms(10000);

output_low(LED);

}

}

}

No PIC real fica no loop infinito mais no ISIS funciona normal...

Alguem tem uma explicação para isso?

Abraço.

Link para o comentário
Compartilhar em outros sites

nao entendo c mais ,vou te dar um exemplo ae você transfere pra c ok?

trisa=1 define porta como entrada

trisb=0 define portb como saida

porta=0 zera as entradas

portb=0 zera as saidas

teste:

if porta.0=0 then "se a entrada for a nivel 0 ja q ela estara em nivel 1 devido ao resitor de pull up"

portb.0=1 else

portb.0=0

end if

goto teste

end

tentou zerar as entradas e saidas antes do programa principal?

esqueci do debouci,e de suma importancia

Link para o comentário
Compartilhar em outros sites

Provavelmente seu PIC está pegando muito ruido e ele ativa a chave sozinho. Experimente fazer deboucing. Colocar um delay logo depois do teste do botao, assim ó:

#include <16f628a.h>
#use delay(clock=4000000)
#fuses INTRC_IO, NOWDT, PUT, BROWNOUT, NOMCLR, NOLVP

#define BOTAO PIN_A2
#define LED PIN_A1

void main()
{
while(true)
{
if(input(BOTAO))
{
delay_ms(50);
output_high(LED);
delay_ms(10000);
output_low(LED);
}
}
}

flws

Link para o comentário
Compartilhar em outros sites

#include <16F628A.h>

#fuses xt,nolvp,nowdt

#define BOTAO PIN_B0 // Define entrada para o botão

#define LED PIN_B3 // Define a saída para o led

void main(void)

{

while(1)

{

if (input(BOTAO))

output_low(LED);

else

output_high(LED);

}

}

esse exemplo é um pouco diferente porque usa outra pinagem mas esta foncionando

eu sempre procuro usar os pinos rb pois os ra tem comparadores e tem que ser tratado no codigo entendeu?

Link para o comentário
Compartilhar em outros sites

eu sempre procuro usar os pinos rb pois os ra tem comparadores e tem que ser tratado no codigo entendeu?

os RA são as entradas para o conversor ADC, mas no 16f628a isso nao existe porq ele nao possui tal função.

Mas a dica de usar os RB é válida sim, eu também gosto de usar eles também.

flws

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!