Ich verwende ein Arduino Uno, um Zeit- und Spannungsinformationen über die serielle Schnittstelle an Python zu senden, um sie zu zeichnen. Die Intervallzeiten zwischen aufeinanderfolgenden Zeitstempeln scheinen jedoch mit der Zeit zuzunehmen, was sich auf meine Darstellung auswirkt. Dies gilt insbesondere dann, wenn die Baudrate auf 9600 eingestellt ist, wobei meine anfänglichen Zeitunterschiede möglicherweise 1320 betragen und nach relativ kurzer Zeit auf 16400 ansteigen. Wenn diese Rate auf maximal 115200 Bit / s eingestellt wird, ist die Änderung langsamer und weniger auffällig, von etwa 1340 auf 1500, selbst nach einer relativ langen Sendezeit. Alle Zeiten sind in Mikrosekunden angegeben.
Ich würde gerne wissen, ob ich diesen Effekt reduzieren oder eliminieren kann und wenn ich nicht verstehe, warum er existiert. Ich habe Dinge über Interrupts und Verzögerungen gelesen, die dies verursachen, aber ich schätze die Komplexität der vorhandenen Elektronik nicht ganz und möchte wissen:
- Kann ich das Timing präziser gestalten?
- Was verursacht diese zeitliche Änderung?
Folgendes habe ich derzeit:
#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()
das Dauert dieser Anruf immer genauso lange?