jueves, 26 de mayo de 2011

La función millis en pinguino

Esta función puede ser muy útil para el manejo de tiempo. Tambien para generar señales digitales en función del tiempo como modulación de ancho de pulso.
el siguiente es el enlace la fuente consultada.
http://wiki.pinguino.cc/index.php/Millis
Explicación
millis - retorna el tiempo trancurrido desde que inicia el programa. 
Cuando el programa comienza el timer interno TMR0 es inicializado en 0. TMR0 es un registro de 16 bits que se incrementa en uno cada milisegundo. Al ser de 16 bits llega a overflow despues de incrementarse cada milisegundo hasta 65536 lo que corresponde a 65.536 segundos. Como funcion millis() retorna el valor actual de TMR0.
Declaración
El valor que retorna es de tipo long (32bits). reinicia a 0 al llegar a 65536 

millis();
Instrucción para reiniciar la cuenta de la funcion

_millis = 0;
Ejemplo

void setup(){
   pinMode(0,OUTPUT);
   digitalWrite(0,LOW);
 }
void loop(){
   if (millis()>1000) {
     digitalWrite(0,HIGH); // enciende el led por un segundo
  }
  if (millis()>2000){
     _millis=0; // reinicia el contador despues de dos segundos
    digitalWrite(0,LOW); // Apaga el led
  }

}

3 comentarios:

  1. Hola, como el valor que devuelve es de 32 bits, si el registro es de 16 bits. Errata o estoy muy perdido?

    Graicas

    ResponderEliminar
  2. Si tienes razón, el valor que devuelve no es de 32 bits, es de 16. En el en la fuente original donde tomo la información así se encuentra consignado. Pero el tipo de dato apropiado es unsigned int (u16). como se ve en este enlace
    http://wiki.pinguino.cc/index.php/Data_types

    ResponderEliminar
  3. Ya mire el archivo que contiene la función en el código aparece como tipo long (32 bits). Aunque el registro efectivamente es de 16 bits el tipo utilizado para retornar es de 32 bits.

    ResponderEliminar