LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: rocha_rm em 23 de Maio de 2010, 06:19
-
Estou a fazer a minha primeira interrupção em pic, usando o mikroc 8.2
Ao simular, não activa a interrupção quando carrego no botão. Penso que esteja tubo bem configurado.
void interrupt ()
{
INTCON.INTF = 0;
PORTB.F1 = ~PORTB.F1;
}
void main(void)
{
TRISB = 0b00000001; //Rb0 como entrada
PORTB = 0;
OPTION_REG= 0b11000000; //flanco ascendente
INTCON.INTE = 1;
INTCON.INTF = 0;
INTCON.GIE = 1; //activar a interrupção
for ( ; ; );
}
-
Olá rocha_rm, efectivamente parece estar bem configurado.
Será que não e do teu hardware?! E em termos de bits de configuração, estarão correctos?! Se puderes coloca aqui os que usaste.
Podias meter um pco de código antes para teres a certeza que o micro está a funcionar, e dps testavas a interrupção, mete por exemplo um led a piscar 5 vezes ou assim....
Cumprimentos, Mauro.
-
Simuladores... Nunca podes confiar totalmente neles, testa isso em hardware real.
-
Problema resolvido..
O problema era mesmo do proteus, não percebo porque não adicionava uma interrupção quando carregava num botao ligado ao Vcc. Tentei com entrada em degrau e ja aceitava. :)
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg195.imageshack.us%2Fimg195%2F7343%2Fsemttulotz.png&hash=1778ca32828237d950ab8f46fb48909b9ee6cc7b) (http://img195.imageshack.us/i/semttulotz.png/)
-
Em hardware real, cada vez que se pressiona e larga o botão, vão saltar dezenas ou centenas de interrupções.
É necessário criar um debounce para qualquer tecla/interruptor/fim-curso ligado a electrónica digital.
Entre 5ms e 10ms é suficiente. Se se puder ver as especificaçõs do botão, o fabricante inclui sempre o Settling Time, que indica para quanto deverá ser o atraso de debounce.
-
Tem lógica, obrigado pelo esclarecimento ;)