TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Renatox_ en 25 de Septiembre de 2010, 16:14:11
-
Hola compañeros estoy programando el PIC12F675 el modulo de Timer1 lo estoy usando como contador externo asíoncrono y el datasheet me recomienda que antes de escribir en el registro TMR1 primero pare el módulo y luego escriba un valor. esto que pongo a continuación estaré bien?
TIMER0_isr()
{ // ocurre cada 0.065536seg
counter=GET_TIMER1();
setup_timer_1(T1_DISABLED);
SETUP_TIMER_1(0x00);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
orden='B';
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
while (1)
{
if (orden=='B')
{
// algoritmo
}
}
Es correcto como estoy deteniendolo y luego activandolo al Timer1? o no necesito poner el setup_timer_1(T1_DISABLED); SETUP_TIMER_1(0x00); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); talves solo sea necesario poner SETUP_TIMER_1(0x00); y el CCS se encarga de desabilitar y habilitar el timer.
saludos
Renato
-
Hola Renato , he estado leyendo la hoja de datos del PIC y yo entendí lo mismo que estás haciendo. Me parece que el código es correcto.
Ya lo ensayaste y no funciona?
Saludos!
-
Hola bmb lo probaré la otra semana, como tu dices pienso que esta bien, lo que pasa es que nunca he usado configuracion de modulos en pleno programa, si compila.
saludos
Renato
-
Hola Renato, alguna vez he hecho la configuración de los Timers en pleno programa y compila y funciona sin problemas.
Saludos!
-
Hola.
Tienes algún esquemático?
-
Si no estoy equivocado, setup_timer1(TI_DISABLED), es lo mismo que poner setup_timer1(0x00), estas dos cosas lo que hace es poner a cero todos los bits del registro T1CON (esto lo he leido en el libro de Eduardo Garcia Breijo).
-
Si no estoy equivocado, setup_timer1(TI_DISABLED), es lo mismo que poner setup_timer1(0x00), estas dos cosas lo que hace es poner a cero todos los bits del registro T1CON (esto lo he leido en el libro de Eduardo Garcia Breijo).
hola ramirez, que buen ojo, no lo había notado! No se si serán lo mismo, pero lo normal es usar: setup_timer_1(T1_DISABLED); Yo creo que lo que quiso poner renato fue: set_timer1(0x00); que inicializa el valor a contar del temporizador.
Saludos!
-
Gracias por la ayuda, si me habia confundido debe ser son SET asi:
#int_TIMER0
TIMER0_isr()
{ // ocurre cada 0.065536seg
counter=GET_TIMER1();
setup_timer_1(T1_DISABLED);
SET_TIMER1(0x00);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
orden='B';
}
aun no lo pruebo supongo que esto funcionará debo hacerle caso a lo que me recomienda el datasheet, lei que si se escribe sin parar el timer pueden pasar cosas inesperadas. La aplicacion es recibir recibir una frecuencia estable de 12.5khz y contar los pulsos cada 65mseg si la cuenta cae dentro de un rango entonces el PIC12 habilita el sistema, lo pienso usar para el ChargePump del match. el problema es que cuando se apaga la PC bota basura por el puerto paralelo y me activa el m3 y m4 al mismo tiempo y se han quemado algunos fusibles :?, en esas estoy.
saludos
Renato