Autor Tema: Diferencia entre interrupcion Timer0 e interrupcion RTCC  (Leído 3066 veces)

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

Desconectado teban89

  • PIC10
  • *
  • Mensajes: 16
Diferencia entre interrupcion Timer0 e interrupcion RTCC
« en: 08 de Noviembre de 2014, 21:15:22 »
Buenas gente, tengo un problema que me esta comiendo la cabeza y no puedo solucionar.
Estoy haciendo un programa en el cual uso el TIMER0 y quiero que empiece a contar CUANDO YO QUIERA pero apenas el programa arranca comienza a funcionar igual. Tenia entendido que el timer comenzaba cuando el programa llegaba a la instruccion SET_TIMER0. Leyendo la libreria 16f628a.h veo que existe la opcion de TIMER0 o de RTCC. ¿Que diferencia hay entre estas? Quizas estoy escribiendo algo mal en el codigo.

Aqui lo dejo por las dudas:
Código: [Seleccionar]
#include <16F628A.h>
#include <LABEL16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                      //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES MCLR                   //Master Clear pin disabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=48000)

/////////////////////INTERRUPCIONES/////////////////////////////
#int_TIMER0
void  TIMER0_isr(void)
{
B1=!B1;
}

///////////////MAIN///////////////
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);

enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
   
SET_TRIS_A(0b00000000);
SET_TRIS_B(0b00010001);

OSCF=1;

while(1)
{

}//while
}//main

MUCHAS GRACIAS!!!

Desconectado martin12as

  • PIC10
  • *
  • Mensajes: 36
Re: Diferencia entre interrupcion Timer0 e interrupcion RTCC
« Respuesta #1 en: 09 de Noviembre de 2014, 13:35:23 »
creo que es lo mismo pero con distinto nombre nomas, no podes desactivar la interrupción y activarla al momento que queres que empiece a contar? o pone alguna bandera en la interrupción para que aumente un contador dependiendo de esa bandera, supongo que hay varias formas de hacer lo que decis

Desconectado teban89

  • PIC10
  • *
  • Mensajes: 16
Re: Diferencia entre interrupcion Timer0 e interrupcion RTCC
« Respuesta #2 en: 09 de Noviembre de 2014, 13:46:18 »
Ya lo probe y no funciona. Empieza el programa con la interrupcion deshabilitada (disable_interrupts(INT_TIMER0);) y en cierta parte pongo que si se aprieta un boton esa interrupcion se habilite (enable_interrupts(INT_TIMER0);) y me la habilita igual aunque el boton no se apriete.
   
   

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Diferencia entre interrupcion Timer0 e interrupcion RTCC
« Respuesta #3 en: 09 de Noviembre de 2014, 14:15:30 »
Es que si te fijas el diagrama/registros del TMR0 en el datasheet vas a notar que no hay ningun bit para desabilitar la cuenta. El TMR1 y 2 si poseen un bit en sus respectivos registros TxCON, llamado TMRxON, habilitando la cuenta o no. Mientras que en el timer0 no.

El timer 1 tiene un preescaler de maximo 8 y el TMR2 tenes un prescaler de 16 y un post scaler de 16.

Con lo cual si queres manejar cuando cuenta y cuando no, usas otro timer, y si no la otra es cuando llegue a tu punto de interes, cargarle el valor al tmr0 (ej ponerlo en 0, creo que con set_timer0(0x00); )
« Última modificación: 09 de Noviembre de 2014, 14:19:42 por KILLERJC »

Desconectado GabrielD

  • PIC10
  • *
  • Mensajes: 34
Re: Diferencia entre interrupcion Timer0 e interrupcion RTCC
« Respuesta #4 en: 10 de Noviembre de 2014, 17:05:08 »
Hola, si de hecho el timer arranca apenas se declara el setup_timer_0, esa prueba ya la hice una vez, cuando llega a la linea de codigo set_timer() el se inicializa nuevamente con el valor que le pongas al parecer, al menos eso conclui yo, si me equivoco que alguien me corrija.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: Diferencia entre interrupcion Timer0 e interrupcion RTCC
« Respuesta #5 en: 11 de Noviembre de 2014, 16:35:26 »
En realidad todos los timers arrancan con el PIC. Lo unico que puedes hacer es desactivar la interrupcion. Pero el timer seguira corriendo.
Si quieres empezar a contar y que salte la interrupcion al llegar al final tienes que activar la INT y luego poner el timer a 0 con set_timer_0(0);
Asi lo que haces es poner el timer a 0. Si al saltar la INT no queres contar mas, desactivas la INT desde dentro de la interrupcion. Y cuando quieras volver a contar, haces lo mismo de antes.
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Diferencia entre interrupcion Timer0 e interrupcion RTCC
« Respuesta #6 en: 11 de Noviembre de 2014, 16:49:18 »
En realidad todos los timers arrancan con el PIC. Lo unico que puedes hacer es desactivar la interrupcion. Pero el timer seguira corriendo.
Si quieres empezar a contar y que salte la interrupcion al llegar al final tienes que activar la INT y luego poner el timer a 0 con set_timer_0(0);
Asi lo que haces es poner el timer a 0. Si al saltar la INT no queres contar mas, desactivas la INT desde dentro de la interrupcion. Y cuando quieras volver a contar, haces lo mismo de antes.

Estas equivocado, depende de que timer sea. El timer sigue funcionando pero no cuenta ( corre ) si desabilitas algun bit como tiene el TMR1 y el TMR2 mira el datasheet del PIC16f628 que es este caso. EL TMR0 no tiene esa particularidad en este PIC.

Pero tu solucion es valida para lo que el necesitaria.
« Última modificación: 11 de Noviembre de 2014, 17:24:45 por KILLERJC »


 

anything