Estou usando um Arduino Uno para enviar informações de tempo e tensão pela porta serial para o Python para plotar. No entanto, os intervalos de tempo entre carimbos de hora sucessivos parecem estar aumentando ao longo do tempo, afetando minha plotagem. Isso é especialmente verdade quando a taxa de transmissão é definida como 9600, onde minhas diferenças de tempo iniciais podem ser de 1320 e aumentam para 16400 após um período de tempo relativamente curto. Quando essa taxa é colocada no máximo em 115200 bps, a alteração é mais lenta e menos perceptível, de cerca de 1340 a 1500, mesmo após um período relativamente longo de envio. Todos os horários são dados em microssegundos.
Gostaria de saber se posso reduzir ou eliminar esse efeito e, se não entender, por que ele existe. Eu li coisas sobre interrupções e atrasos que causam isso, mas não aprecio completamente a complexidade dos eletrônicos disponíveis e gostaria de saber:
- Posso obter maior precisão no tempo?
- O que causa essa mudança no tempo?
Aqui está o que eu tenho atualmente:
#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()
faz? Essa chamada sempre dura a mesma quantidade de tempo?