Autor Tema: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)  (Leído 4475 veces)

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

Desconectado nickpic2013

  • PIC10
  • *
  • Mensajes: 6

Buenas estimados, desde ya muchas gracias por la ayuda que puedan aportar. Estoy perdido con este tema y no le encuentro la vuelta. Realice un programa en el cual confguro el timer1 como interno, habilito las interrupciones debidas (TMR1IE y Global) y se activa el flag TMR1IF al desbordar pero nunca salta/entra a la rutina de interrupcion del timer1. Algo curioos que noto que ni bien configurado y hechado a funcionar el timer 1 a las dos instrucciones siguientes se desborda el Timer y se activa el flag - configuro el timer1 en 1, me da la sensacion de que para llegar a 65535 lo hace demasiado rapido (2 instruccones de "C"), no me parece  normal. Otro dato el desbordamiento se me genra dentro de un switch, igual probe de sacarlo de ahi al principio del programa para que no tenga problemas y se comportta igual. Bueno, espero puedan ayudarme. Muchas gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #1 en: 14 de Mayo de 2013, 20:49:21 »
Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado nickpic2013

  • PIC10
  • *
  • Mensajes: 6
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #2 en: 16 de Mayo de 2013, 09:04:40 »
Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!


Gracias estimado por la atencion. Agrego que hice una prueba con el timer 0 y se comporta igual, parece ser un problema general con las interrupciones. A alguien le paso esto antes??

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #3 en: 16 de Mayo de 2013, 09:43:44 »
Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado nickpic2013

  • PIC10
  • *
  • Mensajes: 6
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #4 en: 18 de Mayo de 2013, 10:50:38 »
Hola!

vas a tener que mostrarnos el código para que podamos ayudarte!


Estimado, gracias por tu atencion. Abajo va el codigo. Te comento las pruebas realizadas, con un PIC16F877A programador ICD2 en MPLAB con lengiuaje CCS no me funcionaba en un programa bastante avanzado las interrupciones llegue a probar con al del timer 1 y 0. No entreba en las interrupciones, luego para descartar pruebo en un chip 18F874 y lo mismo. Para descartar que el problema no viene del programa hago una sencilla rutina de timer 1 (la pego abajo) con PIC18F877A y me sucede lo mismo. Ultima prueba, ejecuto la sencilla rutina de timer 1 en el 874 y lo mismo. Ya le desconfio al MPLAB con plugin CCS o al ICD2.
Algo que note: ni bien ejecuto la primera instruccion ya levanta el flag de interrupcion de timer 1 (en una de las veces se metio en la rutina de interrupcion, despues nunca mas) a lo que pongo el flag a 0, cuando desborda el timer1 se levanta el flag pero no salta a la rutina de intrrupcion. Probe con prescaler DIV 8 o DIV 1, no funciona igual.
Bueno eso es todo, va el codigo:


#include "16F874.h" //Incluye el archivo de cabecera para el PIC

#DEVICE  ICD=TRUE
//#DEVICE ADC=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT//INTRC_IO            //oscilador interno a 4Mhz
#FUSES PUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
//#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)  //clock de 4Mhz


int a = 0;
int b = 0;


#INT_TIMER1      //Interrupcion del timer 1
void atiende_timer1(void)
 {
   a = a + 1;
      
 }
 
 
 void main ()
{
   setup_timer_1 ( T1_DISABLED );
   set_timer1(0x0BDC);//Carga del TMR1
   enable_interrupts(GLOBAL);//Habilito interrupciones globale
   enable_interrupts(INT_TIMER1);//Habilito interrupción particular del TIMER1
   setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );

   do//Bucle infinito hasta interrupción
   {
      b = b + 1;
      b = b + 1;
      
   }while(b < 200);
 
}

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #5 en: 18 de Mayo de 2013, 12:48:22 »
Tu bucle no es infinito y eso trae problemas. Y si estas usando !MCLR asegurate de tenerlo mediante una resistencia a Vdd a dicho pin. Caso contrario se reiniciará constantemente.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado nickpic2013

  • PIC10
  • *
  • Mensajes: 6
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #6 en: 18 de Mayo de 2013, 16:10:22 »
Tu bucle no es infinito y eso trae problemas. Y si estas usando !MCLR asegurate de tenerlo mediante una resistencia a Vdd a dicho pin. Caso contrario se reiniciará constantemente.

Estimado:

El bucle que indicas como no infinito, imagino que es el do...while lo coloque como prueba, inicialmente era un while(true) -bucle infinito- y tenia el mismo problema. Con respecto a la resistencia no esta colocada hasta el momento pero no seria problema ya que lo estoy usando con ICSD y la linea de MCLR la uso para el VPP del ICD2. El programa en modo debugger corre perfectamente pero no salta a las interrupciones, ese es el problema.

Desconectado nickpic2013

  • PIC10
  • *
  • Mensajes: 6
Re: Timer 1 no entra en rutina de interrupcion (CCS en MPLAB 8.90 con 16F877A)
« Respuesta #7 en: 19 de Mayo de 2013, 20:31:25 »
Estimados:

Despues de mucha investigacion llegue a buen puerto y pude encontrar rspuesta al problema, que en definitiva no es problema, es funcionamiento normal del ICD2 e ICD3. Buscando en la web de microchip encontre un documento del ICD2 que indica:

When running in debug mode, selecting Debugger>Reset resets the program, goes to the zero location, and halts. The program does not automatically re-run.

The following applies to all devices except for Extended PIC18F Devices V2:

·               - While single stepping, the MPLAB ICD 2 will not respond to interrupts.

O sea que cuando uno ejecuta el debugueo en modo paso a paso como lo ejecuto yo no salta a las rutinas de interrupcion. Lo probe en modo "play" y por razones obvias de la velocidad de ejecucion no veia si entraba o no en la rutina de interrupcion, como estaba trabajando con un PIC16F877 tampoco puedo colocarle un breakpoint en la interrupcion pero hecha la ley hecha la trampa, le ordene un "run tu cursor" hasta dentro de la rutina de interrucpion y finalmente veo que entra y la ejecuta. Bueno, eso es todo. Subo la info para que si alguien le pasa no reniegue tanto como yo que hace un mes estoy parado con este tema. Saludos a todos y gracias por la ayuda. Voy a ver si puedo subir esto con un titulo que represente mas el tema para el que lo necesite lo encuentre rapido.


 

anything