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
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 ...
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
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
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.
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.
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
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
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
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.
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); |
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.
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
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
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.