Autor Tema: Error raro al colocar #int_timer1  (Leído 6013 veces)

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

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Error raro al colocar #int_timer1
« en: 22 de Junio de 2008, 23:44:32 »
Hola maestros, tengo un error que me arroja el compilador CCS y que no figura en google lo cual me da a pensar.... les paso el codigo para ver si me pueden dar una mano.
Aclaro que si comento la linea #int_timer1 todo funca de 10 (obvio no andan las interrupciones pero al menos compila)

#include <16f877.h>
#fuses XT,NOWDT,NOPUT
#use delay(clock=20000000)

//VARIABLES GLOBALES/////////////////////////////////////////////////////////////////////////////////////////////
   float pm, rm, diametro, seg=0, seg_paso, pasos_por_segundo_sidereo, inter;// seguimiento = 15.04108444;
   char hemisferio, bandera=0;
   int seguimiento=15, Vsaludo[]="skyNIC", Vsaludo2[]="0.4.1c",vlcd, cs[]="Config", cs2[]="Sistema?", Vinicio[]="Cargando", Vespejo[]="D.Maximo", Vreduccion[]="Reducc.",
   Vmotor[]="Motor", Vhemisferio[]="Hemisf.", Vnorte[]="Norte", Vsur[]="Sur", Vfin[]="Fin", Vcm[]="cm";
   int32 t1;   // valor a cargar en tmr1 para que salte la interrupcion
   int motor, unidad;
   int16 vlcd_int;

#include "lcd.c"     //funcion que maneja las subrutinas de muestreo de lcd
#include "_eeprom.c"  //funcion que permite escribir numeros grandes en la eeprom
#include "lcd_nico.c"
#include "teclado.c"    //funcion para el manejo del teclado
#include "menu_setup.c"  //funcion donde configuro sistema segun el motor y la reducciona a utilizar

//PROGRAMA INICIAL////////////////////////////////////////////////////////////////////////////////////////////

///////////////INTERRUPCION

#int_timer1
void int_tm1()
{
   bandera=1;    //pongo bandera en 1     
}

void inicio()
{
   RA0_ANALOG; //portA como digital menos RA0
   set_tris_c(0b00001111);    //configuro puerto c como entradas de teclado y salidas de led y buzzer
   set_tris_d(0b00000000);    //configuro portd como salidas, para motor/es en el futuro
   lcd_init();                               //inicio lcd

   vlcd=Vsaludo;  //skyNIC
   lcd_string();
   vlcd=Vsaludo2;    //v0.4.1
   lcd_gotoxy(1,2);  //muevo cursor a segunda linea
   lcd_string();
   delay_ms(500);   //retardo
   lcd_putc("\n" );       //limpia lcd
   vlcd=Vinicio;     //Calentamiento
   lcd_string();
   delay_ms(500);

   output_high(PIN_C4);          //seguimiento on
   output_high(PIN_C5);        //menu on

   menu_setup();  // funcion para configurar tipo de motor, reduccion y memisferio ademas de realizar el calculo de tmt1

   output_low(PIN_C4);          //seguimiento on
   output_low(PIN_C5);        //menu on

}

//PROGRAMA PRINCIPAL////////////////////////////////////////////////////////////////////////////////////////////

void main()
{
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);   // setup interrupts
   enable_interrupts(INT_TIMER1);      //activar interrupcion externa
   enable_interrupts(GLOBAL);      //todas las interrupciones desactivadas

   inicio();

}

El error que larga el compilador es (en rojo abajo): Internal Error - Contact CCS PC_PR
Gracias mil.

« Última modificación: 22 de Junio de 2008, 23:48:22 por vasconinicolas »
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Error raro al colocar #int_timer1
« Respuesta #1 en: 22 de Junio de 2008, 23:59:05 »
Hola.

Pues con la configuracion que tienes al colocar la interrupcion el error no es del timer1, me parece extraño que uses dos librerias diferentes para manejar la LCD, con una es suficiente.
Habria que ver el codigo de las otras librerias que incluyes, el error podria venir de ahi.

Saludos
El papel lo aguanta todo

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Error raro al colocar #int_timer1
« Respuesta #2 en: 23 de Junio de 2008, 00:10:09 »
Hola MLO, en realidad una libreria es la clasica lcd.c para manejo del lcd y la otra es creada por mi en donde tengo algunas fuciones como estas:

//funciones para el manejo del lcd segun sea el momento del programa
void lcd_string(void)    //funciona para string en primera linea
{
   printf(lcd_putc,"%s",vlcd);
}
void lcd_int16(void)
{
   lcd_gotoxy(1,2);                          //muevo cursor
   printf(lcd_putc,"%Lu%s",vlcd_int,unidad);      //imprimo segunda fila
}

Estas son funciones que no las pongo en el programa principal para que no se haga muy largo y dificil de visualizar...

