Autor Tema: interrupciones ccs 16f877A  (Leído 4053 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nash7

  • PIC10
  • *
  • Mensajes: 17
interrupciones ccs 16f877A
« en: 18 de Julio de 2005, 06:13:00 »
He hecho un programilla bastante cutrecillo para ver que tal van las interrupciones de cambio de estado en los pines RB 4 - 7. Sencillamente tiene que encender y apagar un LED y cuando se meta en la interrupción, encender otro... El problema es que Siempre me está saltando la interrupción y no se mete en el programa principal, en cambio si hago el mismo programa para el pin RB0 configurando la interrupción como externa pues va todo bien...

¿alguien sabe que puedo estar haciendo mal?, los pulsadores que hacen la interrupción están con sus condensadores de 0,1uF... Son muy sensibles dichas interrupciones?

Gracias Giño

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: interrupciones ccs 16f877A
« Respuesta #1 en: 18 de Julio de 2005, 09:13:00 »
Dentro de la interrupción ponle un retardo de unos 30 milisegundos antes de salir de esta -delay_ms(30);- Y comenta que tal. Seguramente te sobre hasta el condensador ... Creo que por soft es mas eficiente que con un condensador.
Si juegas contra el mejor, pierdes como los demás.

Desconectado Nash7

  • PIC10
  • *
  • Mensajes: 17
RE: interrupciones ccs 16f877A
« Respuesta #2 en: 18 de Julio de 2005, 09:22:00 »
Ya tengo puesto el delay y me sigue entrando la interrupcion, de hecho por si acaso habia algun problema de oscilaciones le he puesto un smith triger y da igual, la interrupcion sigue conectada, sólo cuando aprieto todos los pulsadores (RB 4- 7) a la vez, consigo ue entre en el main, tanto con el smith triger como sin él...loco

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: interrupciones ccs 16f877A
« Respuesta #3 en: 18 de Julio de 2005, 09:25:00 »
Realmente creo que el CCS es un poquitin tontorron con las interrupciones externas, pero debe de ir ... postea tu codigo para que lo podamos ver.

P.D.: por el foro habido muchas questiones sobre el mismo tema quizás te sea de ayuda leerlas.
Si juegas contra el mejor, pierdes como los demás.

Desconectado Nash7

  • PIC10
  • *
  • Mensajes: 17
RE: interrupciones ccs 16f877A
« Respuesta #4 en: 18 de Julio de 2005, 09:43:00 »
Ahi va el código, en un principio tendría que funcionar ya que con la int externa va perfecto...

GraciasGiño


 PD: Como no me deja aduntar el fichero por falt de espacio, lo mando aqui




#include <16F877A.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT

#int_rb

 flash_on_off(){              
   delay_ms(15);
   output_high(PIN_C0);              
   delay_ms(15);
   output_low(PIN_C0);


}


void flash_led() {

   output_low(PIN_C1);
   delay_ms(500);
   output_high(PIN_C1);
   delay_ms(500);


}




void main()   {

      enable_interrupts(global);
      enable_interrupts(int_rb);
     
      while (1)      
         flash_led();


}

Desconectado Nash7

  • PIC10
  • *
  • Mensajes: 17
RE: interrupciones ccs 16f877A
« Respuesta #5 en: 18 de Julio de 2005, 10:15:00 »
Al final he leido un post que no habia visto antes de Priots que dice:


"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"


El que le pase lo mismo qu elo pruebe, a mi me ha funcionado!!

Gracias RadonSonrisa

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: interrupciones ccs 16f877A
« Respuesta #6 en: 18 de Julio de 2005, 18:06:00 »
Quieres decir, que hasta que no sueltes el boton no sale de la interrupcion?
Si juegas contra el mejor, pierdes como los demás.

Desconectado piriots

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
RE: interrupciones ccs 16f877A
« Respuesta #7 en: 19 de Julio de 2005, 02:31:00 »
Lo que ocurre con la interrupcion externa es que se produce cuando pulsas y cuando dejas de pulsar. PAra evitar que al dejar de pulsar vuelva a entrar en la interrupcion debes aplicar la mascara para detectar que es flanco ascendente y salir de la interrupcion, seria como una forma de configurar el flanco que produce la interrupcion.

Salu2


 

anything