TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Thulsa Doom en 06 de Abril de 2012, 10:39:29

Título: Duda con timer y banderas para las rutinas
Publicado por: Thulsa Doom en 06 de Abril de 2012, 10:39:29
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
 
Código: [Seleccionar]
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:
Código: [Seleccionar]
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?
Título: Re: Duda con timer y banderas para las rutinas
Publicado por: MLO__ en 06 de Abril de 2012, 10:58:29
Hola.

Creo que hay algo llamado RTOS y se programa de la forma en que quieres, es decir por eventos en tiempo (si no me equivoco).

Saludos
Título: Re: Duda con timer y banderas para las rutinas
Publicado por: Thulsa Doom en 06 de Abril de 2012, 19:57:41
Aaaaa gracias, pues lo investigaré
Título: Re: Duda con timer y banderas para las rutinas
Publicado por: PalitroqueZ en 06 de Abril de 2012, 20:39:58
....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 ?.
...

claro que es buena idea, de hecho es la forma mas eficiente de hacer retardos con pics



Título: Re: Duda con timer y banderas para las rutinas
Publicado por: Thulsa Doom en 07 de Abril de 2012, 04:27:02
Pues gracias por el comentario y seguiré en esta misma línea