Ir ao conteúdo
  • Cadastre-se
Otavio Pessini Bini

PIC interrupção por mudança de estado - pic16f877a

Recommended Posts

@Isadora Ferraz , bom dia.

 

Pensava que minha dor de cabeça havia acabado... SÓ QUE NÃO!

 

Simulando no Proteus, o programa está correspondendo exatamente da forma em que eu quero...

 

Porém, na protoboard, isso não acontece!

 

A saída RC4 (onde estou testando com resistor + led conforme pode ser visto na imagem a seguir), simplesmente não aciona com variação na entrada RB.

 

Notas:

 

1. O circuito está sendo alimentado, constatado pelo multimetro;

2. A saída RC4 não oscila nenhuma tensão, constado pelo multimetro (logo não é o resistor, nem o LED);

3. A entrada RB5, mesmo não alimentada, constatei que fica com uma tensão de 0.45V (não sei porque...). Pensei que talvez seja isso o problema, já que não fica em 0 absoluto conforme a condição do programa (não há mudança na entrada). Caso for isso, como posso corrigir e tirar essa tensão residual?

4. O estranho é que quando jogo a entrada RB5 para o neutro (forçando assim o 0V absoluto), também nada acontece.. O que penso que desafirma a questão acima, correto?

5. Testei com diferentes fontes de alimentação: 5V e pouquinho, 3.7V , e 4V e pouquinho.

6. O estranho é que nos primeiros testes, por incrivel que pareça e antes de tentar mil coisas, a programação constatava acendendo o led por 2 segundos, porém apenas quando ia de 0 para 1 na entrada.. dps alterei algumas coisas, religuei os fios achando que era algum curto, e apenas piorou, simplesmente a saída RC4 não faz nada!

 

Segue abaixo o código que estou usando:

 

unsigned char temp;

void interrupt (void)
{
       if(INTCON.RBIF == 1)
{
       RBIE_bit     =   0x00;
       RBIF_bit     =   0x00;
       RC4_bit      =   0x01;
       temp         =   PORTB;
       RBIE_bit     =   0x01;
 }
}

void main()
{
       CMCON        =   0x07;   // Desabilita Comparadores;
       RBIE_bit     =   0x01;   // Habilita a interrupção por mudança do PORTB <7:4>
       RBIF_bit     =   0x00;
       PEIE_bit     =   0x01;   // Desabilita Periféricos
       GIE_bit      =   0x01;   // Habilita a interrupção global

       TRISB        =   0xFF;   // PORTB configurado como entrada digital
       TRISC        =   0xEF;   // Apenas usaremos RC4 como saída digital

       RC4_bit      =   0x00;

 while(1){
       if(RC4_bit)
{
       delay_ms(2000);
       RC4_bit      =   0x00;

 }
}
}

 

E segue em anexo a imagem do circuito de teste na protoboard.

 

Consegue me ajudar dizendo se há algum erro no código ou no circuito montado?

 

No mais, agradeço... To batendo cabeça a noite inteira! rs

 

 

 

WhatsApp Image 2018-11-16 at 04.57.45.jpeg

Compartilhar este post


Link para o post
Compartilhar em outros sites

bixo burro kk

Observando seu questionamento #3, não vejo resistor de pullup no pino RB5. Penso que eis aí seu problema. Coloque um R de 10K entre o pino e vcc. E pro led coloque 1K

Seu desafio é pequeno "acender um led por 2 segundos quando mudar o estado de um port". Já já a gente consegue!😉

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Isadora Ferraz ,

 

hahahaha tenha paciencia comigo... rs

 

Segue a imagem do "novo circuito" em anexo.. É assim que você sugeriu a ligação? está correta?!

 

Outra coisa, não irei acender um led, isso é apenas para teste.. Vou utilizar para controlar um relé de estado sólido..

 

Ah, e como não possuo um resistor de 1K, coloquei um de 2 pro led.. Acho que não influencia muito né?!

 

Resumo: Caso a ligação esteja ok, adianto que com o interruptor não pressionado (NA), ainda consta a pequena tensão em RB5..

WhatsApp Image 2018-11-16 at 09.32.20.jpeg

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Otavio Pessini Bini ,

 

Faltam o famoso parzinho de capacitores : um cerâmico de 100nF e um eletrolítico de valor entre 10 a 47uF, ambos colocados o mais perto possível dos pinos de +VCC e GND do Pic... Detalhe que se aprende na prática !

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu sem noção amigo, seu pullup ta esquisito. Veja como tem que ser...

img1i.jpg

Coloque o cap de desacop do direto nos furos ao lado do ci. Coloque também um de 10uF. Coloque um 100nF no reset e gnd. Verifique se programou pro oscilador correto. No seu caso parece cristal 4Mhz o que seria XT nas configurações.

Agora vai!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Otavio Pessini Bini ,

 

Opa, por aqui tudo beleza sim kkk !

 

Repare o circuito formado pelo seu capacitor de desacoplamento... ele não faz desacoplamento nenhum, pois deveria estar "colado"  aos pinos do PIC, em vez de estarem ligados nas barras que se ligam através de fios, formando indutâncias e resistências à passagem da alta frequência. O circuito oscilador a cristal muitas vezes não consegue oscilar justamente por causa desse problema !

 

E cadê o eletrolítico ?  Ele é muito importante para estabilizar as possíveis variações de corrente, por exemplo quando aciona um Led.

 

Não tenha vergonha de colocar esses capacitores em cima do Pic, pode até mesmo colocar atravessado em cima, dependendo da posição dos pinos de GND e de VCC.

 

Outra dica : existe um par de barras de alimentação à esquerda do Pic, e outro par á direita do Pic, certo ?

Faça todas as ligações de GND e de VCC do PIC usando apenas uma dessas barras ! Evita os famosos loops de corrente que podem fazer sua simples montagem ter problemas absurdos e te deixar doido kkkk !

 

Paulo

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Professores,

 

Acharam que não iria voltar né, rsrsrsrs]

 

Pois bem, segui as diversas dicas por aqui, conforme podem ver na imagem em anexo do circuito atual, e .... NADA FEITO.

 

Simplesmente a saída RC4 não aciona diante do acionamento do push button na entrada..

 

Mais dicas?

WhatsApp Image 2018-11-17 at 14.17.56.jpeg

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Otavio Pessini Bini ,

 

Vi que voce colocou o eletrolitico, mas .... ( sempre tem um Mas ...) continuou ligando os pinos do Pic que devem ir ao GND e ao VCC nos dois conjuntos de barras de alimentação do protoboard : tanto na barra da esquerda como na barra da direita !

 

Mude isso, ou liga tudo nas barras à esquerda ou nas barras à direita !  Nas duas ao mesmo tempo pode ter problemas de não iniciar o oscilador a cristal.

 

Ah, outra coisa : monte o cristal e os dois capacitores diretamente nos pinos do PIC !!! Essa montagem longe, levando a ligação com fios até eles não dá certo !

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts... apanhando de 1 bit... quasiliteralmente. Só falta eu ir aí fazer pra você.😠

 

Fale sobre a V no RB5. Reteste no simulador. Ve o lance da programação do cristal que te falei. Faça um pisca led simples:

for(;;)
{
RB4_bit^=1;
delay(500);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×