Zie Zeitmessung mach ich direkt am Timer, weil es sich in meinem Fall um einen Timer-Interrupt handelt, der mit bis zu 20kHz reichen kann. Die Ausgabe erfolgt auf Anfrage über ein Display oder auf Anfrage via UART auf ein Terminal.
Das über einen Simulator zu messen stell ich mir aus den o.g. Gründen nicht so einfach vor -- immerhin will man realistische Werte, und da sollte man schon in vivo messen. Ausserdem nutzt einen die reine Zeitmessung nicht viel, was interessiert sind eher die Maximalzeiten.
Meine Lösung hat den Nachteil, daß man einen Timer in linearem Betrieb braucht (ein Timer, der in PWM mit up-down betrieben wird, ist nicht anzapfbar bzw für Zeitmessung nutzlos), die Quelle anpacken muss und Resourcen für die Messung braucht. Da die ISRs recht komplex sind und geschachtelt sein können, stell ich mir -- wie du auch -- recht schwer vor, da mit einem Oszi was zu sehen (Quelle anpacken muss man da auch).
Dramatisch ist der Resourcenverbrauch nicht, ein Register für den Timerwert und einzweites für den Maximalwert. Neuen Timerwert lesen, Differenz bilden, mit Maximum vergleichen und ggf. neues Max speichern.
Falls der Timer während der Messung überläuft (abhängig von den Rahmenbedingungen, Applikation, ...) muss man das erkennen können und auch, wie oft er überläuft.
Extern geht vielleicht was mit einer Schaltung. Über einen Port lädt man einen C und erzeugt eine Rampe, die für kleine Zeiten linear ist. Die Spannung gibt man in einen Komparator, der mit dem bisherigen Maximalwert vergleicht und diesen als Spannung zur Verfügung stellt. Entladen des C auf fallende Flanke am Port. Machbar ist das bestimmt, aber ad hoc ne Schaltung nennen kann ich jetzt auch nicht.
Lesezeichen