• Martes 7 de Mayo de 2024, 21:47

Autor Tema:  Problema con interrupcion RB y retardos  (Leído 5041 veces)

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Problema con interrupcion RB y retardos
« en: Viernes 6 de Febrero de 2009, 18:02 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #1 en: Lunes 9 de Febrero de 2009, 16:52 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #2 en: Lunes 9 de Febrero de 2009, 18:20 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #3 en: Lunes 9 de Febrero de 2009, 19:43 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #4 en: Martes 10 de Febrero de 2009, 09:59 »
0
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.

damian_ayalazubrin

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #5 en: Martes 10 de Febrero de 2009, 18:30 »
0
Hola, bueno esto cambia un poco las cosas, no creo poder ayudarte sin ver en detalle tu proyecto, hay formas de no poner cosas en cortocircuito como usar diodos y cosas como esas. Te recomiendo que hagas un esfuerzo en revisar bien el hard (si el fabricante recomienda algo, por algo sera) aunque por lo que contas lo mas probable es que estes haciendo una operacion que este modificando algun registro que afecta a la interrupcion. Lo que quiero decir es que debes simular tu software revisando registro por registro y teniendo en cuenta que muchas veces un solo bit de un registro causa problemas.
por ultimo si todo esto no funciona mi recomendacion es ir hacia atras. no se que es lo que debe hacer tu programa, pero si e que si separas las cosas es probable encontrar la o las fallas. separa el lcd del circuito y prueba por separado los dispositivos.

espero te serte util.

PD: cuentame mas sobre tu proyecto quizas pueda ayudarte, o mejor aun, puede estar relacionado con algo que me interese para desarrollar

gracias, me has puesto a pensar un rato

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #6 en: Miércoles 11 de Febrero de 2009, 10:03 »
0
Muchas gracias por tu ayuda, ire paso a paso simulando el codigo a ver si encuentro el fallo, ya te dire algo.
Por cierto ¿Sirve de algo cambiar la direccion de los puertos en los registros TRIS? Yo al principio lo hacia, pero me di cuenta de que funcionaba igual sin direccionarlos y ya no lo uso, asi que puede ser ese un origen del fallo...
Un saludo.

PD: Si te gusta pensar... tengo unos desafios para ti... XD

damian_ayalazubrin

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #7 en: Miércoles 11 de Febrero de 2009, 18:26 »
0
hay ocaciones en que funciona bien pero aveces no. La verdad es que no se porque sucede esto. pero lo mejor es hacerlo con todo y si funciona bien intentar retirarlo.

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #8 en: Miércoles 18 de Febrero de 2009, 09:39 »
0
Hola de nuevo. He comprobado que no tener los registros TRIS bien configurados puede traer bastantes dolores de cabeza, estoy modificando el codigo para que funcione correctamente la direccion de los datos, pero ahora hay otro problema que me preocupa mas y me esta fastidiando... lo pondre en otro post para no mezclar temas.

El aparato que hago consiste en controlar un modulo zigbee para comunicarse con otros, lo de la interrupcion del RB es para encender y apagar el aparato con un pulsador, pero si al final veo que no funciona, lo hare con un interruptor que es mucho mas rapido, lo del pulsador es mas bonito pero mas complejo.

Gracias y un saludo.

damian_ayalazubrin

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #9 en: Jueves 19 de Febrero de 2009, 16:24 »
0
Creo que simplificar las cosas es lo mas adecuado cuando el problema tiene muchos angulos de abordaje, lo que comunmentre se llama retirar variables.
yo personalmente suelo ser obsesivo con poner los componentes mas simples posibles e ir probando por separado las cosas, logicamente no siempre se tiene el tiempo para hacer esto. Por otro lado yo soy de otra epoca, la epoca de la logica cableada, en donde los simuladores no existian y lo unico que te salvava era separar los circuitos y revisar borne a borne todo el tablero. ja estoy viejo no?????
voy a esperar que me cuentes como esta marchando tu proyecto.

PD: espero los desafios

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: Problema con interrupcion RB y retardos
« Respuesta #10 en: Miércoles 25 de Febrero de 2009, 18:20 »
0
Muy buenas. Pues el proyecto va bien pero sigo con el mismo problema, mientras esta haciendo un retardo no salta la interrupcion del pulsador, y como pasa la mayor parte del tiempo haciendo retardos pues no funciona.
He mejorado bastante el codigo, ahora direccionando bien los pines de entrada/salida he simplificado cosas mas complejas que hacia antes para evitar que me saltase la interrupcion del pulsador al sacar datos por pantalla. Voy a ir visualizando los datos de la RB7 para ver si en algun momento se deshabilita o algo asi que lo pueda estropear...

Saludos.

P.D: ¿Como harias para localizar de forma inalambrica un objeto con una precision de pocos centimetros? Se acepta cualquier propuesta...