Forum: Mikrocontroller und Digitale Elektronik Oszilloskop dekalibriert?


von M. M. (mrmcchicken)


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

von Fabian O. (xfr)


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 ...

von Cheffe (Gast)


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

von Spess53 (Gast)


Lesenswert?

Hi

Pinwackeln im µs-Bereich durch Software dürfte recht ungenau sein. 
Programmiere mal eine CTC auf einem Timer und messe am entsprechenden 
Ausgang. Das ist aussagefähig.

MfG Spess

von Kein Name (Gast)


Lesenswert?

Warum nicht umgekehrt? Signal so einstellen, dass eine Schwingung 10 Div 
entspricht. Dann am Osziloskop drehen und zählen ob du 2, 5, 10... 
Schwingungen auf 10 Div bekommst.

von Nils Z. (nils_z)


Lesenswert?

Die Arduino-Funktion digitalWrite() hat Overhead und braucht einige µs, 
um den Pin zu schalten. Je kürzer deine Pulse werden, desto mehr 
verfälscht das die Dauer.
Hier steht ein bisschen was darüber: 
http://www.arduino.cc/en/Reference/PortManipulation

Wenn du das Delay ganz weglässt, siehst du ungefähr, wie lange der 
Befehl dauert.

von Hubert Etl (Gast)


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

von Hauspapa (Gast)


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

von Sven B. (scummos)


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

von Kein Name (Gast)


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.

von Nils Z. (nils_z)


Angehängte Dateien:

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);

von Wolfgang (Gast)


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.

von Spess53 (Gast)


Lesenswert?

Hi

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

>Da besteht jetzt allerdings etwas Erklärungsbedarf.

Das war auf 'Hochsprachen' und Delay bezogen. Und das wird ja auch hier

Beitrag "Re: Oszilloskop dekalibriert?"

bestätigt. In Assembler habe ich mit so etwas keine Probleme.

MfG Spess

von M. M. (mrmcchicken)


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

von Stefan N. (stefan_n)


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...

von Harald W. (wilhelms)


Lesenswert?

Hubert Etl schrieb:

> Lege doch mal die Netzspannung an den Eingang.

Du meinst, mit dem kaputten Arduuino kann man anschliessend sowieso
nichts mehr messen?
Gruss
Harald

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.