Autor Tema: Problemas con INTR_2 del PIC18f2550  (Leído 3555 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Olaf

  • PIC12
  • **
  • Mensajes: 52
Problemas con INTR_2 del PIC18f2550
« en: 03 de Marzo de 2010, 05:36:48 »
Hola!  :)

Me ha surgido un problemilla, o segun se vea un gran problema. Sencillamente la interrupcion 2 del PIC18f2550 no se ejecuta. Me explico:

Tengo los siguientes elementos: el PIC18f2550, entorno al él, el modulo MRF24J40MA conectado via SPI, y luego el PC conectado via USB.

El USB funciona perfectamente envía y recibe datos, se hace por sondeo igual que en el proyecto de J1M que creo que todos conocemos :D.

Ahora bien, compruebo con un osciloscopio que el modulo MRF24J40MA entrega la señal de interrupción, la conexion es correcta, pero el PIC18f2550 no la hace ningún caso, dicha interrupción no se ejecuta en ningún momento, lo que imposibilita su uso.

Tengo el siguiente código de inicialización:
Código: [Seleccionar]
   setup_oscillator(OSC_500KHZ);
   setup_adc_ports(ALL_ANALOG|VSS_VDD);
   setup_adc(ADC_OFF);
// Configuracion del SPI para que funcione el MRF24J40
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
   LCDdelay (0x03);
   setup_vref(FALSE);
   disable_interrupts(INT_EXT);
   disable_interrupts(INT_EXT1);
   enable_interrupts(INT_EXT2);
   EXT_INT_EDGE(2,L_TO_H);
   enable_interrupts(GLOBAL);

   set_tris_a (0x00);          // Configurado como salida el puerto A
   set_tris_b (0xC5);          // Configurado forma   I/O el puerto B
   set_tris_c (0x07);          // Configurado forma   I/O el puerto C

Y el código de la interrupción que si funciona en el PIC16F726. Aunque evidentemente solo tiene una interrupción externa.
Para el PIC18F2550 no puedo usar otra interrupción externa, porque ya esta ocupado por la comunicación SPI.

Código: [Seleccionar]
#int_EXT2
void  EXT2_isr(void)
{
.................
}


Si alguien me puede ayudar seria de agradecer.

Un saludo y muchas gracias  :)
 
Me encanta el olor a microcontrolador por la mañana! APOCALISPIC NOW

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Problemas con INTR_2 del PIC18f2550
« Respuesta #1 en: 03 de Marzo de 2010, 05:43:13 »
setup_oscillator(OSC_500KHZ);  ????

Como stan tus fusibles ?


Has puesto #USE FAST_IO(B) para configurar los TRIS manualmente? Si si, te recomiendo configurarlos antes de activar las interrupciones globales.


Suerte.
« Última modificación: 03 de Marzo de 2010, 05:52:54 por jeremylf »

Desconectado sebastian.m

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas con INTR_2 del PIC18f2550
« Respuesta #2 en: 04 de Marzo de 2010, 12:02:05 »
Antes que nada un millon de agradecimientos para ti Ingeniero_Olaf por tus aportes con este modulo RF de Microchip, pues con ellos logre salir de muchas dudas que tenia y logre comunicarme igualmente por comunicacion normal y por modo promiscuo. En cuanto a tu duda yo monte mi MRF24J40 con este mismo PIC18F2550 y tire la interrupcion por INT2 por lo mismo de la comunicacion spi con el modulo. Como te dije anteriormente me funciono perfectamente. En cuanto al hardware lo unico que hice fue conectar una resistencia pulldown del pin del pic hacia tierra para evitar ruidos y asegurar un 0 logico. Yo utilice un cristal de 12MHz en vez de utilizar el oscilador interno del micro. A continuacion te dejo el codigo de inicializacion que utlice para ver si te sirve de algo y sales de tu problema. Si no te sirve lo que te doy se me ocurre que mires el datasheet en la pagina 16 ya que el RB2 es utilizado como INT2, como puerto analogo AN8 o como external USB transceiver VMO y como tu utilizas USB depronto puede estar sucediendo algo con esto, no se fue algo que se me ocurrio. Espero que te sirva lo que te dejo y nuevamente muchas gracias por tus aportes me salvaron de muchos problemas

codigo:

#include <18F2550.h>
#fuses HS, NOWDT, NOPROTECT, NOLVP, NOPUT
#use delay(clock=12000000)
#byte port_a = 0xF80          //Direccionamiento de puertos
#byte port_b = 0xF81
#byte port_c = 0xF82

