[DS] Controlar el tiempo?

Para controlar el tiempo de forma mas precisa de la que permiten las PAlibs, que es a nivel de segundos, ha de hacerse con timers? o hay otra forma?

Si es con timers... como funcionan?
La DS dispone de 4 timers para cada uno de los procesadores y es bastante sencillo utilizarlos de LIBNDS:

Primero registra el handler de interrupcion:

int cuenta=0;

void timer_hand() /* handler de interrupciones
{
cuenta++;
}


irqSet(IRQ_TIMER0, timer_hand); // en este caso, timer 0

Luego ajustas los parametros del timer asi:

TIMER0_DATA =TIMER_FREQ_64(100); // 100Hz
TIMER0_CR = TIMER_ENABLE | TIMER_DIV_64 | TIMER_IRQ_REQ;


Aquí hemos ajustado el timer 0 para que mediante interrupciones llame a timer_hand() 100 veces por segundo, asi que cuenta se incrementará 100 veces por segundo

PD: Mirate el fichero timers.h que viene información detallada sobre los divisiores, que yo en este caso, uso el divisor 64
que diferencia hay entre el divisor de 64, y los demas? es algo que no entiendo.
jandujar escribió:que diferencia hay entre el divisor de 64, y los demas? es algo que no entiendo.


Bueno, como sabes, el divisor sirve para cambiar la escala del temporizador, asi que debes usar:

-Divisor 1: para frecuencias entre 512Hz y 33554432Hz

-Divisor 64: para frecuencias entre 8Hz y 524288Hz

-Divisor 256: para frecuencias entre 2Hz y 131072Hz

-Divisor 1024: para frecuencias entre 0.5Hz y 32768Hz

Es decir, que si queremos un timer con una frecuencia de 100Hz, no podemos usar el divisor 1, porque la frecuencia minima con dicho divisor es de 512hz.

Tambien hay que tener en cuenta que al obtenerse la frecuencia mediante divisores y tratarse de numeros enteros, las frecuencias no seran 100% exactas (salvo que queramos una frecuencia que no genere decimales al dividir)

En el caso del timer de 100Hz, con el divisor 64, la frecuencia programada sería de 99,98 Hz, aproximadamente
gracias hermes.

Gracias a tu explicacion y a mirar un poco el timers.h, ya se como funciona.
5 respuestas