Autor Tema: INT_RB no funciona en el hardware real  (Leído 1949 veces)

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

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
INT_RB no funciona en el hardware real
« en: 26 de Noviembre de 2009, 18:06:50 »
Hola:

El sguiente codigo funciona bien en proteus pero salta la interrupcion todo el rato en el circuito real. podriais echarle un vistazo?
un saludo

aitor

#include <16F877.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT
#use fast_io(b)
#use fast_io(d)
#use fast_io(c)
#byte portc=0x07
#int_EXT
 int_exterior(){
 output_high(PIN_D0);
 delay_ms(1500);
 output_low(PIN_D0);
 }
 
void main( void )
{
   int led_on=0b00000001; // Variable a desplazar
   set_tris_b(0b00000001);
   set_tris_d(0x00);
   set_tris_c(0x00);
   output_c(0x00);
   output_d(0x00);
   // Habilitamos el flanco de subida antes porque
   // si lo hacemos despues de enable_interrupts(INT_EXT)
   // podria setear el flag de interrupción y provocar una interrupcion no deseada
   clear_interrupt(INT_RB); // Borro el flag al principio para que no salte la interrupcion
   ext_int_edge (L_TO_H);
   enable_interrupts(INT_EXT);
   enable_interrupts(global);
   do{                     
     
      do{      //iluminacion hacia izquierda
         portc=led_on; // Asigno a portc el valor de la variable
         rotate_left(&led_on,1); // Desplazo el valor de la variable led_on un valor atraves de su direccion
         delay_ms(100);
         }while(bit_test(led_on,7)==0);
     
      do{      //iluminacion hacia derecha
         portc=led_on;
         rotate_right(&led_on,1);
         delay_ms(100);
         }while(bit_test(led_on,0)==0);
         
      }while(TRUE);           
   }

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: INT_RB no funciona en el hardware real
« Respuesta #1 en: 26 de Noviembre de 2009, 20:33:23 »
No veo error en el tratado de la interrupción  :? Eso, si veo que indicas cristal de 4MHz pero el fuse colocas HS, y debería ser XT.

Luego podrías usar output_c(led_on); para cargar el puerto.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: INT_RB no funciona en el hardware real
« Respuesta #2 en: 26 de Noviembre de 2009, 20:39:26 »
No veo error en el tratado de la interrupción  :? Eso, si veo que indicas cristal de 4MHz pero el fuse colocas HS, y debería ser XT.

Luego podrías usar output_c(led_on); para cargar el puerto.


Saludos!

Hola:

Colocar HS en vez de XT provocaria que saltara la interrupcion todo el rato?.Lo probaré mañana y te cuento.

saludos

aitor

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: INT_RB no funciona en el hardware real
« Respuesta #3 en: 26 de Noviembre de 2009, 20:43:04 »
No se  :mrgreen: Como dije, con respecto al trato de la interrupción no veo problemas.

Que activa la interrupción?
No contesto mensajes privados, las consultas en el foro

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: INT_RB no funciona en el hardware real
« Respuesta #4 en: 26 de Noviembre de 2009, 20:47:52 »
Citar
Hola:

Colocar HS en vez de XT provocaria que saltara la interrupcion todo el rato?.Lo probaré mañana y te cuento.

saludos

aitor

Coloca el hardware para ver porque se esta presentando el problema.. tienes resistencia de pullup?

Los fuse son muy importante, al principio cuando empezaba a programar esos fuse me jugaron una mala pasada...

Desconectado aitorsp

  • PIC18
  • ****
  • Mensajes: 296
Re: INT_RB no funciona en el hardware real
« Respuesta #5 en: 27 de Noviembre de 2009, 06:56:05 »
No se  :mrgreen: Como dije, con respecto al trato de la interrupción no veo problemas.

Que activa la interrupción?

Hola:

He montado el hardware para probar el codigo que consiste en lo siguiente.

 - PIC 16F877A
 - 2 Array de diodos Led verde (Pack de 10 Led)
 - Sensor de obstaculos
 
Mientras no hay interrupcion por cambio de estado en RB0, se produce una secuencia rotatoria de los diodos LED (programa principal). Cuando paso un objeto por el sensor de obstaculos, se produce un flanco y RB0 cambia de estado. Entonces entra la interrupcion y enciende un LED durante un tiempo para indicar el estado de interrupcion para luego salir de ella y continuar con el programa principal.

Ahora funciona bien pero comento los problemas que tuve al principio:

 1- Por qué entraba la interrupcion al encender la alimentación todo el tiempo?
     La verdad es que aun no lo sé pero se producia porque tenia sin conectar 5 de los diodos que hacen funcionar el programa principal. solo tenia 3 de ellos    funcionando por lo que el PIC daba salida al resto de pines pero no estaban conectados. Al conectar el resto de pines funciona sin problemas.

 2- Por qué al apagar la alimentación entra la interrupción?
     Tampoco lo sé pero siempre que apago la alimentacion, durante el tiempo que el sistema sigue dando energia, la interrupcion entra hasta que se apaga definitivamente.

Saludos

Aitor


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: INT_RB no funciona en el hardware real
« Respuesta #6 en: 27 de Noviembre de 2009, 09:32:43 »
El primer caso puede ser por estar seleccionando erróneamente el oscilador, sino era el correcto algo debería de funcionar mal.

Lo segundo al pagar el sistema, se genera un ruido de alta frecuencia que pasa a travez de la alimentación, y si no esta correctamente filtrada puede hacer que genere un flanco el sensor.


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything