Autor Tema: Uso de Timer 2  (Leído 4031 veces)

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

Desconectado Advent

  • PIC10
  • *
  • Mensajes: 15
Uso de Timer 2
« en: 21 de Enero de 2008, 18:07:55 »
Estimado amigos estoy estudiando el timer 2 y tengo que hacer un programa que cuando pulso la interrupcion externa por rb0, haga que un led parpade a las 4 segundos, tengo desarrollado este codigo, pero no veo  nada, alguien me puede dar elguna sugerencia???

Gracias por su tiempo


***********************************************
#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOLVP,NOBROWNOUT,NOPROTECT,NODEBUG,NOWDT//ordenes para el programador
//#int_rb0
void tmr2()
{                 
   output_high(pin_B0);
   delay_ms(200);
 }
void main()
{
   set_tris_c(0);       //puerta c como salida
   set_tris_b(1);          //puerta b como entrada
   setup_timer_2(t2_div_by_1,0xFF,1);     //escoge el valor del preescaler
   disable_interrupts(global);            //deshabilita interrupciones globales
   enable_interrupts(int_timer2);         //habilita el timer 2
    b=output_b(0);                         //iguala la variable b al puerto b
   enable_interrupts(global);             //habilita ñas interrupciones
   set_timer2(0xff);
   set_rtcc(195); // cargas el valor neceasrio al timer
  do                                     //espera a la interrupción
  while(true);
 
}
no hay mala pregunta sino respuesta equivocada....Aunque sea lento el camino debe acerse siempre hacia arriba nunca abajo

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Uso de Timer 2
« Respuesta #1 en: 21 de Enero de 2008, 18:16:53 »
Has habilitado las interrupciones, pero no le has dicho al compilador que funciones debe utilizar al producirse que interrupción.

Busca en la ayuda la directiva
#INT_xxxxx y con ello resolverás el problema

Saludos

Desconectado Advent

  • PIC10
  • *
  • Mensajes: 15
Re: Uso de Timer 2
« Respuesta #2 en: 21 de Enero de 2008, 18:51:56 »
acabo de mirar la directiva que me decias, ademas he añadido una variable para el conteo, pero... aun asi no lo consigo, no se si la variable cont la empleo bien


gracias por echarme un cable

***********************************************
#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOLVP,NOBROWNOUT,NOPROTECT,NODEBUG,NOWDT//ordenes para el programador
//#int_rb0
#INT_TIMER2
int cont
void tmr2()
{               
if(cont=5);{
   output_high(pin_B0);
   delay_ms(200);
   cont=0;
}
 }
void main()
{
   cont=0
   set_tris_c(0);       //puerta c como salida
   set_tris_b(1);          //puerta b como entrada
   setup_timer_2(t2_div_by_1,0xFF,1);     //escoge el valor del preescaler
   disable_interrupts(global);            //deshabilita interrupciones globales
   enable_interrupts(int_timer2);         //habilita el timer 2
    b=output_b(0);                         //iguala la variable b al puerto b
   enable_interrupts(global);             //habilita ñas interrupciones
   set_timer2(0xff);
   set_rtcc(195); // cargas el valor neceasrio al timer
   cont++;
  do                                     //espera a la interrupción
  while(true);
 
}
no hay mala pregunta sino respuesta equivocada....Aunque sea lento el camino debe acerse siempre hacia arriba nunca abajo

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Uso de Timer 2
« Respuesta #3 en: 21 de Enero de 2008, 19:41:25 »
Tu programa tiene una serie de errores semánticos que debes resolver primero

Responde estas preguntas y seguro podré ayudarte.

Usarás la interrupción por RB0 para indicar mediante un pulso o nivel que pasados 4 segundos de haberse producido la interrupción un LED parpadeará. ¿Cierto?
Respuesta:

¿En que pin vas a colocar el LED que va a parpadear?
Respuesta:

¿Con qué frecuencia quieres que el LED parpadee?
Respuesta:

Cuando tengas estas respuestas te contestaré y verás a tu flamante LED encender y apagar, si la frecuencia de intermitencia que escoges es visible.

Saludos
Reinier

Desconectado Advent

  • PIC10
  • *
  • Mensajes: 15
Re: Uso de Timer 2
« Respuesta #4 en: 21 de Enero de 2008, 20:07:52 »
si en principio debo usarla,aunque me cuesta,


El led me da igual, tenia pensado el rb0

Frecuencia cada 4 segudos



gracias por tu ayuda
mira por donde voy di eso
**************************************
#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOLVP,NOBROWNOUT,NOPROTECT,NODEBUG,NOWDT//ordenes para el programador
#use fast_io(B)
#INT_TIMER2
#int_ext
void isr_tmr2()
{
   static int count=10;       //variable para el contador del tmr0
   count--;
   if(count==0)
   {
       output_toggle(PIN_B7);  // da un pulso en rb7
       count=10;
    }
   set_timer2(100);
}
void main()
{
   enable_interrupts(INT_TIMER2);      // Seleccionar interrupciones por rebasamiento de TMR0
   enable_interrupts(GLOBAL);      // Activar interrupciones
   while(1)                 //dentro del while el preescaler se selecciona en la interrpcion
   {
   //if(input(PIN_b0))                  //si hay entrada en a0
   if()
    setup_timer_2(t2_div_by_1,0xFF,15);     //escoge el valor del preescaler
  }
}
*****************************
como ves lo he reformado, por que estoy venga a leer y me lio jeje!!
gracias por tu tiempo
no hay mala pregunta sino respuesta equivocada....Aunque sea lento el camino debe acerse siempre hacia arriba nunca abajo

