Oszilloskop dekalibriert?

OP #3069455
Lesenswert?

Hallo alle miteinander.
Ich habe eine Frage zu meinen Oszilloskop.
Es ist ein gebrauchtes Hm 205-3 20mhz Speicheroszi.

Ich habe auf meinen Arduino ein Script hochgeladen, welches einen Pin 
die ganze Zeit an und aus macht. Also nichts besonderes.
Ich bekomme auch dementsprechend das Rechtecksignal.

Wenn ich das Signal mit einer Verzögerung von 1ms ausgebe, und das 
Oszilloskop auf 1ms/Div eingestellt ist, ist der Balken auch ziemlich 
genau eine Div lang.

Bei einem Signal von 100µs und einer Einstellung von 100µs/Div ist das 
Signal, also die Blaken am Oszilloskop schon minimal länger als eine 
Div.

Wenn ich jetzt ein Signal von 10µs ausgebe und das Oszilloskop auf 
5µs/Div einstelle sind die Blaken aber schon fast 3 Div lang. Also mein 
Oszilloskop sagt mir das Signal hat eine länge von ca 14µs.

Wer hat recht, der Arduino oder das Oszilloskop?

Bei einem Signal von 1µs am Arduino sagt das Oszilloskop ich habe ganze 
5µs.

Ich hoffe mir kann jemand helfen :).

MfG
#3069466
Lesenswert?

Wie erzeugst Du denn das Signal? Mit _delay_us()? Dann ist logisch, dass 
das nicht genau ist. Das ist ja nur eine Warteschleife, die auch nicht 
perfekt genau ist. Zu der Wartezeit kommen außerdem noch die Befehle für 
das Toggeln des Pins und der Rücksprung in der Schleife.

Wenn Du genauere Timings ausgeben willst, musst Du den Timer benutzen. 
Aber auch der ist nur so genau wie der Taktgeber des Prozessors. Eignet 
sich also nicht um etwas zu kalibrieren ...
Gast #3069474
Lesenswert?

Moin,

das Wort "dekalibriert" ist nicht existent, da es nicht möglich etwas zu 
"dekalibrieren". Ich hoffe, dass das hier im Forum irgendwann mal 
verstanden wird.

Zum Problem: Das Oszilloskop kann natürlich fehlerhaft justiert sein. 
Eine Kalibrierung würde dem selbstverständlich nicht abhelfen. Du 
könntest aber Korrekturwerte aus dem Kalibrierschein bestimmen.

Wie sieht es denn mit Alternativen aus? Ist ein Frequenzzäler vorhanden? 
Oder transformiere die Netzspannung auf ein für dein Oszi zulässigen 
Wert herunter. Durch die Messunsicherheit des Oszis wird die Abweichung 
der Netzfrequenz on 50Hz nicht auflösbar sein.


Cheffe
Gast #3069571
Lesenswert?

Lege doch mal die Netzspannung an den Eingang.
Eine Halbwelle ist ganz genau 10ms lang.

Eine höhere Frequenz gibt es auch in jedem Haushalt, nämlich eine 
Quartzuhr. Der Quartz schwingt mit 2 hoch 15 also 32768 Hz was eine 
Vollwelle mit 30,5...ys ergibt. (OSZI mit Tastkopf 1:10 am Ausgang des 
Oszillators stopt den OSZ nicht).

Der Arduino mit internem Oszillator kann aber schon so weit daneben 
liegen.

mfg Hu
Gast #3069585
Lesenswert?

So gerade weder eine genaue Frequenzmessung noch ein Referenzoszillator 
verfügbar ist, dafür aber zwei CD4040 herumliegen: Beide in Serie hängen 
(langsamsten Ausgang des Ersten auf Oszillator Eingang des 2.) Ersten 
als RC Oszillator mit Poti abstimmbar. Am langsamsten Augang des 2. eine 
LED und dann auf 1Hz abgleichen (Quarzuhr mit blinendem Doppelpunkt oder 
tickende Uhr sind hilfreich). Dann kann man die höheren Teilerstufen 
wunderbar abgreifen. Mit ein bischen Geduld wird das besser als 
erwartet. Der CD4060 geht genauso, man muss nur schauen das man mit der 
LED zwischen 20. und 24. Teilerstufe landet. Versorgung mit 12-15V ist 
angeraten.

