Programación Específica > Microcontroladores
Problema con interrupcion RB y retardos
Pegasux:
Muy buenas. El problema que tengo consiste en que cuando llamo a la rutina de un retardo largo, durante ese retardo no me salta a la interrupcion RB, la del timer funciona bien y no me explico el porqué. He probado a meter directamente el codigo de la rutina en la funcion principal, pero tampoco salta.
Mas datos, he observado con un led que se enciende el solo cuando salta la interrupcion, al leer el bit RBIF dentro de la rutina de atencion a la interrupcion, el problema es que yo no estoy pulsando nada y ademas no hace nada porque no se aguanta el tiempo suficiente para superar el antirebote por software y sale de la rutina, pero cuando aprieto el pulsador ni siquiera llega a encenderse. He probado a habilitar las interrupciones pertinentes antes de llegar al retardo, pero funciona igual.
Gracias y un saludo.
damian_ayalazubrin:
hola, no entendi bien cual es el problema exacto que tenes, pero creo que a mi me pasa algo parecido. creo que la base del problema es como hace el microcontrolador para atender la interrupcion. otro problema posible es que estes desbordando el registro.
decime con que hard estas trabajando para ver si puedo ayudarte.
Pegasux:
Hola. Gracias por la respuesta. Estoy usando un pic 16F876A, el problema resumiendo, es que cuando en el programa principal entra en un retardo, la interrupcion del puertoB deja de funcionar, pero mientras no esta en el retardo, la interrupcion funciona bien, sin embargo, la interrupcion del timer0 funciona bien siempre. El programa principal es un bucle en el que hago cuatro cosillas y un retardo, si uso el pulsador mientras esta haciendo cosillas la interrupcion del puertoB funciona bien. Se ve claramente con un retardo largo y uno corto, con el corto esta mas tiempo haciendo cosillas que en el retardo, asi que es facil activar el pulsador fuera del retardo, sin embargo con un retardo largo esta mucho mas tiempo haciendo el retardo, por lo que hay que pulsar el boton justo cuando no esta en el retardo para que funcione, cosa bastante dificil.
Gracias de nuevo y un saludo.
damian_ayalazubrin:
ok, ya veo. no manejo exactamente el set de instrucciones del pic con el que estas trabajando, y tampoco se que capacidad de manejo de interrupciones tiene. pero para empezar te diria que agregues un rutina para evitar el rebote que se genera al presionar el pulsador, este rebote puede arruinar el mejor de los programas.
hace un bucle que cuente desde 255 a 0 unas 16 veces, este retardo es muy corto en terminos de reaccion humana pero alcanza para evitar que el microcontrolador cuente picos basura.
por otro lado mientras estes en el retardo tendrias que entrar si o si en la interrupcion ya que la interrupcion se activa por el estado de RB. Lo que deberias hacer es poner el pin de RB a 5v. y por medio de una resistensia ponerlo a cero cuando pulsas el pulsador. asi funciona mejor que con una recistencia de pull up.
espero serte util
Pegasux:
Hola de nuevo, antetodo gracias por tu respuesta. Se me ha olvidado comentar unas cosillas, utilizo tambien un display LCD y la linea RB7 esta compartida, por lo que no puedo ponerlo a 5v, necesito que sea pull up porque sino cuando saque un 0 para el display estoy haciendo un corto. Lo del antirebote tambien lo uso, de 20ms, de hecho, utilizo un led, lo puedo hacer que se encienda antes del antirebote o despues y veo que a veces se producen falsas pulsaciones por utilizar el LCD, sin embargo no llega a pasar el antirebote porque si enciendo el led despues este no luce si no pulso el boton.
Yo tambien pienso que tendria que entrar en la interrupcion, sin embargo no lo hace y es precisamente lo que intento averiguar.
Gracias por tu respuesta y un saludo.
Navegación
[#] Página Siguiente
Ir a la versión completa