Estoy usando un Arduino Uno para enviar información de tiempo y voltaje a través del puerto serie a Python para trazar. Sin embargo, los intervalos de tiempo entre marcas de tiempo sucesivas parecen estar aumentando con el tiempo, lo que afecta mi trazado. Esto es especialmente cierto cuando la velocidad en baudios se establece en 9600, donde mis diferencias de tiempo iniciales pueden ser 1320 y aumenta a 16400 después de un período de tiempo relativamente corto. Cuando esta tasa se pone al máximo de 115200 bps, el cambio es más lento y menos notable, de alrededor de 1340 a 1500, incluso después de un envío relativamente largo. Todos los tiempos se dan en microsegundos.
Me gustaría saber si puedo reducir o eliminar este efecto, y si no entiendo por qué existe. He leído cosas sobre las interrupciones y los retrasos que causan esto, pero no aprecio completamente la complejidad de la electrónica en cuestión y me gustaría saber:
- ¿Puedo obtener mayor precisión en el tiempo?
- ¿Qué causa este cambio en el tiempo?
Esto es lo que tengo actualmente:
#include <eHealth.h>
extern volatile unsigned long timer0_overflow_count;
float fanalog0;
int analog0;
unsigned long time;
byte serialByte;
void setup() {
Serial.begin(9600);
}
void loop() {
while (Serial.available()>0){
serialByte=Serial.read();
if (serialByte=='S'){
while(1){
fanalog0=eHealth.getECG();
// Use the timer0 => 1 tick every 4 us
time=(timer0_overflow_count << 8) + TCNT0;
// Microseconds conversion.
time=(time*4);
//Print in a file for simulation
//Serial.print(time);
//Serial.print(" ");
Serial.print(fanalog0,5);
Serial.print("\n");
if (Serial.available()>0){
serialByte=Serial.read();
if (serialByte=='F') break;
}
}
}
}
}
eHealth.getECG()
hacer? ¿Esa llamada siempre dura la misma cantidad de tiempo?