Nur für den Fall das Du kein Vertrauen zu Deiner Software hast.

viel Erfolg
Hauspapa
#3069591
Lesenswert?

Ich würde in diesem Fall dem Oszi in seiner Funktion als Messgerät voll 
vertrauen und das Messergebnis so hinnehmen, wie es ist. Der "Fehler" 
liegt wohl eher darin, dass die Timings im Programm nicht so sind, wie 
du dir das denkst. Außer vielleicht, du hast einen guten Grund, dem Oszi 
zu misstrauen, aber das hört sich ja nicht so an. ;)

Grüße,
Sven
Gast #3069596
Lesenswert?

Gute Idee... könnte man noch verbessern. Das 1Hz Signal mit dem Arduino 
einlesen, eine Uhr programmieren und einen Tag warten. Wenn die Zeit 
immer noch keine Sekunde abweicht, hat man eine Genauigkeit von 1/86400.
#3069691
Lesenswert?

digitalWrite() braucht ungefähr 2,5µs, das passt weitgehend zu Konrads 
Beobachtungen. Das Oszilloskop misst schon richtig, die Arduino-Funktion 
ist einfach so langsam.

Meine Messung:
1
digitalWrite(2, HIGH);
2
delayMicroseconds(1);
3
digitalWrite(2, LOW);
4

5
PORTD |= (1<<PD2);
6
delayMicroseconds(1);
7
PORTD &= ~(1<<PD2);
Angehängte Dateien:
Gast #3069700
Lesenswert?

Spess53 schrieb:
> Pinwackeln im µs-Bereich durch Software dürfte recht ungenau sein.

Da besteht jetzt allerdings etwas Erklärungsbedarf.

Ein Prozessor der seinen Takt aus einem Quarzoszillator ableitet, sollte 
genau mit der Quarz-Genauigkeit von mindestens 10^-4 laufen. 
Voraussetzung ist natürlich, dass der in der Software implementierte 
Algorithmus zur Frequenzerzeugung deterministisch ist.

Eine While-Schleife mit ein paar NOPs und der Pin-Wackel erzeugt eine 
Frequenz, die so genau ist, wie der Quarz, solange nicht ein 
Betriebssystem und irgendwelche Interrupts im Hintergrund laufen.

Die Laufzeit der Schleife läßt sich im Simulator leicht ablesen.
OP #3069803
Lesenswert?

Hallo nochmal.
Ich konnte nicht Antworten da ich unterwegs war.
Tatsächlich. Der Arduino ist "schuld". Ich habe es gerade nochmal ohne 
einen delay versucht und bekomme trotzdem ein 2µs Signal. Sobald ich den 
delay erhöhe, addiert dieser sich zum Signal dazu.

Herzlichen Dank euch allen! :)

MfG
#3069821
Lesenswert?

konrad M. schrieb:
> Hallo nochmal.
> Ich konnte nicht Antworten da ich unterwegs war.
> Tatsächlich. Der Arduino ist "schuld". Ich habe es gerade nochmal ohne
> einen delay versucht und bekomme trotzdem ein 2µs Signal. Sobald ich den
> delay erhöhe, addiert dieser sich zum Signal dazu.
>
> Herzlichen Dank euch allen! :)
>
> MfG

Wollte ich gerade vorschlagen: mach zwei verschiedene Delays und schau 
dir die Differenz an, dann ist der konstante Overhead fürs Pinwackeln 
und die Schleife egal. Bist du ja nun schon selber drauf gekommen. Wenn 
der Arduino einen Quarz drauf hat, kannst du natürlich auch direkt dort 
dran messen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren