J'utilise un Arduino Uno pour envoyer des informations de temps et de tension sur le port série à Python pour tracer. Cependant, les intervalles de temps entre les horodatages successifs semblent augmenter au fil du temps, affectant mon tracé. Cela est particulièrement vrai lorsque le débit en bauds est défini sur 9600, où mes différences de temps initiales peuvent être de 1320 et augmenter à 16400 après une période de temps relativement courte. Lorsque ce taux est mis au maximum à 115200 bps, le changement est plus lent et moins perceptible, d'environ 1340 à 1500, même après un cycle d'envoi relativement long. Toutes les heures sont données en microsecondes.
Je voudrais savoir si je peux réduire ou éliminer cet effet, et sinon comprendre pourquoi il existe. J'ai lu des choses sur les interruptions et les retards provoquant cela, mais je n'apprécie pas pleinement la complexité de l'électronique à portée de main et je voudrais savoir:
- Puis-je obtenir une plus grande précision dans le timing?
- Qu'est-ce qui cause ce changement de timing?
Voici ce que j'ai actuellement:
#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()
-il? Cet appel dure-t-il toujours le même temps?