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.
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.
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).
// 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; }