Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich stehe mal wieder vor einem Problem, an dem ich mir schon seit zwei Woche die Zähne ausbeise.
Ich nehme ein Signal auf, detektiere die Peaks und möchte bei der detektion einen TTL-Trigger mit dem USB6009 senden. Im Moment habe ich eine Case-Schleife, die wenn eine Detektion erfolgt ein Low an den Output sendet und bei keinem Peak ein High sendet. Ich möchte das Low jedoch für eine längere Zeit beibehalten. Und zwar messe ich dazu die Frequenz der Peaks, ziehe davon einen bestimmten Wert ab und möchte das Signal über diesen Zeitraum auch Low haben, bevor es wieder auf High springt. Ich habe Zeitverzögerungen und zeitgesteuerte While-Schleifen schon ausprobiert, aber irgendwie komme ich auf keinen grünen Zweig.
Ich hoffe ihr könnt mir dabei helfen.
2 Dinge sind nicht gut in Deinem BD. Das Metronom solltest Du durch ein Delay ersetzen, weil sonst kein definierter Zeitraum unterbrochen wird. Ausserdem sind nur ganze ms zulässig, 0.15 ms subtrahieren bringt also nichts.
Welche Frequenzen willst Du denn haben mit den Peaks?
ich hab schon gemerkt, dass das mit dem Metronom nix wird...hab auch schon vieles anderes ausprobiert, aber es wird irgendwie nix.
Ich nehme ein Atemsignal auf und habe dadurch nur sehr kleine Frequenzen so um die 1-2Hz. Für das Zeitdelay berechne ich die Zeitabstände zwischen den Peaks und ziehe dann wie gesagt eine bestimmte Zeit ab. Da komme ich dann quasi nie auf eine ganze Zahl, was währscheinlich nicht so günstig wäre oder? Dieses express VI Time Delay hatte ich auch schon eingebaut, aber da habe ich dann wahrscheinlich das gleiche Problem mit der gebrochenen Zahl, denn das hat auch nicht funktioniert.
Ich habe so langsam keine Idee mehr, was ich noch tun könnte.
Leider komme ich gerade nicht an den Computer, auf dem mein Programm ist. Ich werde einen größeren Ausschnitt meines BD nachliefern!
Gruß,
Linsche
04.09.2012, 08:19 (Dieser Beitrag wurde zuletzt bearbeitet: 04.09.2012 08:20 von GerdW.)
Zitat:ich hab schon gemerkt, dass das mit dem Metronom nix wird...
Das "Metronom" selbst funktioniert, nur deine Programmierung drum herum nicht. Ist ein gewaltiger Unterschied...
Zitat:hab auch schon vieles anderes ausprobiert, aber es wird irgendwie nix.
Was denn alles?
Zitat:Dieses express VI Time Delay hatte ich auch schon eingebaut, aber da habe ich dann wahrscheinlich das gleiche Problem mit der gebrochenen Zahl, denn das hat auch nicht funktioniert.
Glaube ich nicht. Das ExpressVI arbeitet mit DBL-Werten...
- Die "einfachen" Timer-Funktionen erwarten Millisekunden-Werte als Integer, während du anscheinend in deinem VI in Sekunden rechnest. Klarer Fehler von "Nicht die Anleitung gelesen!"... Mit etwas Mathematik ließe sich dieses Problem aber beheben!
- Das ExpressVI erwartet Sekunden-Angaben als DBL. Dies würde zu deinem VI (so wie du es gezeigt hast) passen. Warum das bei dir nicht funktioniert: musst du mal selbst schauen...
P.S.:
Wenn man in einem FALSE-Case ein TRUE ausgibt, dann ist das ein NOT.
Zitat: Das "Metronom" selbst funktioniert, nur deine Programmierung drum herum nicht. Ist ein gewaltiger Unterschied...
Das war auch so gemeint, dass es in diesem Fall in meinem Programm nicht funktioniert.
Zitat:Was denn alles?
Ich habe es mit einer zeitgesteuerten While-Schleife Probiert, aber damit bin ich leider gar nicht zurecht gekommen. Dann habe ich ein Zeitdelay eingebaut und diese Tick Count funktion, bei der dann ein Boolean gesendet wird, wenn die Zeit abgelaufen ist habe ich auch probiert. Habe alles auch mit mehreren Einstellungen probiert, komme aber wie gesagt leider auf keinen so richtig grünen Zweig.
Mit der Zeit muss ich ganz ehrlich zugeben, dass hab ich bis jetzt noch gar nicht bemerkt...ich weiß, dass man dafür ms braucht, da hab ich wohl den Wald aber vor lauter Bäumen nicht gesehen
Ich probiere es noch einmal mit dem Delay, vielleicht habe ich ja doch irgendwas falsch gemacht.
ich kann mich BerndDasBrot nur anschließen. Zeige mal wenn möglich deinen Programmcode komplett. Vielleicht kann man mit einem anderen Design dessen eine andere (vielleicht sogar elegantere) Lösung deiner Problemstellung finden.
so hier nun mein BD. Aus dem SubVI kommt die Zeit zwischen den Peaks der Detektor gibt bei Peak eine 1 und sonst eine 0. Damit wollte ich das Zeitdelay für das TTL Signal steuern steuern.
Ich habe noch einmal die Delayfunktion eingebaut, aber wie gesagt komme ich da nicht so wirklich auf einen grünen Zweig.
Entschuldigt die Unordnung im VI, ich hoffe man sieht durch
Danke,
Linsche
04.09.2012, 11:09 (Dieser Beitrag wurde zuletzt bearbeitet: 04.09.2012 11:26 von Falk.)
Sage mal in welchem Pulslängen bewegen wir uns eigentlich? Wenige ms oder doch eher ein Faktor 10 oder 100 mehr? Ich frage aus dem Gründe da du ja sowieso ein "Wait" von 30ms in deiner Schleife hast.
Nachtrag: Habe mal ein kleines VI gebaut. Soll das Verhalten so aussehen?
Oh jee, dieses wait hab ich noch von ner Zeit drin, wo ich das Signal nur simuliert habe das kann natürlich weg, da das Programm auch ohne funktioniert.
Zu den Pulslängen: Ich nehme eine Respirationskurve auf und habe dann jenachdem 20-100 Atemzüge pro Minute. Das wären dann 0,6-3 pro Sekunde. Es geht also um sehr kleine Frequenzen.
Ja so in etwa soll das Verhalten aussehen. Ich sende quasi permanent ein high und möchte dann mit der Detektion des Peaks ein low senden, welches so lange wie möglich low bleibt bevor der nächste Peak gemessen wird. Ich möchte mit dem Low die komplette Expirationsphase ausnutzen. Siehe Bild: Peak ist die Inspiration und das Plateau ist die Expirationsphase.
Ich schau mal, ob ich das mit deinem VI umsetzen kann.
also ich habe jetzt mal umgesetzt was du mir geschickt hast. Allerdings stoße ich da auf ein mir bekanntest Problem...das Delay funktioniert, leider wird das ganze Programm dann langsamer und die Signalaufnahme kommt ins Stocken bzw. einfach alles kommt ins Stocken. Es ist bei meinem Programm aber sehr wichtig, dass die Signalverarbeitung so schnell wie möglich funktioniert.
Gibts vielleicht noch ne Idee, ohne dass das Programm ausgebremst wird?