• Domingo 22 de Diciembre de 2024, 02:06

Autor Tema:  Interrupcion Pines Rb 4-7  (Leído 3856 veces)

Nash7

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Interrupcion Pines Rb 4-7
« en: Lunes 18 de Julio de 2005, 14:43 »
0
Estoy utyilizando el 16f877A y el CCS como compilador. Estoy haciendo un programilla chorra en el que al darle u boton se va a la interr y hace parpadear un LED. El problema es que si configuro la interrupción como EXT todo va a las mil maravillas, en cambio si lo configuro como RB 4 - 7 la interrupción salta continuamente y no ejecuta el programa principal  :angry: .

No sé si el problema está en la placa porque tenga muchos rebotes o algo asi... o he pueto un pulsador con un condensador de 0,1 uF, debería ser suficiente,no?.

Si alguien me pudiese ayudar con cualquier sugerencia lo agradecería mucho...

Gracias :P

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Interrupcion Pines Rb 4-7
« Respuesta #1 en: Lunes 18 de Julio de 2005, 14:54 »
0
Yo te sugiero para empezar que elimines los rebotes por codigo.. has en el codigo un retardo de 5 microsegundos cada vez que se presione el pulsador, en un proyecto que hice utilice condensadores pero nunca con eficacia.. lo resolvi haciendo retardos en el programa. intenta y luego me cuentas. Saludos :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Nash7

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Interrupcion Pines Rb 4-7
« Respuesta #2 en: Lunes 18 de Julio de 2005, 15:19 »
0
De hecho ya tenia unos delay puestos para hacer parpadear el Led, le he intentado porner más tiempo pero sigue pasando lo mismo, de hecho incluso segun lo reseteas se va a la interrupción y no se espera ni a que le de una sola vez al pulsador... En un principio pense que a lo mejor era porque era una interrupción por nivel y le puse un inversor cosa que no produjo ningun cambio asi que no sé.... ¿que te paerce? <_<

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Interrupcion Pines Rb 4-7
« Respuesta #3 en: Lunes 18 de Julio de 2005, 15:22 »
0
Colga el codigo y vemos.. si tengo tiempo lo pruebo esta tarde.. al parecer no es complicado montarlo en el protoboard.. asi que adelante. :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Nash7

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Interrupcion Pines Rb 4-7
« Respuesta #4 en: Lunes 18 de Julio de 2005, 15:32 »
0
No, efectivamente no es un programa dificil, de hecho sólo es para ver si funcionan dichas interrupciones que no soy capaz de hacerlas funcionar....

ahi te va!!

Gracias otra vez

Por cierto, si ves que te funciona, dime como pones los pulsadores en la Protoboard...
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Nash7

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: Interrupcion Pines Rb 4-7
« Respuesta #5 en: Lunes 18 de Julio de 2005, 17:18 »
0
Por lo visto es un problema de rebotes... Por ahi he leido esta solución y me ha funcionado


Creo que lo que te pasa es que como la interrupcion es por cambio de estado en cualquiera de las patillas, te salta la interupcion cuando pulsas el pulsador y cuando lo sueltas vuelve a entrar a la interrupcion. Prueba a usar esta mascara.

delay_ms(70); // esperamos para evitar rebotes
if(!(port_b^0xF0)) // si se produce al soltar el pulsador
return; // salimos de la interrupcion.

Salu2

Gracias Jonathan por tu time!!

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Interrupcion Pines Rb 4-7
« Respuesta #6 en: Lunes 18 de Julio de 2005, 17:58 »
0
Bueno. esa era la idea que tire de principio.. me alegra que lo hayas resuelto.. yo te decia 5 ms pero veo que es poco, en esa solucion usan 70  :o ... Bueno!!>. me alegro que vaya todo bien.. cualquier duda me consultas que para eso estamos!.. Un Abrazo!  :D  :comp:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Huguen_aus_Tirol

  • Miembro MUY activo
  • ***
  • Mensajes: 318
    • Ver Perfil
    • http://www.erhard-automation.co.cc
Re: Interrupcion Pines Rb 4-7
« Respuesta #7 en: Lunes 18 de Julio de 2005, 19:26 »
0
Hola! Bueno, una vez ya me pasó... En primer lugar, al atender la interrupción por cambio en RB, hay que resetear el bit RBIF (INTCON.0) por soft; caso contrario, al salir de la rutina el micro volverá a entrar y asi for ever... :(
En segundo lugar, la interrupción es por cambio. Es decir que si nuestra rutina es muy rápida (por lo general es así), es muy probable que presionemos el pulsador, se atienda la rutina y cuando soltemos el pulsador (así sea un click) ya hayan pasado muchos ciclos desde que se salió de la rutina de interrupción deseada y volvamos a entrar a la interrupción(hubo un cambio en RB). No son rebotes del pulsador ni nada de eso...
Algo que funciona: deja los pulsadores ahí donde están, pero no uses la interrupción por cambio en RB. Casi siempre se necesita, en cualquier proyecto, una base de tiempos. Yo uso el timer0 para las rutinas de demora de milisegundos, segundos, etc. Entonces, cada vez que tengas una interrupción del timer0 (cada 5, 10 ó 20 ms, por ejemplo) copias el estado de RB a un registro, filtras para que queden los pulsadores, si hay uno pulsado, activas un flag (por ejemplo, el bit 7 de tu registro de teclas) y listo! :)
En el programa principal chequeas el flag de tecla y sabes que hacer si hay tecla, sin que estar chequeandolo en el codigo principal...
Bueno, confuso, no? :blink: pero prueba, que funciona y da buen resultado!
Saludos y suerte!
Ah! como dice Jonathan, con unos 5 o 10 ms se tienen resultados más que buenos...