Auslesen eines Kamera Sensors - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Auslesen eines Kamera Sensors (/Thread-Auslesen-eines-Kamera-Sensors) |
Auslesen eines Kamera Sensors - eixi - 07.10.2013 12:28 Hallo liebe LVF-Mitgleider, ich habe die letzten 8 Wochen das LVF (und auch den Rest des www) durchkämmt und versucht mir genug über DAQmx beizubringen um mein Problem das eigtl. simpel ist zu lösen. Leider hat es nicht gereicht vlt hat ja hier jmd. die rettende Idee Ich möchte den Bildsensor einer Kamera auslesen, der Sensor hat 24x24 Pixel und unterscheidet nur Intensitätswerte, die er als Analogspannungspegel zu je einem 6er Block ausgibt und den ich dann mit dem NI USB-6341 Interface einlesen möchte. Um dem Chip zu sagen ich möchte jetzt den ersten 6er Block der ersten Zeile auslesen, muss ich zuerst den Frametrigger (FTRIG) und den Horizontaltrigger (HTRIG) für einen Clock cycle auf high setzen. Die genaue Timing Tabelle hab ich mal in ein Bild gemalt ( [attachment=46593])und hoffe das es so einigermaßen verständlich ist. Also da der Chip die Pixelwerte nur immer in 6er Blöcken ausspuckt braucht man dementsprechend 4 Blöcke á 6 für eine Zeile von 24 Pixeln und das dann eben mal 24 bei 24 Zeilen. Die Masterclock (ca. 500 Hz, variabel) , nach der sich hier alles zu richten hat erzeugt ebenfalls LabVIEW mithilfe eines Counters, den ich auf einem Pin ausgebe und so in den Chip einspeise. (VI angehängt)[attachment=46592] Bisher hatte ich versucht das Timing über Timed Loops zu realisieren (kläglicher Versuch im Anhang)[attachment=46594], hat allerdings nicht funktioniert und zudem habe ich auf der NI Page gelesen, das man Timed Loops bei USB Hardware vermeiden sollte, aufgrund der hohen Latenz von USB (10-100ms). Nun zu meiner Frage: Wie kann ich dieses Timing in LabView realisieren? Zusammenfassung meiner Konfiguration: - NI X-Series USB-6341 - LabVIEW 2012 - jede Menge Verwirrung bzgl. Timed Loops/Trigger/Event structures Vielen Vielen Dank schon im Vorraus an alle die sich jetz wegen mir den Kopf zerbrechen Gruß Eixi RE: Auslesen eines Kamera Sensors - macmarvin - 07.10.2013 17:32 Hallo Eixi, die HW generierte Clock ist ein guter Anfang. Ich würde versuchen die Analogwerte über _einen_ AI Task zu holen in dem 1. alle Kanäle drin sind. 2. der auf der fallenden Flanke der Clock getaktet eingelesen wird (3. insgesamt möglichst alles per DAQmx auf der Hardware machen zu lassen) Inwiefern deine HW das kann, da bin ich mir gerade nicht sicher... das muss ich selbst erst simulieren. Das mal als erste Ideen. RE: Auslesen eines Kamera Sensors - macmarvin - 07.10.2013 19:14 Hab mal etwas zusammen geschmissen. Da sind sicher noch Fehler drin, sollte aber grob nachvollziehen lassen was ich meinte. [attachment=46613] RE: Auslesen eines Kamera Sensors - eixi - 08.10.2013 06:16 Hallo macmarvin, Danke das du dir so viel Arbeit gemacht hast, ich versuch mich jetz mal in dein .vi einzulesen. Deine Beschreibung in Worten erschien mir logisch allerdings muss ich das jetz auch noch in Code umsetzen Kurze Frage vorab: War es Absicht, dass das "Get Terminal Name with Device Prefix.vi" nicht dabei war? Gruß Eixi RE: Auslesen eines Kamera Sensors - macmarvin - 08.10.2013 06:54 (08.10.2013 06:16 )eixi schrieb: Kurze Frage vorab: War es Absicht, dass das "Get Terminal Name with Device Prefix.vi" nicht dabei war? Das war Teil des NI Bespiels... deshalb hatte ich das billigend in Kauf genommen. Fehlt es dir denn? Kann schonmal vorkommen, das sich Beispiele ändern. RE: Auslesen eines Kamera Sensors - eixi - 08.10.2013 07:29 Habs gefunden danke, hat sich vlt nur der Pfad geändert, aber im Endeffekt war es im DAQmx Ordner bei den examples dabei, jetzt ist das .vi lauffähig. RE: Auslesen eines Kamera Sensors - eixi - 08.10.2013 12:28 Ich bin jetzt zuerst dein Beispiel und dann auch das zugrundeliegende Beispiel von NI (Correlated Dig Write With Counter Questions.vi) durchgegangen und schon mal vorsichtig begeistert es liegt schon sehr nahe an dem was ich brauche. Allerdings versteh ich manches noch nicht wozu es gut ist, ich hab das mal alles in ein bildchen gemalt ich hoffe so ist es am einfachsten zu verstehen wo ich noch hänge.[attachment=46618] - Der Counter der am Anfang generiert wird, stellt hier die Masterclock dar oder? - ich bekomme Error 200279 wenn ich versuche die Rate auf dem Frontpanel größer als 2000 zu setzen, ist das normal ?[attachment=46620] RE: Auslesen eines Kamera Sensors - macmarvin - 08.10.2013 14:25 Servus, ich geh's mal von links nach rechts durch... - Name vergeben mit NI_ChannelName ist nur damit es hübsch im Graphen ankommt und nicht wirklich wichtig. In der Hilfe sind diese Attributnamen dokumentiert. - Der Counter ist MCLK, richtig. - Die Outputchannels hast du auch richtig zugeordnet - Die Analogwerte würde ich mit der Falling Edge aufzeichnen. Da hat die Schaltung etwas mehr Zeit die Daten stabil zu haben. Bei näherem Hinsehen sollten wohl auch die Triggerleitungen auf falling rausgeschrieben werden. - Den Starttrigger des AI-Tasks würde ich inzwischen fast eher auf die Rising Edge von FTRIG legen. - Die 24 Samples beim AI-Read sind wohl falsch! (...das schiebe ich mal auf meine Erkältung) Da sollte wirklich eher eine 4 stehen, die 24 am modulo sollte aber passen. Das reshape array macht aus dem 4x6 2D-Array ein 24 1D-Array (Zeile). - Bei der Fehlermeldung könnte es reichen, beim Setzen der Sample Clock des AI-Tasks am Eingang "samples per channel" den Buffer größer zu wählen (z.b. 20k-30k) Mglw. wäre es auch sinnvoll, gleich 96 Samples x 6Chns zu lesen und das dann direkt in die 24x24 Form zu bringen. Viel Spass noch :-D RE: Auslesen eines Kamera Sensors - eixi - 09.10.2013 14:34 Servus, Danke für die ausführliche Antowrt =) mit Erkältung könnte ich derzeit auch dienen, aber wird schon wieder ^^ dir gute Besserung! Ich hab schon riesige Fortschritte gemacht dank deiner Hilfe aber ich muss dich noch n bisschen in Anspruch nehmen fürcht ich: - der Starttrigger des AI-Tasks liegt doch schon auf Rising Edge oder hab ich mich verschaut? - Das vergrößern des Buffers auf sogar 100k hat den Error 200279 noch nicht verschwinden lassen, gefühlt dauert es jetzt nur einfach länger bis er ihn mir wirft - ich finde deine Idee sehr gut, erst mal ein Frame komplett einzulesen und dann das Bild rauszuschreiben, das macht mir auch nachher das Abspeichern der Bilder einfacher, allerdings habe ich da noch das ein oder andere Problem zu lösen (zb. das einlesen in 6er Blöcken ist zwar richtig aber ein bisschen vereinfacht, eigtl liest er immer Pixel 0,4,8,12,16,20 und dann 1,5,9,13,17,21 usw. aus)[attachment=46636], ich versuch jetz erst mal mich da langsam ranzutasten, würd mich aber nochmal melden, bevor der nervenzusammenbruch droht Gruß Eixi |