Triggering

Triggering (Y-Trigger)

Der Y-Trigger bestimmt, bei welchem Spannungswert der µCompozzel anfängt, die Spannungskurve zu zeichnen. Ist die Ausgabe am Ende des Displays angekommen, werden die weiteren Werte nich einfach fortlaufend von vorne an ausgegeben. Das Programm wird so lange warten, bis der Spannungswert den Wert des Triggers überschreitet (steigende Flanke) oder unterschreitet (fallende Flanke) und kann dann die neuen Werte auf dem Display ausgeben.

Y-Trigger

Triggering (X-Trigger)

Zusätzlich zum Spannungs-Trigger soll es als Wunsch-Feature auch einen X-Trigger geben, über den die Anzeige optisch nach links oder rechts verschoben werden kann. Der Verschiebungsbereich ist durch die Bildschirmbreite und die Periodizität des Eingangssignals begrenzt.

Es müssen in der Zeit, in der keine neuen Werte auf dem LCD angezeigt werden und auf das nächste Trigger-Ereignis gewartet wird, immer so viele Werte gecached werden, wie der X-Trigger vom linken Bildschirmrand entfernt ist. Die X-Position des Triggerpunkt bestimmt also die Speichermenge, die dafür reserviert werden muss.

Wird der Spannungswert des Y-Triggers passiert, müssen alle zwischengespeicherten Werte von X-Position 0 an bis zur X-Trigger-Position ausgegeben werden, sodass die dann folgenden Werte genau am Triggerpunkt wieder ohne Chaching weitergeschrieben werden können, bis der rechte Bildschirmrand erreicht ist.

Weiteres

Die Triggerfunktion wird nicht nur zum Festlegen des Startwertes für die Ausgabe verwendet, sondern weiterhin zum Berechnen der Periodenlänge und somit die Frequenz der angezeigten Kurve. Voraussetzung dafür ist natürlich ein periodisches Signal, das mit mindestens einer, besser mehrerer Periodenlängen auf das Display passt (siehe X-Zoom).

Es können nun die anzahl der Perioden und die Anzeigebreite der Perioden verwendet werden um die Frequenz auszurechnen (siehe Frequenzanzeige).

Codebeispiel: Triggerfunktion

// Trigger Buffer Variablen
volatile int trigBuf[2] = {1,1}; // letzter und aktueller Triggerwert
volatile int triggery= -1; // Y-Triggerlevel
volatile int periodEnd = -1; // X-Pixel der letzten getriggerten Position
volatile int periodCount = -1; // Anzahl der getriggerten Perioden
 
...
 
// Triggern des Startpunktes für die Ausgabe
trigBuf[0]=trigBuf[1];
trigBuf[1]=wert;		
 
if ( ((trigBuf[0]<=triggery) && (trigBuf[1]>triggery)) || falseTrigCnt > DISP_WIDTH*1.5) {
	if (falseTrigCnt < DISP_WIDTH*3) triggerFlag = 1;
	startcollect = 1;
	falseTrigCnt=0;
	valBufCnt=1;
	periodStart = valBufCnt; // Anfang der Periode zeigt auf X-Trigger
	valBuf[valBufCnt++] = wert;
	periodCount = 0;
} else
	falseTrigCnt++;
 
...
 
// Triggern für die Periodenhervorhebung und Frequenzberechnung
if ( (valBuf[valBufCnt-1]<=triggery) && (wert>triggery)) {
	if ( ++periodCount == 1 ) firstPeriodEnd = valBufCnt-1;
		periodEnd = valBufCnt-1;
}
authoring tool: counter
content: © 2012 Gerry Weißbach @ gammaproduction.de