Me dices de ver el codigo de que otra libreria por ejemplo? Te reitero que al comentar //#int_timer1 todo parece funcionar bien...
Gracias
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: Error raro al colocar #int_timer1
« Respuesta #3 en: 23 de Junio de 2008, 00:24:00 »


  Estoy deacuerdo con MLO, ya que al comentar las siguientes librerias

#include "_eeprom.c"  //funcion que permite escribir numeros grandes en la eeprom
#include "lcd_nico.c"
#include "teclado.c"    //funcion para el manejo del teclado
#include "menu_setup.c"  //funcion donde configuro sistema segun el motor y la reducciona a utilizar

         y las lineas

lcd_string();
menu_setup();
               el programa compila sin problemas.
             El error debe estar en alguna de estas funciones, si publicas las librerias tal vez te puedan ayudar.


            un Saludo.

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Error raro al colocar #int_timer1
« Respuesta #4 en: 23 de Junio de 2008, 09:51:19 »
Gracias lucho, voy a revisar libreria por libreria (de las que hice yo) y les comento si encuentro el error, sino, pongo el codigo para molestarlos a ustedes.
saludos.
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Error raro al colocar #int_timer1
« Respuesta #5 en: 23 de Junio de 2008, 10:04:19 »
Saludos!
Generalmente CCS dice el archivo y el número de línea donde está el error.
Si el error estuviese en una de las librerías, el CCS te lo diría... a mí me ha pasado así y lo ha colocado:
"error en <archivo tal> <línea tal>: <descripción del error>"...
No creen ustedes?
Y si al pana le compila bien usando esas librerías y comentando el #INT_TIMER1, pues da razón más para creer que no son las librerías.

Lo que yo veo es que el timer nunca va a interrumpir, pues no existe ningún ciclo indefinido... por ninguna parte del código veo algo así como:

Código: [Seleccionar]
while(TRUE)
{
//código a hacer indefinidamente
}

o:
Código: [Seleccionar]
for(;;)
{
//código...
}

Sería cuestión de que colocaras los archivos con tus librerías y así otros tratemos de compilar tu código.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Error raro al colocar #int_timer1
« Respuesta #6 en: 23 de Junio de 2008, 10:22:05 »
Hola.

Pues es cierto Javier, interrumpira una vez si acaso, todo depende de cuanto tiempo tomen las otras funciones; pero esos casos no generan errores. Seria bueno que se posteara las librerias de la eeprom y la de menu_setup. A mi no me ha salido un error de esos hasta ahora, asi que me da curiosidad!!!!

Saludos
El papel lo aguanta todo

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Error raro al colocar #int_timer1
« Respuesta #7 en: 23 de Junio de 2008, 11:05:40 »
Ciertamente Miguel, eso de que no existe el ciclo indefinido el compilador no lo ve como error... a él le da igual...  :D
A mí también me llama la atención ese "Internal Error - Contact CCS PC_PR"...
Esperemos entonces que vasco publique sus librerías y así podamos probar compilarlo nosotros.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Error raro al colocar #int_timer1
« Respuesta #8 en: 23 de Junio de 2008, 15:46:58 »
Hola masters,.... respecto al ciclo de la interrupcion del tmr1 aun no lo escribi porque se me planto en algo más basico que es el error que reporto tan solo por escribir #int_timer1 de todas maneras ahi va el codigo de menu_setup.c

//////////////////////////////////funcion para setup inicial de valores y parametros

