Hola a todos
Antes de nada quiero decir que llevo tiempo con esto de la programación de microcontroladores pero me considero un novato ya que nunca he tomado clases y solo he aprendido a base de libros y foros como este, con lo cual puede que lo que diga ya esté hecho y de una manera mucho más fácil y cómoda
tengo una pregunta que hace tiempo me ronda la cabeza, es en referente a los timer, ¿se puede utilizar un time para causar retardos y distribuir el tiempo de las tareas entre las funciones?
Me explico.
Resulta que haciendo proyectos, e ir añadiendo periféricos al microcontrolador, normalmente tengo que ajustar los tiempos para que las lecturas de los periféricos sean en el tiempo que el fabricante recomienda y evitar colisiones y saturaciones.
Pues me di cuenta de que si en el driver del periférico por ejemplo un MAX6675, las lecturas de este dispositivo no puede ser inferior a 200mls, entonces yo hacía un
delay_ms(200); y el micro no me ejecutaba ningún código más hasta que éste no terminara y se hacía mucho más difícil ajustar un cronómetro y se desperdicia tiempo en hacer estas rutinas.
Un día me dio por implementar un timer y ajustarlo a más o menos un tiempo real y por medio de banderas hacía que las funciones del programa entraran en ejecución más o menos en su momento.
Ejemplo de timer1:
void cronometro(){ //implemetamos un cronómetro en el timer1
set_timer1(64500);
if(++milisegundos > 999){ //Decrementamos milisegundos hasta que sea mayor que 999
milisegundos = 0; //cargamos milisegundos con el valor 0 para un proximo conteo
flag_cronometro=1;
}
if((milisegundos==200)||(milisegundos==400)||(milisegundos==600)||(milisegundos==800)||(segundos == 999)){
flag_max6675=1;
}
if(milisegundos==500){
flag_limpiarlcd=1;
}
}
y funciono, no era 100% preciso pero el funcionaba y mejor que como lo hacía antes .
Se supone que mientras el timer no llegue al tiempo seleccionado en la bandera, no ejecutará el código de esa función y mientras tanto el código general se seguirá ejecutando y solo gastando el tiempo preciso en cada función y en las interrupciones por desbordamiento del timer, ¿estoy en lo cierto?,
¿Esto es una buena idea ?.
Seguramente hay una manera de hacer esto y está estandarizada y mas eficiente.
¿Qué opinión me dais?