Autor Tema: pic16f873A se reinicia constantemente (frecuencimetro)  (Leído 4883 veces)

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

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
pic16f873A se reinicia constantemente (frecuencimetro)
« en: 21 de Julio de 2008, 17:47:07 »
Hola a todos! Que tal?
Estoy haciendo un programa que mida el periodo de un pulso con un pic 16f873A y lo muestre por un LCD. El problema es q no se por q se reinicia constantemente... llega a escribir algo en el LCD y luego se reinicia.
Me preocupa un warning q tira el compilador, pero no se q quiere decir:
Código: [Seleccionar]
Warning 216 "codigo.c" Line 40(0,1): Interrupts disabled during call to prevent re-entrancy: (@MULFF)
Me extraña porq no hay linea 40... pongo el codigo a continuacion.

Código: [Seleccionar]
#include <16f873a.h>
#FUSES NOWDT,HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#use delay(clock=20000000)
#include "lcd.c"

float const usxtick = 0.2;
float st=0;

#int_ccp1
void handle_ccp1_int()
{
   st=get_timer1()*usxtick;
   set_timer1(0);
}

void main()
{
   delay_ms(200);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   setup_ccp1(CCP_CAPTURE_RE);
   enable_interrupts(int_ccp1);
   enable_interrupts(global);
   
   lcd_init();
   while(TRUE)
   {
      lcd_gotoxy(1,1);
      printf(lcd_putc,"T=%f us",st);
   }
}

Alguien sabe por qué pasa esto? Muchas gracias de antemano!!
« Última modificación: 22 de Julio de 2008, 23:10:20 por gera »

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: pic16f873A se reinicia constantemente
« Respuesta #1 en: 21 de Julio de 2008, 23:26:00 »
Hola.

Porque no procesas la multiplicacion en el main? Coloca un flag en la interrupcion para salir lo mas rapido de ahi.

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: pic16f873A se reinicia constantemente (frecuencimetro)
« Respuesta #2 en: 22 de Julio de 2008, 23:12:00 »
No, no hay caso... no entiendo por q se reinicia. Lo programe como para q actualice la medicion cada un segundo, y sin embargo lo hace mucho mas rapido. Sospecho q tiene q ver con los fusibles... pero la verdad q ni idea

Este es el nuevo codigo.
Código: [Seleccionar]
#include <16f873a.h>
#fuses NOWDT,HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#use delay(clock=20000000)
#include "lcd.c"

float const usxtick = 0.2;

#int_ccp1
void handle_ccp1_int()
{
   set_timer1(0);
}

void main()
{
   int16 ticks;
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
   setup_ccp1(CCP_CAPTURE_RE);
   enable_interrupts(INT_CCP1);
   enable_interrupts(GLOBAL);
   
   lcd_init();
   while(TRUE)
   {
      ticks=CCP_1;
      lcd_gotoxy(1,1);
      printf(lcd_putc,"t=%f us",ticks*usxtick);
      delay_ms(1000);
      lcd_putc("/f");
   }
}

ayuda por favor!!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: pic16f873A se reinicia constantemente (frecuencimetro)
« Respuesta #3 en: 23 de Julio de 2008, 12:57:44 »
Hola.

Pues  :? para que se reinicie solo seria por el WDT, pero veo que lo tienes deshabilitado  :?, has hecho el debug en proteus? de pronto yendo paso a paso y coloca watch en los registros del WDT a ver que sucede.

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: pic16f873A se reinicia constantemente (frecuencimetro)
« Respuesta #4 en: 23 de Julio de 2008, 14:06:15 »
Es lo q se me ocurrio, que sea el WDT, porq se reinicia en una etapa bastante avanzada del programa. Pero esta apagado, asiq no se. No tengo el proteus como para probar, y no se como se usa :(
Voy a seguir probando a ver si descubro qué es... sospecho q es problema del código. Insisto en q me preocupa este warning:
Código: [Seleccionar]
Warning 216 "codigo.c" Line 40(0,1): Interrupts disabled during call to prevent re-entrancy: (@MULFF)
muchas gracias!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: pic16f873A se reinicia constantemente (frecuencimetro)
« Respuesta #5 en: 23 de Julio de 2008, 15:20:53 »
Hola.

Ese warning es porque el tiempo que toma hacer esa multiplicacion es largo y CCS desactiva las interrupciones para evitar entrar en ella nuevamente, por eso te dije al inicio del post que es mejor colocar un flag en la interrupcion (int1) y en el programa principal lo procesas con un if(flag), de esta manera no te demoras tanto en la interrupcion.

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: pic16f873A se reinicia constantemente (frecuencimetro)
« Respuesta #6 en: 23 de Julio de 2008, 15:42:33 »
Bien, parece q el problema no es el programa... buscando por el foro encontre este tema http://www.todopic.com.ar/foros/index.php?topic=20928.0
y segun veo, parece q este pic en particular tiene problemas con el modulo ccp :S
El otro pic q tengo para probar esto es el pic18f2550, pero no lo puedo programar hasta q me llegue mi nuevo programador :(

Muchas gracias por tu ayuda MLO, cuando me llegue el programador nuevo pruebo con este otro pic y vemos q sale.
Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein