Yo mismo escribí un programa para implementar las funciones millis () y delay () sin la biblioteca arduino. Incluí una variable de conteo que cuenta cada segundo y envío su valor cada segundo a través del puerto serie. Lo que encontré es que su valor se aleja del valor real en casi 2 segundos cada 3 minutos. ¿Hay algún problema con mi código? ¿O es ese Serial.print () el culpable que puede retrasar esa rutina? ¿Cuánto tiempo tarda en ejecutarse Serial.print ()?
Aquí está el código:
Editar: Edité el código de esta manera, pero el recuento del arduino sigue demorando alrededor de 4 segundos después de 4 minutos. Se demora 13 segundos después de 10 minutos, es decir, solo cuenta 587 segundos después de los 600 segundos reales.
Editar 2: Aquí está mi código actualizado. Todavía hay retraso en el tiempo. Tengo un retraso de alrededor de 6 segundos en 5 minutos.
#include "Arduino.h"
#include <avr/io.h>
#include <avr/interrupt.h>
void toggle_led(void);
unsigned long volatile millis_count = 0;
volatile char state = 1;
unsigned long volatile current_count = 0;
unsigned int volatile count = 0;
ISR(TIMER0_COMPA_vect) { //Timer interrupt ISR
millis_count++;
if (millis_count - current_count == 1000) {
current_count = millis_count;
toggle_led();
Serial.println(count++);
}
}
int main(void) {
init();
TCCR0B = 0b11; //Timer settings for interrupt at every millisecond
OCR0A = 249;
TIMSK0 |= 0b10;
sei();
Serial.begin(9600);
DDRB |= 1<<5;
for (;;) {
}
}
void toggle_led(void) {
PORTB ^= (1<<5);
}