Autor Tema: Problema con el 18F2455, necesito resetearlo  (Leído 2521 veces)

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

Desconectado piojoadrian

  • PIC10
  • *
  • Mensajes: 5
Problema con el 18F2455, necesito resetearlo
« en: 28 de Julio de 2009, 12:25:58 »
Hola amigos,

En este caso, tengo un problemita.
Estoy encuestando el pic 18F2455 por el puerto serie, funciona, pero luego de un dia completo de funcionamiento, se tilda, como que deja de responder. Me gustaria saber alguna forma de resetearlo que este verificada que funciona.

Probe con el wdt, pero al parecer no obtengo resultado.
La alternativa que me queda, es implementar un reseteo a traves del MCLR, colocaria un timer para activar el flanco negativo que me resetea el PIC.

Espero puedan ayudarme!

Saludos cordiales!

pd: el sistema es de monitoreo, el que este interesado, lo puedo ayudar.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con el 18F2455, necesito resetearlo
« Respuesta #1 en: 28 de Julio de 2009, 12:52:39 »
Seguro que has implementado el Wdt correctamente? Porque puede ser que el problema no sea el software sino el hardware.


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

Desconectado piojoadrian

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con el 18F2455, necesito resetearlo
« Respuesta #2 en: 28 de Julio de 2009, 14:34:56 »
Citar
Seguro que has implementado el Wdt correctamente? Porque puede ser que el problema no sea el software sino el hardware.

Ante todo, gracias por responder e intentar ayudarme. Mi proyecto consta del monitoreo de varios canales del A/D.
El problema, es que luego de varias horas (en este caso luego de 2 dias, a veces menos) el PIC deja de contestar, es probable que este olvidando algo en el WDT o algun fuse.

Espero puedan ayudarme, aqui les dejo mi programa.

Desde ya muchas gracias


Código: [Seleccionar]
#include <18F2455.h>
#fuses HSPLL,WDT,WDT512,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000, restart_wdt)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)

#int_RDA
void  RDA_isr(void)
{
   char caracter;
   int8 canal0,canal1,canal2,canal3,canal4,canal8,canal9,canal10,canal11,canal12;
   
   caracter=getchar();

   if (caracter=='c')
   {
        restart_wdt()             //Canal 0
        set_adc_channel(0);
        delay_us(10);
        restart_wdt()
        canal0 = read_adc(); //read_adc(ADC_START_ONLY);
        delay_ms( 10 );
        restart_wdt()
        canal0 = read_adc(); //read_adc(ADC_READ_ONLY);
 
        restart_wdt()
        printf("00=%3u",canal0);
        restart_wdt()
       



        restart_wdt()             //Canal 1
        set_adc_channel(1);
        delay_us(10);
        restart_wdt()
        canal1 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal1 = read_adc();
       
        restart_wdt()
        printf("01=%3u",canal1);
        restart_wdt()
       
       
       
       
        restart_wdt()              //Canal 2
        set_adc_channel(2);
        delay_us(10);
        restart_wdt()
        canal2 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal2 = read_adc();
       
        restart_wdt()
        printf("02=%3u",canal2);
        restart_wdt()
       
       
       
        restart_wdt()               //Canal 3
        set_adc_channel(3);
        delay_us(10);
        restart_wdt()
        canal3 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal3 = read_adc();
       
        restart_wdt()
        printf("03=%3u",canal3);
        restart_wdt()
       
       
       
        restart_wdt()               //Canal 4
        set_adc_channel(4);
        delay_us(10);
        restart_wdt()
        canal4 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal4 = read_adc();
       
        restart_wdt()
        printf("04=%3u",canal4);
        restart_wdt()
     
     
     
        restart_wdt()               //Canal 8
        set_adc_channel(8);
        delay_us(10);
        restart_wdt()
        canal8 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal8 = read_adc();
 
        restart_wdt()
        printf("08=%3u",canal8);
        restart_wdt()
       
       
       
        restart_wdt()               //Canal 9
        set_adc_channel(9);
        delay_us(10);
        restart_wdt()
        canal9 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal9 = read_adc();
       
        restart_wdt()
        printf("09=%3u",canal9);
        restart_wdt()
     
     
     
        restart_wdt()                 //Canal 10
        set_adc_channel(10);
        delay_us(10);
        restart_wdt()
        canal10 = read_adc();
        delay_ms( 10 );.
        restart_wdt()
        canal10 = read_adc();
 
        restart_wdt()
        printf("10=%3u",canal10);
        restart_wdt()
       
       
       
       
        restart_wdt()                  //Canal 11
        set_adc_channel(11);
        delay_us(10);
        restart_wdt()
        canal11 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal11 = read_adc();
 
       
        restart_wdt()
        printf("11=%3u",canal11);   
        restart_wdt()
       
       
       
       
        restart_wdt()                     //Canal 12
        set_adc_channel(12);
        delay_us(10);
        restart_wdt()
        canal12 = read_adc();
        delay_ms( 10 );
        restart_wdt()
        canal12 = read_adc();
       
        restart_wdt()
        printf("12=%3u\r",canal12);      //El ultimo canal termina con un retorno de carro;
        restart_wdt()
       
       
   }

   
}


void main(void) {
   
   setup_adc_ports(ALL_ANALOG|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_2);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   

 
   while (TRUE) {}
 
}

Desconectado piojoadrian

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con el 18F2455, necesito resetearlo
« Respuesta #3 en: 28 de Julio de 2009, 14:48:51 »
Es probable que sea algo del BOR que no habilito?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con el 18F2455, necesito resetearlo
« Respuesta #4 en: 28 de Julio de 2009, 17:38:13 »
En el main deberia ir:
Código: C
  1. setup_wdt(WDT_ON);

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

Desconectado piojoadrian

  • PIC10
  • *
  • Mensajes: 5
Re: Problema con el 18F2455, necesito resetearlo
« Respuesta #5 en: 28 de Julio de 2009, 18:12:57 »
Increible...

Como no me percate de eso...

Lo tuve en mente todo el tiempo, pero no lo puse...

:(

jeje

Espero sea esto, en la fabrica me estaba por matar...luego de un dia, por alguna interferencia que desconozco, me tildaba uno de los 5 PIC´s.



Esta si que fue una gran ayuda, mi proyecto consta de un sistema de monitoreo. Estoy utilizando unas Xbee. Cualquier consulta a tus ordenes!

Saludos