Interrupção externa - 16F628A - CCS

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Interrupção externa - 16F628A - CCS

Mensagempor AlbertPlanck » 26 Mai 2010 00:09

Seguinte, quero fazer com que meu programa receba uma interrupção pelo pino B0 e que seja tratado através de uma interrupção externa.
Criei um loop infinito no main() com o intuito de eu mesmo mudar o valor do pino B0 e gerar as interrupções para ver se está funcionando
Segue o código:

Imagem

Uso o Compilador CCS
Abraços
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23

Mensagempor AlbertPlanck » 26 Mai 2010 12:35

ninguém galera?
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23

Mensagempor KrafT » 26 Mai 2010 12:48

Bom, não se deve usar delay na interrupção...

Mas explica teu problema melhor...
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor AlbertPlanck » 26 Mai 2010 12:56

Esse delay eu estou usando só para teste mesmo. Seguinte, no pino RB0 eu devo receber os 5V que virá de um sensor e fazer o tratamento via interrupção externa.
Como não programo muito bem em PIC resolvi fazer esse programa simples para ver se consigo tratar o pino RB0 via interrupção externa.
Então, no main() eu mesmo gero os 5V e 0V no pino RB0 para que simule a interrupção externa que viria do sensor e entre na função interrupcao().
Para saber se está funcionando, na funcao de tratamento da interrupção externa eu apenas acendo e apago um LED, só para saber se está funcionando.
Assim, no problema final, não será necessário acender esse LED, só estou acendendo para ver se ele está entrando na função interrupcao(). Pois deveria entrar não? não é para entrar automaticamente sempre que houve mudança de LOW para HIGH no pino RB0?
Como eu fiz esse circuito no PROTEUS, eu vejo que o valor da entrada muda entre 0V e 5V mas o LED não acende, ou seja, não está entrando na função interrupcao().

Se puderem me ajudar agradeço
abraços
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23

Mensagempor KrafT » 26 Mai 2010 13:02

Melhor gerar o sinal em outro pino, tipo RA1 e ligar no RB0 com um fio.
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor AlbertPlanck » 26 Mai 2010 13:12

como assim?
mas não é o RB0 o único pino do 16f628A que serve para interrupção externa?
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23

Mensagempor KrafT » 26 Mai 2010 13:38

Acho que voce nao pode gerar e ler o sinal ao mesmo tempo no mesmo pino...

Imagem


E eu falei gerar o sinal em outro pino.
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor leoabubauru » 26 Mai 2010 13:55

AlbertPlanck

Se B0 é configurado como interrupção externa ele não pode ser ao mesmo tempo uma saída. Ser interrupção externa já coloca o B0 como input, portanto você não poderá acioná-lo como faz no WHILE(1) já que este tipo de acionamento só é feito com um pino de output.

A sugestão dada pelo KrafT é que você configure um pino como saída e ligue um fio dele ao B0. Depois você aciona este novo pino dentro do WHILE(1).

Assim:

Código: Selecionar todos
#define Pino_Teste pin_a1
.
.
.
Main(void)
   .
   .
   .
   set_trisa(0b00000000); // A0 e A1 como saidas
   .
   .
   .
   While (1)
      {
       delay_ms(400);
       output_high(Pino_Teste);
       delay_ms(400);
       output_low(Pino_Teste);
      }


Outra dica:

Quando postar algo, procure fazê-lo na forma de uma pergunta. Isso facilita nossa compreensão do problema (ver primeira resposta do Kraft). Releia o que você postou no início do tópico e imagine alguém que não conhece seu problema tentando entender sua necessidade... :roll:


No mais, o que pudermos ajudar assim o faremos!


Laercio
Editado pela última vez por leoabubauru em 26 Mai 2010 19:11, em um total de 2 vezes.
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor AlbertPlanck » 26 Mai 2010 18:35

Muito obrigado, está resolvido
Me desculpe KrafT se não entendi na primeira vez o que você havia proposto...
No mais, obrigado pela ajuda
abraços
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23

Mensagempor AlbertPlanck » 27 Mai 2010 00:14

Eu consegui fazer como foi proposto, e gerar a interrupção todas vez que um outro pino gera a saída
Só que agora, como próximo passo, quero que a interrupção seja gerada quando um botão for pressionado.

Imagem


Imagem

Minha nova pergunta é:
Por que quando eu pressiono o botão, a interrupção não é gerada?
Creio que é algo elementar, se alguém puder me dar uma força
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23

Mensagempor KrafT » 27 Mai 2010 06:02

Bom, ou voce liga o pull-up interno do PORTB e bota a chave a conectar o pino para GND, ou voce esquece o pull-up interno e mantem a tua fonte como está, mas coloca um pull-down externo, por exemplo um resistor de 4k7.

Ou ainda põe uma chave de 2 polos, que alterne o nivel de RB0 ao ser pressionado... Enfim as opções são muitas...

Mas não espere "...a vida te servir felicidade numa bandeja de prata..." (by Bob Esponja)
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor AlbertPlanck » 02 Jun 2010 18:40

Muito obrigado
It's working!!
I never think of the future - it comes soon enough.
-Albert Einstein
Avatar do usuário
AlbertPlanck
Bit
 
Mensagens: 10
Registrado em: 12 Mai 2010 12:23


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x