#int_EXT2
void  EXT2_isr(void)
{
................
}

void main ()
{
   set_tris_a (0x04);          // Configurado todos los pines input excepto RA0,RA1,RA3 (LCD,E,RS,RW)
   set_tris_b (0x05);          // Configurado todos los pines output excepto RB0,RB2,RB3
   set_tris_c (0x00);          // Configurado todos los pines input excepto RC2,RC7
   
   setup_adc_ports(NO_ANALOGS|VSS_VDD);   //Sin puertos analogos
   setup_adc(ADC_OFF);                    //Conversor A/D apagado
   
   //Configuracion del SPI para que funcione el MRF24J40
   setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_XMIT_L_TO_H|SPI_CLK_DIV_4);
   
   //Interrupcion por TIMERS deshabilitados
   //setup_timer_0(RTCC_INTERNAL);         
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   enable_interrupts(INT_EXT2); //Habilitacion de interrupcion externa 2
   EXT_INT_EDGE(2,L_TO_H);     //Habilito interrupciones por flanco de subida en el INT2
   enable_interrupts(GLOBAL);  //Habilito todas las interrupciones anteriores
   
   port_a = 0x00;              //Limpio Puerto A
   port_b = 0x00;              //Limpio Puerto B
   port_c = 0x04;              //Limpio Puerto C y Deshabilito comunicacion SPI
............. 
 
}




Desconectado Olaf

  • PIC12
  • **
  • Mensajes: 52
Re: Problemas con INTR_2 del PIC18f2550
« Respuesta #3 en: 04 de Marzo de 2010, 13:29:01 »
Hola de nuevo! Lo primero sebastian.m, me alegro mucho de que mi pequeña aportación al foro te fuera útil  :-/ . Ahora me toca darte las gracias a ti con lo que me has dejado por fin funciona!  :-/

También se las doy a jeremylf, lo del "setup_oscillator(OSC_500KHZ);" no tenia mucho sentido ponerlo.

Muchas gracias a los dos :)
Me encanta el olor a microcontrolador por la mañana! APOCALISPIC NOW

Desconectado sebastian.m

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas con INTR_2 del PIC18f2550
« Respuesta #4 en: 04 de Marzo de 2010, 16:32:38 »
Que bueno que te haya podido ayudar con mis aportes, me alegra mucho poder ayudarte. Ahora me toca hacerte una pregunta Ingeniero_Olaf. Como ya pude comunicarme entre dos modulos, mis siguiente paso es formar una red con un Master, un Router y dos end devices. ahora mi pregunta es si depronto tu has hecho algun tipo de red parecida o si depronto tienes alguna informacion que me pueda ayudar con este asunto ???? te agradeceria mucho si me pudieras ayudar con esto.
Nuevamente me alegro poder ayudarte y nuevamente muchas gracias por tu ayuda 

Desconectado Olaf

  • PIC12
  • **
  • Mensajes: 52
Re: Problemas con INTR_2 del PIC18f2550
« Respuesta #5 en: 12 de Marzo de 2010, 10:36:24 »
Hola de nuevo, te cometo lo que me preguntas sebastian.m:

Yo la red que he montado es en estrella, un coordinador y el resto dispositivos, es la mas sencilla de todas. Pero funciona bien. Las direcciones de los dispositivos se las pre-programo yo, eso de que funcione como router y asigne las direcciones a los dispositivos, la verdad es que no tengo ni idea de como se hace. Aunque quizás estaría bien saberlo. Para ponerlo en estrella lo único que tienes que hacer es:

// Configuración coordinador, modos 0xX5 promiscuo, 0xX4 normal, 0xX6 error.
// Configuración coordinador PAN y coordinador modos 0xXD promiscuo, 0xXC normal, 0xXE error.
// Configuracion como dispositivo  modos 0xX1 promiscuo, 0xX0 normal, 0xX2 error.
// Configuración con acuse de recibo 0x0X, sin acuse de recibo 0x2X.
// NOTA: Al menos uno de los dos interlocutores debe ser un coordinador
// o coordinador PAN y coordinador

modos = 0x00;
SPIputcorto(RXMCR,modos);

Esta info viene en la pagina 18 del data sheet del chip MRF24J40.

Si puedo ayudarte en algo mas comentamelo, un saludo!
Me encanta el olor a microcontrolador por la mañana! APOCALISPIC NOW


 

anything