10-13-2006 07:00 AM




10-13-2006 12:09 PM
Neat app and nice thorough walk-through. I think I mostly understand what you're after, but I suppose we'll see...
1. Based on the timing diagram of the signals, I'm not seeing the advantage of using both Start AND Stop triggers. Two alternate modifications that come to mind are:
A. Use falling edge of EOS as Stop trigger. Don't use a Start trigger. When calling AI Read, read with offset = -1024 and read spec = relative to trigger.
B. Use rising edge of ST as a Start trigger. Don't use a Stop trigger. Perform finite acquisition for 1024 samples.
2. Not sure what to expect with your current use of AI Read. Odds are good that the "no change" read spec will map back to a default of "current read mark" meaning the earliest acquired but unread data. I don't know how that interacts with a stop-triggered acquisition, but it seems plausible that it may contribute to your problem.
3. Don't recall what the upper numeric output from AI Read is -- is it "# Read" or "# available"? I'm assuming it's "# available" which would cause the loop to make more sense, but I'm used to seeing that output come out the bottom. Maybe it comes out the bottom of the so-called advanced terminal, AI Buffer Read? In any case, maybe you can make better sense of things if your loop always reads 0 samples (to give you visibility to the output values from AI Read), then terminate the loop based on those outputs. After the loop, Read your whole chunk of data at once.
Just a couple thoughts to get the ball rolling...
-Kevin P.
10-13-2006 01:22 PM
10-13-2006 04:31 PM
A. check for "acquisition state" to mean "finished." Haven't actually used this method, but it seems like it may work.B. check for a constant and non-zero value on "scan backlog." (It may start out at constant 0 for a while until the start trigger happens.) I've used this method several times to react to external scan clocks that might stop after an unknown # samples. Just throw a little 5-10 msec loop delay in there, and use a shift register to compare consecutive values.
11-02-2006 08:44 AM
11-02-2006 12:34 PM
11-02-2006 04:50 PM
11-03-2006 04:50 PM
Hello Shane,
I am working on the same kind of application as you. I am using a CCD sensor that works exactly the same way (start, clk, eos, trigger pulses) as your CMOS sensor. The CCD sensor is made of 532*64 pixels. The only difference with you is that I can choose between 2 acquisition modes: line binning (the pixels signal are first summed by columns before to be transfered, you then get 532 video signals) or area scanning (in that case you collect each individual pixel, here 532*64)
I am using a PCI-6281 (M serie) DAQ card, LabView 7.1 and NI-DAQmx. I wrotte a program that sends a clk signal, 2 consecutive start pulses (interval = integration time) and I trigger the acquisition on the 2nd start signal with a sampling rate = trigger signal.
It works fine (at least in the line binning mode) and I can collect the 532 pixels in the following conditions: clk frequency<100kHz and interval between start signal must be > 0.01 s. For my application I'd like to have shorter integration time. Any idea why I am limited to 0.01s? Is there a condition to consider between the integration time and the clk frequency?
For the acquisition, i used this example: http://digital.ni.com/public.nsf/websearch/878BD3188B1CD64686256F8C0060CCAB?OpenDocument
Also I didn't managed to use the eos signal as a start or stop trigger (this signal has negative polarity and I don't know if the digital lignes detects the edges?).
In area scanning mode, using the same code does not yield the expected result. I get the 34043 pixels signals but the integration time does not seem to be taken into account (i.e. increasing the interval between start signals does not necessarily translate into increasing the signal).
I would be happy to discuss all of this more in details with you at some point,
Regards
Polak,
11-05-2006 03:49 AM
11-06-2006 07:13 AM
Hello Shane,
Thanks for your reply.
I have to supply the following signals to the chip: "start", "clk", "eos" and "select". "select" is a digital signal that selects between line binning operation mode (all pixels corresponding to one column are added in the shift register before transfer) and scanning operation (each pixel is individually collected). You can find the timing chart here: http://sales.hamamatsu.com/assets/pdf/parts_C/C7040_C7041.pdf. Concerning the maximum clk frequency I can go up to 1MHz (in theory).
When "select"=1, the mode is line binning. When "select"=0, the mode is area scanning. In area scanning mode, I know when 1 line has been scanned because there is a certain number of blank pixels between each lines.
At the moment, the program I wrotte realises the following operation: it sends a continuous pulse train for the clk, when you push the "start button" it sends 2 start pulses separated by the integration time. The acquisition is made on the 2nd pulse. The acquisition is triggered on the 2nd start pulse, there is no stop trigger. Can't I send the 2nd start signal, as the chip is still reading the signals generated by the 1st start signal? In other words, do I have to wait that the chip was read out entirely on the 1st scan, before launching the 2nd start pulse? In that case, as you explained, I would have to increase the clk frequency. Other question I am asking myself: what does the video signal resulting from the 1st "start" pulse mean (indeed the interval between " start pulses" has not yet been taken into account). I suppose in this case the sensor integrates charges until the eos signal. I also suppose it allows to "clean" the sensor before the !st acquisition.
Can the signal lines detect "negative polarity" digital edges? Do I have to change something in the configuration of the digital line used to receive the eos signal, so that the edge is detected?
Thanks again for your help. It is much appreciated,
Polak
PS: did you solve your problems, by upgrading to NI-DAQmx ?