Hallo zusammen,
Wie oben schon beschrieben die Frage, wie ich einen Takt von 50kHz mit dem Arduino Mega2560 erzeugen kann.
Das ist mein derzeitiger Sketch:
const int outputPin = 5; // digitale Ausgangspin
unsigned long startTime; // Variable zur Speicherung des Startzeitpunkts
void setup() {
pinMode(outputPin, OUTPUT); // Setzen des Pin als Ausgang
Serial.begin(9600); // Starten der serielle Kommunikation mit 9600 Baud
}
void loop() {
// Einschaltphase messen
startTime = micros(); // Aktuelle Zeit speichern
digitalWrite(outputPin, HIGH); // Pin auf HIGH
delayMicroseconds(10); // Warten für die halbe Periode (T_high)
unsigned long onTime = micros() - startTime; // Berechnen Sie die Einschaltzeit in Mikrosekunden
// Ausschaltphase messen
startTime = micros(); // Aktuelle Zeit speichern
digitalWrite(outputPin, LOW); // Pin auf LOW
delayMicroseconds(10); // Warten für die andere halbe Periode (T_low)
unsigned long offTime = micros() - startTime; // Berechnen der Ausschaltzeit in Mikrosekunden
// Ausgabe der gemessenen Zeiten
Serial.print("Einschaltzeit: ");
Serial.print(onTime);
Serial.print(" µs ---- ");
Serial.print("Ausschaltzeit: ");
Serial.print(offTime);
Serial.println(" µs");
delay(1000); // Eine Sekunde warten, bevor der nächste Zyklus beginnt
}
// Soll Periodendauer = 20µs -> f = 50kHz
Leider erhalte ich mit diesem Code folgende Ausgabe:
Einschaltzeit: 20 µs ---- Ausschaltzeit: 16 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 20 µs ---- Ausschaltzeit: 16 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 20 µs ---- Ausschaltzeit: 20 µs
Einschaltzeit: 16 µs ---- Ausschaltzeit: 16 µs
... usw.
Mir ist klar, das der Controller durch die Funktion Serial.print() und auch die delayMicroseconds() zeit verbraucht.
Gibt es aber eine möglichkeit möglichst genau einen Takt von 50kHz mit dem Arduino zu erzeugen?
Vielen Dank!