void menu_setup(void)
{
///////////////////////////////////////////////////////////////////subrutina para cargar los valores desde eeprom a las variables de pm, rm, y hemisferio
   rm=read_int32_eeprom(0);  // leo la eeprom mediante la rutina de numeros grander y lo casigno a la variable, le doy 4 bytes de espacio por las dudas
   pm=read_int32_eeprom(4);   //leo la eeprom mediante la rutina de numeros grandes
   hemisferio=read_eeprom(8); //leo variable hemisferio, 0 sur, 1 norte.

   if (rm < 2277){
   rm=2277;                   //cargo valor minimo en variable reduccion mecanica
   write_int32_eeprom(0, rm);
   }
   if (pm < 180){
   pm=180;                    //cargo valor minimo en variable pasos de motor
   write_int32_eeprom(4, pm);
   }
///////////////////////////////////////////////////////////////////////////subrutina para seteo de valores de pm, rm y hemisferio
      lcd_putc("\f" );       //limpia lcd
   vlcd=cs;
   lcd_string();   //muestro "config"
   lcd_gotoxy(1,2);   //muevo cursor
   vlcd=cs2;
   lcd_string();   //muestro "sistema?"
   teclado_menu_inicio();  //funcion para setear valores iniciales

////////////////////////////////////////// subrutina para calcular el valor de tmr1 y seg_paso que es el avance en segundos de arco por cada accion del motor
//calculos varios
   seg_paso = ((360)/(pm*2)*(3600))/rm;   //calculo cuantos segundos de arco recorre el eje RA en cada paso del motor
   pasos_por_segundo_sidereo = seguimiento / seg_paso;   //calculo cuantos pasos tengo que dar por segundo sidereo para seguir un astro
   inter = 0.99726851 / pasos_por_segundo_sidereo;  //calculo cada cuantos milisegundos tengo que dar el paso de seguimiento
//seteando el tmr1 para que produzca una interrupcion cada los milisegundos que indique inter
   t1= 65536 - (inter * 20000000)/(4 * 8); //   calculo el valor de tmr1
   diametro = 11.5 / seg_paso;   //calculo el diametro maximo de espejo utilizable en la montura. En pulgadas esta el valor resultante
/////////////////////
      lcd_putc("\f" );       //limpia lcd
   vlcd=Vespejo;
   lcd_string();
   unidad=Vcm;    //cargo variable unidad con "cm"
   vlcd_int=(int16)diametro;  //muestro valor de diametro maximo en lcd
   lcd_int16();      //muestro el valor diametro maximo en cm
   //lcd_gotoxy(1,2); ///////////////////////para mostrar diametro con decimales por si nos sobra memoria
   //printf(lcd_putc,"%4.2f%s",diametro,unidad);      //imprimo segunda fila/
   while(!input(PIN_C1));   //bucle, mientras no se apriete el boton OK la pantalla mostrará el valor de diametro maximo
         delay_ms(50);     //rebote
         if(input(PIN_C1)) //vuelvo a preguntar
         {
            while(input(PIN_C1));   //espero a que suelte la tecla OK
         }
}

La funcion de eeprom tiene el nombre modificado pero es la libreria "internal_eeprom.c" Si es necesario el codigo lo pongo pero sino podemos ahorrar espacio en este post..
Gracias


« Última modificación: 23 de Junio de 2008, 15:49:28 por vasconinicolas »
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Error raro al colocar #int_timer1
« Respuesta #9 en: 23 de Junio de 2008, 16:38:54 »
Hola.

Pues basandome mas en el error, no parece que fuera de compilacion ni de asignacion de variables. Porque no posteas el error completo?

Saludos
El papel lo aguanta todo

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Error raro al colocar #int_timer1
« Respuesta #10 en: 23 de Junio de 2008, 16:59:40 »
La version del compilador que tengo es la 3.181 y el ide es el PCW C Compiler v3.41
Pego una foto con el error. Si hay algún archivo tipo log para ver mas detalles avísame please para que lo busque..
Gracias

Y por si las dudas pego el proyecto completo (bueno, hasta donde pude avanzar), con librerias y proteus includo en el archivo rar
« Última modificación: 23 de Junio de 2008, 17:05:49 por vasconinicolas »
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Error raro al colocar #int_timer1
« Respuesta #11 en: 23 de Junio de 2008, 18:07:16 »
Viejo he compilado tu programa y no me ha dado errores.
Debe ser algún problema en tu compilador.
Sólo me dió 3 Warnings: 2 de variables no usadas, y 1 de que "el código no tiene efecto" en la línea donde tienes el "RA0_ANALOG"...
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Error raro al colocar #int_timer1
« Respuesta #12 en: 23 de Junio de 2008, 18:12:07 »
Olvidé mencionarlo, yo uso el CCS 4.057 desde MPLAB.
Aquí está el output:
Citar
Executing: "C:\Archivos de programa\PICC\Ccsc.exe" +FM "robertachov4.c" +DF +LN +T +A +M +Z +Y=9 +EA
>>> Warning 207 "robertachov4.c" Line 39(1,1): Code has no effect
>>> Warning 202 "robertachov4.c" Line 8(28,31): Variable never used:   seg
>>> Warning 202 "robertachov4.c" Line 15(8,13): Variable never used:   motor     
Memory usage:   ROM=42%      RAM=39% - 45%      0 Errors,  3 Warnings.
Ok saludos, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Error raro al colocar #int_timer1
« Respuesta #13 en: 23 de Junio de 2008, 18:38:46 »
Hola.

A mi tampoco me dio ningun error, solo unos warnings (yo lo he compilado en el IDE del CCS PCMv4.073). Debe ser la version del compilador, si es que mandaste el proyecto que te genera el error claro esta  :lol:.



Saludos

El papel lo aguanta todo

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: Error raro al colocar #int_timer1
« Respuesta #14 en: 23 de Junio de 2008, 20:01:39 »
Gracias MLO y Firepic, ahora me pondré en campaña de conseguir ese compilador. Y efectivamente como dicen, el programa tiene variables para las que aun no escribi codigo y codigo sin usar como el RA0_analog con el que sensaré la tensión de la batería.
Gracias por su ayuda. Podríamos decir que es un BUG de CCS v3.181 y v3.180?? (probé con los dos y lo mism)
Saludoss
« Última modificación: 23 de Junio de 2008, 20:06:38 por vasconinicolas »
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"