Hallo Udo!
Danke für deine Antwort!
Genauer gesagt würde ich gerne die Zeit zwischen den Impulsen messen.
Folgendes Beispiel:
Eine LED bzw. Laser Diode wird mit einer Pulsrate von 100 Hz betrieben, also alle 0,01 Sekunden wird Infrarot Impuls ausgesendet. Die LED hat eine Wellenlänge von ca. 900nm bei einer Pulslänge von ca. 20ns.
Und genau diese 0,01 Sekunden würde ich gerne messen. Die Photodiode wird dann vor die LED gehalten und die Zeitabstände zwischen den ausgesendeten Impulsen gemessen. Eben ähnlich wie beim Auslesen des Codes einer Fernbedienung.
Nun kann es aber auch sein, dass die Pulsrate viel höher liegt (im KHz Bereich) und auch variabel ist. Dann liegt der Zeitabstand zwischen den Impulsen beispielsweise bei 80 Mikro Sekunden (bei 12500Hz).
Ich denke der Befehl pulseIn() müsste hier passen, nur dass ich nicht HIGH sonder LOW messe. Wenn ich die Beschreibung richtig verstanden habe, misst HIGH die Pulselänge (bei mir wären das 20ns, was aber nicht mehr messbar sein wird) und LOW die Zeit zwischen den Impulsen. Es wird zwar dann die Impulslänge nicht mitgemessen, aber ich denke 20ns kann man vernachlässigen.
Wenn im SerialMonitor dann
10000
10000
10000
10000
...
..
ausgebgeben wird beträgt die Pulsrate 100Hz
bei
1052.63
1052.63
1052.63
..
sind es 950Hz
(Daten in Mikro Sekunden, umgerechnet mit f=1/T)
Würde für diese Aufgabe so ein einfacher Coder ausreichen??
int pin = 7;
unsigned long duration;
void setup()
{
pinMode(pin, INPUT);
Serial.println("Messbeginn");
}
void loop()
{
duration = pulseIn(pin, LOW);
Serial.println(duration);
}
Als Photodiode würde ich eine
OSRAM Silizium-PIN-Photodiode mit ähnlichen Spezifikationen von der LED auswählen (Wellenlänge von 800 bis 1100nm, 5ns Schaltzeit)