Desconectado Tho0oR

  • PIC10
  • *
  • Mensajes: 18
Re: Uso de Timer 2
« Respuesta #5 en: 21 de Enero de 2008, 20:33:11 »
Hola reiniertl!

Estoy igual que Advent. Podrias ser tan amable de poner un ejemplillo de como usar un timer2 con una interrupcion que salte cada final de cuenta de este?

Si eres tan amable nos seria de muy gran ayuda!  :P
y muchas gracias por tu tiempo!

=)

Desconectado Advent

  • PIC10
  • *
  • Mensajes: 15
Re: Uso de Timer 2
« Respuesta #6 en: 21 de Enero de 2008, 21:44:28 »
hola el programa mas o menos creo que va asi pero no funciona, alguna sugerencia??
*******************************************

#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOLVP,NOBROWNOUT,NOPROTECT,NODEBUG,NOWDT//ordenes para el programador
#use fast_io(B)
#INT_TIMER2
#int_ext
void IntRB0()
{
enable_interrupts (INT_timer2);    //Interrupción por desbordamiento del TMR0
 while(get_timer2()<2000)
  setup_timer_2(t2_div_by_1,0xFF,1);     //escoge el valor del preescaler
 set_timer2(195); 
}
void timer2()
{
   output_toggle(pin_b0);
}
void main()
{
enable_interrupts (GLOBAL);
enable_interrupts (INT_EXT);   //Interrupción por flanco ascendente o descendente en RB0
while()
 
 

 }
no hay mala pregunta sino respuesta equivocada....Aunque sea lento el camino debe acerse siempre hacia arriba nunca abajo

Desconectado Jorge_

  • PIC10
  • *
  • Mensajes: 30
Re: Uso de Timer 2
« Respuesta #7 en: 22 de Enero de 2008, 10:26:59 »
Los #INT_XXX los tienes que ubicar sobre la funcion que se llamará al producirse la interrupcion. Recuerda que el timer 2 es de 8 bits. Yo no entendí que es lo que quieres hacer, pero te dejo un ejemplo que al activar el pulsador conectado a RB0 hace parpadear el led cada 4s hasta que se vuelve a presionar el pulsador otra vez.

Código: C
  1. #include <16F877.h>
  2.  
  3. #use delay(clock=4000000)
  4.  
  5. short estadobtn = 0;
  6. int _65ms = 0;
  7.  
  8. #define LED PIN_B4
  9.  
  10. #INT_EXT
  11. void isrrb0ext( void )
  12. {
  13.     if( estadobtn == 0)
  14.     {
  15.         estadobtn = 1;
  16.         setup_timer_2( T2_DIV_BY_16, 0xFF, 16);
  17.         enable_interrupts( INT_TIMER2 );
  18.     }
  19.     else
  20.     {
  21.         estadobtn = 0;
  22.         disable_interrupts( INT_TIMER2 );
  23.     }
  24.    
  25. }
  26.  
  27. #INT_TIMER2
  28. void isrtimer2( void )
  29. {
  30.     _65ms++;
  31.     if( _65ms >= 62 )
  32.     {
  33.         output_toggle(LED);
  34.         _65ms = 0;
  35.     }    
  36. }    
  37.    
  38.  
  39. void main( void )
  40. {
  41.     ext_int_edge( H_TO_L );
  42.     enable_interrupts( INT_EXT );
  43.     enable_interrupts( GLOBAL );
  44.    
  45.     setup_timer_2( T2_DIV_BY_16, 0xFF, 16);
  46.     enable_interrupts( INT_TIMER2 );
  47.    
  48.     while( true )
  49.     {
  50.        
  51.     }    
  52.    
  53. }

Desconectado Advent

  • PIC10
  • *
  • Mensajes: 15
Re: Uso de Timer 2
« Respuesta #8 en: 22 de Enero de 2008, 15:36:28 »
si mas o menos es como el ejemple, muchas gracias amigo. Estudiare un poco el codigo a ver si puedo hacer que no tenga que resetearlo para hacer que no luzca o a ver que me invento.

Muchas gracias por tu respuesta
no hay mala pregunta sino respuesta equivocada....Aunque sea lento el camino debe acerse siempre hacia arriba nunca abajo

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Uso de Timer 2
« Respuesta #9 en: 22 de Enero de 2008, 18:24:39 »
Gracias Jorge_ no tendré que poner el ejemplo gracias a tí.

Muchachos, mejor imposible, allí tienen un ejemplo digno de libro de texto o manual sobre CCS, disfrútenlo y saquen el mejor provecho de ese trozo de código.

Saludos
Reinier