Ir ao conteúdo
  • Cadastre-se

Interupcao externa pic ccs


Posts recomendados

bom gostaria de ver se estou no caminho certo pois nos meus testes praticos me parece q estou tratando errado a interupcao externa, bom explico..

tenho um pic16f877a e vou usar a porta B0/INT (pino 33).. tenho o CCS como compilador e trato da seguinte forma durante o trecho do programa:

...int16 contador=0;#int_EXTvoid EXT_isr(void){contador++;}void main(){  disable_interrupts(INT_EXT);      disable_interrupts(GLOBAL);...while(TRUE)  {switch(modo)...case 2 :{  enable_interrupts(INT_EXT);      enable_interrupts(GLOBAL);  printf(lcd_putc,"\fSTATUS:'ativado'\nN. PULSOS : %04lu "contador);...

Bom neste pino tenho um sensor indutivo q terei um sinal na faixa de aprox 1HZ.

pergunta, estou tratando certo? é coreto usar ele como contador? 

digo isso porque estou sem o sensor e uso um botao p simular e parece q o contador nao esta subindo de 1 em 1 e sim muito mais..... ja utilizei um pull down 10k e nada..

grato pelas opinioes

sera q estou erando em algo?

Link para o comentário
Compartilhar em outros sites

cesarlg

 

 O contador esta contando, mas não de 1 em 1, é isso mesmo?

É só um palpite: pode ser porque durante o tempo em que o pulso esta em nível alto o programa esta sendo executado varias vezes... Experimente inserir um Delay na rotina da interrupção ou no retorno dela, ou configurar a interrupção por flanco de descida. Pode ser que resolva...  Sem contar que uma chave tipo push button deve gerar milhões de ruídos, que podem estar fazendo o PIC detectar essa interrupção mais de uma vez (pelo motivo citado logo acima), tente interfacear seu pulso com o pino do PIC usando uma porta schmitt...  Isso vai lhe gerar um pulso limpo e livre de ruídos...

 

 Espero ter ajudado.

Grato Luiz Gustavo.

Link para o comentário
Compartilhar em outros sites

realmente era ruido do botao.. acrescentei um capacitor neste pino e me parece q esta quase resolvido.. aproveitando sobre essa porta schmitt, como funciona no pic? achava q era um ci dedicado... 

Aproveitando no mesmo codigo escrito eu salvo uma variavel tipo int16 chamada de "äjuste", mas ao testar na pratica, nao ficou a contento.. trato essa funcao de gravar na eeprom em 2 momentos, como estou trabalhando com switch, primeiro gravo no case onde acontece o incremento ou decremento da variavel ajuste , desta forma

write_eeprom (1, ajuste);

depois no default eu verifico qual o numero gravado assim:

ajuste = read_eeprom(1);

mas se eu desligo o pic e ligo vejo q a variavel nao esta sendo gravada coretamente, até o valor 255 me parece gravar bem, apos esse valor nao mais. e eu preciso utilizar até 9999. agadeço se puder explicar onde erro! obrigado

Link para o comentário
Compartilhar em outros sites

cesarlg

 

Esse problema da EEprom acontece por que a EEprom do PIC é de 8 Bits, ou seja só é possível armazenar valores de 0 a 255 (2^8)... Ou seja você vai ter que  dividir a variável e salvar em 2 endereços (Aqui no fórum mesmo tem um tópico sobre como fazer isso)...

 Quanto a porta schmitt o PIC tem internamente nos ports de interrupção, mas em alguns casos (como se mostrou o seu, não foi suficiente)... Dá uma conferida neste artigo, ele explica melhor do que eu poderia....  hehe

http://www.clubedaeletronica.com.br/digital/HTML/7414.htm

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!