D·M·I - UA Campus Repository

D·M·I - UA Campus Repository
INFORMATION TO USERS
This manuscript
has been reproduced from the microfilm. master. UMI
.
films the text directly from the original or copy submitted. Thus, some
thesis and dissertation copies are in typewriter face, while others may
be from any type of computer printer.
The quality of this reproduction is dependent upon the quality of the
copy submitted. Broken or indistinct print, colored or poor quality
illustrations and photographs, print bleedtbrough, substandard margins,
and improper alignment can adversely affect reproduction.
In the unlikely. event that the author did not send UMI a complete
manuscript and there are missing pages, these will be noted. Also, if
unauthorized copyright material had to be removed, a note will indicate
the deletion.
Oversize materials (e.g., maps, drawings, charts) are reproduced by
sectioning the original, beginning at the upper left-hand comer and
continuing from left to right in equal sections with small overlaps. Each
original is also photographed in one exposure and is included in
reduced form at the back of the book.
Photographs included in the original manuscript have been reproduced
xerographically in this copy. Higher quality 6" x 9" black and white
photographic prints are available for any photographs or illustrations
appearing in this copy for an additional charge. Contact UMI directly
to order.
D·M·I
University Microfilms International
A Bell & Howell InformatIon Company
300 North Zeeb Road. Ann Arbor. MI 48106-1346 USA
313/761-4700
800/521-0600
Order Number 9424937
High-speed infrared video system for detection of thermal
aliasing
Flath, Laurence Martin, Ph.D.
The University of Arizona, 1994
Copyright ©1994 by Flath, Laurence Martin. All rights reserved.
V·M·I
300 N. Zeeb ReI.
Ann Arbor. MI 48106
IDGH-SPEED INFRARED VIDEO SYSTEM
FOR DETECTION OF THERMAL ALIASING
by
Laurence Martin Flath
Copyright © Laurence Martin Flath 1994
A Dissertation Submitted to the Faculty of the
COMMITIEE ON OPTICAL SCIENCES (GRADUATE)
In Partial Fulfillment of the Requirements
For a Degree of
DOCTOR OF PIDLOSOPHY
In the Graduate College
THE UNIVERSITY OF ARIZONA
1994
2
THE UNIVERSITY OF ARIZONA
GRADUATE COLLEGE
As members of the Final Examination Committee, we certify that we have
read the dissertation prepared by__~L~a~u~r~e~n~c~e__M~._F_l~a_t_l_l___________________
entitled
High-speed Infrared Video System for Detection of
Thermal Aliasing
and recommend that it be accepted as fulfilling the dissertation
requirement for the Degree of
Doctor of Philosophy
Eustace Dereniak
Date
Lf/I'f/c;C{-
William L. Wolfe
Date
Steven She ard
t1Hr
Date
Date
Date
Final approval and acceptance of this dissertation is contingent upon
the candidate's submission of the final copy of the dissertation to the
Graduate College.
I hereby certify that I ~ave read this dissertation prepared under my
direction and recommend that it be accepted as fulfilling the dissertation
requirement.
Dissertation Director
3
STATEMENT BY AUTHOR
This dissertation has been submitted in partial fulfillment of requirements for an
advanced degree at The University of Arizona and is deposited in the University Library to
be made available to borrowers under rules of the Library.
Brief quotations from this dissertation are allowable without special permission,
provided that accurate acknowledgment of source is made. Requests for pennission for
extended quotation from or reproduction of this manuscript in whole or in part may be
granted by the copyright holder.
o
.: . . ~_,'_/:. . ~v: . . : ~:. ;.,. .:1.bz: :. ·.: . .-t. . : .t-. .:q=. !,. . ·~- -" : : :.: ~:=:. . := - - - ~ _
SIGNED: _ . ..:. /
4
ACKNOWLEDGMENTS
The author would like to acknowledge the following persons for their help and
support during his work and studies at the University of Arizona's Optical Sciences Center:
-- Dr. Eustace Dereniak as an excellent advisor and constant source of motivation. The
lack of micromanagement was much appreciated.
-- Dr. David Perry for always supplying accurate knowledge and advice while remaining
the most patient person imaginable.
-- Dr. Steven Shepard and the U.S. Army TACOM for sponsoring the camera system's
construction and implementation at Warren, MI.
-- Michael Descour for a very long list of things, but mostly for just being there to listen to
my thoughts and answer my sometimes stupid questions.
-- Dr. Thorsten Graeve for unlimited technical help and for full access to his tools.
-- Davis Lange for always offering another way to look at the situation.
-- Dr. Jack Gaskill for his advice on Fourier optics, the application of sampling, and for
always supporting the students fIrst.
-- Stephen Bell and John Doherty at the University of Arizona's Lunar Planetary Labs for
the design and construction of most of the camera's electronics.
-- Charles Burkhart for the mechanical design and construction of the camera system.
-- Dr. Gary Hughes at Sarnoff Research Center for supplying the PtSi CCD.
-- David Sass and Thomas Imirowicz at TACOM for their support, helpfulness, and
patience with my work habits.
-- John Garcia for his work on the fIrst generation variable integration time PtSi camera;
Mark Fink and Sam Lin for their initial work on current system.
-- ChongIm Kim for memos, reports, phone calls, faxes, packages, and all the other
difficult parts of administrating a project.
-- Eiji Yafuso for keeping me sane.
-- And of course, my parents Franz and Eugenia Flath, for providing me the mind and
tools to pursue all my whims and interests.
5
TABLE OF CONTENTS
LIST OF FIGURES ...............................................................................7
ABSTRACT ........................................................................................9
1.
INTRODUCTION ....................................................................... 10
2.
TEMPORAL ALIASING IN VIDEO SYSTEMS
13
2.1
Sampling Theory ............................................................... 14
2.2
Video Imaging of High-Speed Events ....................................... 20
2.2.1
High-Frequency Scene ............................................. 21
2.2.2
3.
TIIERMAL ALIASING ................................................................ 24
3.1
High-Speed Infrared Video Systems .............. , ............... , .......... 25
3.1.1
High Frame Rate IR Cameras ...................................... 25
3.1.2
Triggered High-Speed IR Cameras ............................... 27
3.2
Examples of Thermal Aliasing ................................................ 29
3.3
Detennination of Thermal Aliasing ........................................... 34
3.3.1
3.3.2
3.3.3
4.
Transient Scene ...................................................... 22
Theoretical Approach ...................................... '" ...... 34
Discrete Analysis .................................................... 38
Simulation ............................................................ 39
HIGH-SPEED INFRARED VIDEO CAMERA .................................... 45
4.1
System Configuration .......................................................... 45
4.1.1
Mechanical Layout .................................................. 46
4.1.2
Electronic Design .................................................... 48
Sarnoff 320 x 244 PtSi CCD ....................... 51
4.1.2.1
4.1.2.2
Cooled Dewar PC Board ........................... 54
4.1.2.3
Clock Generation ................. , .................. 54
CCD Biasing ......................................... 57
4.1.2.4
Video Preprocessing ............ , ................... 58
4.1.2.5
4.1.2.6
Digital Delay Generator .. '" .... , ................... 63
4.1.2.7
Video Digitization .................................... 66
System Operation ............................................................... 69
4.2
4.2.1
Expected Performance .............................................. 69
6
TABLE OF CONTENTS - Continued
4.2.2
4.2.3
5.
Actual Performance ................................................. 74
Using the System .................................................... 77
4.2.3.1
Camera Adjustments ................................ 78
4.2.3.2
Software .............................................. 78
4.2.3.3
PtSi Computer Program Guide .................... 80
CONCLUSION .......................................................................... 86
5.1
Results ........................................................................... 86
5.2
Future Work ..................................................................... 87
5.3
Final Note ....................................................................... 88
APPENDIX A:
Diagrams .................................................................. 89
A.1
Schematics ....................................................................... 89
A.2 Board Diagrams ................................................................ 108
A.2.1 CCD Bias Board .................................................... 108
A.2.2 Clock Regulator Board ............................................ 108
A.2.3 CCD ClockBoard .................................................. l09
A.2.4 Video Preprocessor Board .......................... '" ........... 109
A.2.5 Digital Delay Generator Board .................................... 110
A.2.6 Power Supply Enclosure .......................................... 110
A.3 Timing Diagrams .............................................................. 111
APPENDIX B:
Software Code .......................................................... 141
B.1
PTSI.EXE ...................................................................... 141
B.1.1 MENUSHEL.C .................................................... 141
B.1.2 PTSI_FCN_C ...................................................... 154
B.1.3 ADTRON.C ......................................................... 166
B.1.4 DT.C ................................................................. 173
B.1.5 PIO.C ................................................................ 182
B.2 Horizontal Clock PLD ........................................................ 184
B.3 Thermal Aliasing Simulation ................................................. 186
REFERENCES ................................................................................. 187
7
LIST OF FIGURES
Figure 2.1
Temporal sampling of 2-D information ........................................ 13
Figure 2.2
Sampling of continuous band-limited signal.. ................................. 16
Figure 2.3
Figure 2.4
Recovery of sampled band-limited signal ...................................... 17
Sampling of signal using narrow rect( t / 'r / functions instead of deltas .... 19
Figure 2.5
Frequency spectrum of a 35 Hz scene recorded with a 30 Hz camera...... 21
Figure 2.6
Using low frame rate camera to record repetitive transient events .......... 23
Figure 3.1
SBFP InSb camera and effect of rolling-mode integration ................... 26
Figure 3.2
Inframetrics camera modified for gated acquisition .................... " ..... 28
Figure 3.3
Gated imaging of a rotating tire ................................................. 28
Figure 3.4
Triggered vs. asynchronous acquisition of a xenon strobe tube ............ 29
Figure 3.5
Thermal aliasing for til't = 500 & 50 J.1s of chopper at 0,90, 180 Hz ..... 30
Figure 3.6
Thermal aliasing for tint =500 & 50 J.1s of chopper at 270, 360, 450 Hz .. 31
Figure 3.7
Thermal aliasing of oscillating transistor ............. , ......... '" ...... " ..... 32
Figure 3.8
Average intensity of transistor pulsed at 32 Hz ............................... 33
Figure 3.9
Oversampled signal with long and short integration times ................... 35
Figure 3.10 Undersampled signal with long and short integration times ................. 36
Figure 3.11
Determining number of spectral orders in the recovered signal ...... " ..... 37
Figure 3.12 Simulation of aliasing detennination with 16 data points ....... " ........... 40
Figure 3.13 Simulation of aliasing detennination with 64 data points ..... , .............. 41
Figure 3.14 Simulation of aliasing determination with 256 data points ................... 42
Figure 3.15 Simulation of aliasing detennination with 1024 data points ................. 43
Figure 4.1
Schematic layout of system ...................................................... 46
Figure 4.2
High-speed PtSi !RCCD camera system ....................................... 47
Figure 4.3
Front view of camera with lens guard .......................................... 48
Figure 4.4
Electronic configuration of system .............................................. 50
Figure 4.5
Schematic layout of Sarnoff PtSi IRCCD ...................................... 51
Figure 4.6
Band diagram of PtSi Schottky barrier diode detector........................ 52
Figure 4.7
320 x 244 PtSi IRCCD ........................................................... 53
Figure 4.8
Achieving integration time in a buried channel CCD ......................... 54
Figure 4.9
System master oscillator ........... '" ............. , ............................. 55
Figure 4.10 CCD horizontal output multiplexer clock timing .............................. 56
Figure 4.11
Typical clock-level regulator ..................................................... 56
8
LIST OF FIGURES - Continued
Figure 4.12 CCD clock switching and buffering ........ " .......................... " ...... 57
Figure 4.13 CCD three-level clock switching and buffering ............................... 58
Figure 4.14 CCD bias regulator ................ " ................. " " .. '" ................... 58
Figure 4.15 Video preprocessor block diagram ................ '" ...... '" .................. 59
Figure 4.16 Correlated double sample timing .................... " .... " ................ " .. 60
Figure 4.17 Video clamp and biasing ...... " ............. '" ........... " .................... 61
Figure 4.18 Video clamp and sample pulse generation ..................................... 61
•
Figure 4.19 Video gain and track/hold amplifier ............................................. 62
Figure 4.20 Video sync, blanking, and output amplifier ................................... 62
Figure 4.21 Register addressing in digital delay generator ................................. 64
Figure 4.22 Input stage of digital delay generator ... '" ............................. '" ..... 65
Figure 4.23
Output stage of digital delay generator ..................................... '" . 66
Figure 4.24 Digital-to-analog converter for computer control of video gain ........... , . 67
Figure 4.25 Piggyback board for digitization-mode switching of the DT2861 .......... 68
Figure 4.26 Schematic diagram of PtSi array optics ........................................ 69
Figure 4.27 Number of electrons collected vs. temperature ................................ 71
Figure 4.28
Signal contrast vs. temperature .................................................. 72
Figure 4.29 Noise equivalent temperature difference vs. temperature .................... 73
Figure 4.30 Noise equivalent temperature difference vs. temperature at tint = 33 ms ... 73
Figure 4.31 Soda can in infrared .............................................................. 75
Figure 4.32 Transistor pulsed at 100 Hz, 10% duty cycle ................................. 76
Figure 4.33 Xenon strobe tube flash in 3.5 - 4.2 J.lm range ................................ 77
Figure 4.34 User screen for ptsi. exe ....................................................... 79
9
ABSTRACT
The acquisition of images in video recording is inherently a sampling process. In
most current systems, a frame is recorded once every 1130 second (30 frames per second).
Scene events that occur faster than the Nyquist rate (one-half the sampling frequency, or 15
Hz, in this case) result in an effect called aliasing, which gives misleading information
about the scene's true temporal content. Decreasing the camera's integration time
(analogous to shutter speed) reduces blurring in the image, but the presence of aliasing is
solely determined by the camera's frame rate.
In visible systems, video aliasing is often accompanied by visual (spatial) cues in
the resulting imagery; e.g. wagon wheel rotating slowly and/or backward. But in the
infrared, where the scene is a temperature/emissivity map, drawing conclusions about what
is really happening is much more difficult. The term thermal aliasing is used to describe the
effect of temporal subsampling in infrared video. Fluctuations in an object's temperature
occurring at greater than the Nyquist rate give no visual cues, so there is no way to tell by
just looking at the scene whether its frequency distribution is real or aliased.
For this reason, some method of determining whether the IR camera's frame rate is
sufficiently high to prevent thermal aliasing is essential to provide valid scene information.
Using a triggerable infrared video camera with variable integration time, like the one
described in this thesis, allows the aliasing-status of an infrared image sequence to be
ascertained. Changing the integration time has the effect of shaping the recorded scene's
frequency spectrum; how these spectra relate to each other is different depending on
whether aliasing is occurring or not.
This thesis describes the theory of video sampling with its application to infrared
video systems, including thermal aliasing. Also, the design and use of a triggerable, short
integration time platinum silicide infrared video camera system is described.
10
1.
INTRODUCTION
While common in visible systems, high-speed infrared imaging is not widespread.
As the infrared is usually associated with thermal events and the long time constants of
normal bulk materials, the expectation is for most processes to be slow compared to
standard video frame rates. The need for viewing rapid events in the infrared, such as
semiconductor oscillations, short thermal time constant materials (e.g. thin films, metal
surfaces) and combustion events, has spurred development of systems able to resolve
temporally short events. Various techniques for achieving higher degrees of temporal
resolution range from small pixel-count arrays or specialized readout structures for running
at high frame rates, to scanning systems that build-up the image by triggering on repetitive
events. While these methods do work, they suffer from problems such as low-resolution
or slow image capture, and incompatibilities with standard video systems.
For such thermal imaging applications, working at the standard 30 frames per
second (fps) has its disadvantages. Events occurring at greater than the frame rate can
appear in the video as lower frequency occurrences, due to an effect called aliasing.
Imaging of events occurring at higher than the frame rate is easily modeled with sampling
theory, as the sequence of images recorded by a camera system is equivalent to discrete
sampling of the scene's time progression at regular intervals. Aliasing is a direct
consequence of sampling, and its effects are demonstrated by considering the Fourier
representation of the imagery on a pixel-by-pixel basis. This thesis mathematically
demonstrates these effects, provides a method for detecting the presence of temporal
aliasing in infrared video systems, and describes a video camera system capable of
recording high-speed events in the infrared.
The term thermal aliasing is coined to describe temporal aliasing in the infrared. As
most infrared cameras do not operate at high frame rates, some method of determining
whether or not a given scene will contain thermal aliased material would be useful.
Utilizing an asynchronous 30 fps infrared camera with variable integration time, or one that
allows triggered (synchronous) image acquisition, gives information about the existence of
temporal aliasing, and some'uegree of its extent in the given scene. Photon noise and other
forms of random fluctuations in the signal can severely affect the accuracy of such a test,
and some means of obtaining a high signal-to-noise ratio must be used. The point to note
is that unless some method (such as the one presented in the subsequent document) is used,
there is no way to recognize that the image corrupted.
11
Using a charge-coupled device (CCD) designed for standard video operation, the
infrared camera described in this thesis has the ability to capture entire frames for a given
integration period for both normal 30 fps and triggered imaging (at up to _ 10 fps), while
providing RS-170 compatible video output under both situations. The camera uses a
mature 320 x 244 platinum silicide (PtSi) device for imaging in the 3 - 5 J.1m range, but it is
clocked in such a way as to achieve operating modes not originally intended by its design
(RS-170 video, 30 fps, 33 ms integration time). The combined features of short
integration time and capture of images based on an external trigger signal make both high
frequency events (faster than the frame rate), as well as transient events (occurring at less
than the frame rate) visible to the camera. Flexibility to reprogram the PC-based camera
allows future modifications to the system without alterations to the hardware.
Also included is a description of the setup, electronic design, and operation of this
high-speed PtSi infrared CCD (IRCCD) camera system. A liquid nitrogen dewar houses
the CCD and a cold filter wheel. Two electronic card cages couple to the dewar and a
80486-based personal computer that controls the system. A mobile cart supports the entire
assemblage of dewar, electronics, computer, monitors, and power supply.
Imaging occurs through a germanium/silicon F/1.6 lens. Objects from 10 cm to
infinity are viewed in-focus. A filter wheel internal to the dewar with an external rotation
control houses six filters for imaging in specific wavelength bands.
The camera uses the David Sarnoff 320 (horizontal) x 244 (vertical) Schottky
barrier diode (SBD) array to image in the wavelength range of 3 - 5 J.1m. This interlinetransfer CCD was designed for normal interlaced, 30 fps operation found in U.S.
television systems. A technique that takes advantage of the chip's buried-channel structure
permits imaging with integration times much less than the standard 33 ms (down to 10 J.1s).
Timing for the CCD is quickly reprogrammed using a data generator board set in the '486,
allowing variable integration times in the range of 10 J.1s - 1 ms, as well as the normal 33
ms. A second mode of operation records images one frame at a time in response to an
external trigger signal. Used in conjunction with a short integration time and a digital delay
generator, imaging of rapid and transient events is possible.
For simple real-time image processing, the system includes a frame grabber I
processor board set in the '486. Processes such as background subtraction and frame
averaging are easily accomplished with the digitized image data.
This thesis describes the basic theory concerning the sampling properties of infrared
video imaging, and the design and basic operation of an experimental high-speed PtSi
12
camera system. It is also the intent that this document be the reference for use and
maintenance of the stated system.
13
2.
TEMPORAL ALIASING IN VIDEO SYSTEMS
Two-dimensional imaging of the temporal progression of physical systems under
current technologies is inherently a digital process. The motion picture based on film
records an image during a finite period of time, and then the fllm is advanced for the next
exposure. Thus for fIlm, the motion of imagery is recorded in discrete steps limited by the
frame rate. Scanning video camera tubes are somewhat more analog in nature, but the time
evolution of a given pixel in the scene is still limited to frame to frame changes. Both film
and image tubes can be shuttered to reduce the exposure time below the frame time tframe.
This resultant period is called the integration time tint; refer to Figure 2.1.
Solid-state imaging devices are much more flexible by having many possible
readout structures. While it is true that every detector on such a device is generally analog
in nature, the sheer number of pixels on most arrays prevents the simultaneous access of
the detectors off-chip. Thus, sequential readout of the pixels induces the same type of
discrete temporal sampling as mentioned above for fllm and image tubes. Parallel readouts
are a way to decrease the frame time, but the sub-arrays each output supports have this
same problem of temporally multiplexing their respective image data. Nevertheless, the
union of a detector array and an electronic readout structure offers great possibilities for
improved image quality and processing on-chip, thus making the solid-state detector array
the present imager of choice.
~'
Y
(a)
t
(b)
Figure 2.1. Temporal sampling of 2-D information. (a) Continuous data,
and (b) sampled data.
14
The temporal sampling of imagery has its drawbacks. Artifacts in an image, called
temporal aliasing, can occur if the events recorded occur in time spans shorter than the
frame time. This sampling of image data is exactly the same as that of converting an analog
signal such as an audio tape recording to a digital medium like the compact disc, and
suffers from the same problems of such a conversion. These image artifacts should not be
confused with spatial aliasing, which is due to sampling across the area of the imaging
device. To understand why these problems can occur, a brief review of sampling theory is
necessary.
2.1
Sampling Theory
Manipulating digital data, especially in today's world of compact and powerful
computers, is preferable to continuous, analog data. The problem with this, is that the real
macroscopic world is inherently analog, making analog to digital conversion an
increasingly common practice in all areas of data acquisition. This conversion process
ideally would collect all the information necessary to reconstruct the original analog signal
through some digital-to-analog conversion. To see how this reconstruction is possible, and
the effects of not collecting enough information, a mathematical basis is required.
Take the analog signal J we wish to convert as a function of time, i.e. J(t). This
signal has a Fourier frequency spectrum F(v) given by (Gaskill):
(2.1)
Alternately, the function J(t) can be expressed by the inverse relation
f(t) =
L-
F(v)e+)"" dv.
(2.2)
A key property of functions is that the spectrum of a time-domain limited signal is infinite
in extent, and a signal with a band-limited frequency spectrum is of infinite extent in the
time domain. This limitation of extent in either domain is mathematically called compact
support, and the preceding statement implies that a signal with compact support in one
15
domain does not have this property in the other (Barrett and Swindell). For the purposes
of sampling theory though, it is advantageous to have a signal that has compact support in
both domains; while theoretically impossible, for many real-world signals this situation
can be approximated to a great degree, especially by taking many samples of the signal.
Real-world system responses falloff for increasingly high frequencies, thus implying
compact support in the frequency domain (to some approximation).
The method most used for sampling is multiplication of the signal by a scaled comb
function, given by
is(t) =f(t)·
~comb(~)= Lf(t).
S(t-nT) ,
(2.3)
n=-oa
where is (t) is the resultant sampled signal, and T is the period of the delta functions.
Taking the Fourier transform of the sampled signal gives
Fs (v) = F(v)
* comb (vT)
n=-oo
(2.4)
n=-oo
That is, the frequency spectrum of the sampled function is an infinite sum of shifted
versions of the original signal's spectrum.
Figure 2.2 graphically depicts the sampling operation. Notice that for the particular
band-limited function with maximum frequency Vnuu and a given sampling rate (lIT), the
shifted frequency spectra mayor may not overlap. Figures 2.2 (b) - (d) show the three
possible situations for the same signal spectrum. The third case (d) represents a condition
called aliasing, where frequencies of adjacent spectra mix. The second case (c), where the
positive extent of one spectra just meets the negative extent of the next, demonstrates the
Nyquist condition, for which the sampling rate is just high enough to prevent overlap of
adjacent spectra. In terms of the parameters given, the Nyquist criterion is stated:
VNyqllist
=~ = 2
.I.. N~'qllist
V mar •
(2.5)
16
F(v)
J(t)
t
v
(a)
!set)
F's(v)
v
(b)
!set)
F's(v)
v
t
(c)
!set)
F's(v)
v
t
liT
T
(d)
Figure 2.2. Sampling of a continuous band-limited signal. (a)J(t) and its
Fourier spectrum F(v). Idealized sampling ofJ(t) leads to three possible
situations: (b) oversampling, (c) sampling at Nyquist rate (i.e. liTNyquist =
2 vmax), and (d) undersampling.
17
Recovery of the original spectrum is easily accomplished with non-overlapping spectra by a
low pass operation. lfthe Nyquist criterion is met, a rect-function low pass filter of width
equal to the sampling rate (twice the maximum frequency in the signal) will result in an
exact duplicate of the original signal's spectrum (Figure 2.3). Thus, ideal Nyquist-rate
sampling permits a perfect recovery of band-limited signals.
Fs(v)
v
(a)
Fs(v)
(b)
Figure 2.3. Recovery of sampled band-limited signal. (a) At Nyquist rate
with rect(v TNyq) low pass filter, and (b) oversampled and then recovered
with more realistic low pass filter.
In the time domain, the result of this low pass filtering leads to a different
interpretation of sampling. First, the recovered signal has the spectrum
Fr(v)
= fF(v)
= Fs(v) . rect(vT)
= [F(v)
* comb(vT)]
And taking the inverse Fourier transform gives
. rect(vT).
(2.6)
18
fr(t) =
~f(t)
=
j,2
[f(t) . comb(i)]
* sinc(i)
(2.7)
+-
T f(t)
[ f( t) . sine(~) ]
=TL
* OCt -
nT)
+-
= T Lf(nT) . sine(t TnT) ,
(2.8)
11=-00
or
+-
f(t)
=L
f(nT) . Sine(t -TnT).
(2.9)
n=-oo
The result ofEq. (2.9) is called the Whittaker-Shannon sampling theorem (Zayed), and
states that a function may be decomposed into an infinite set of sinc functions.
Reconstruction of a sampled signal is equivalent to summing sinc functions which are
weighted by the original values of the sample points.
So far, idealized sampling (comb function based) has been presented. Delta
functions are impossible to create in the real world, and are usually approximated with
narrow rectangle functions. The finite width of the sample pulses (with the form
reet( t/"C)I7: has the effect of changing the frequency spectrum offs( t) in the following
manner:
f;(t) = f(t) .
=
~L
~7: [ eomb(i) * reet(~) ]
[f(t)
* reet(~)]
. OCt - nT) .
(2.10)
n=-oo
F;(v) =F(v)
=
*[ eomb(vT)
~L
. sine (v 7:) ]
[F(v) . sine (v 7:) ]
(2.11)
* o(v - ~)
n=-oo
-
~L
n=-oo
F(V -
~).
Sinc(n;).
(2.12)
19
Eq. 2.11 states that the set of frequency spectra in the sampled signal are each scaled by a
sinc function determined by the width 1: of the sampling rect function (see Figure 2.4).
This tends to reduce the amplitude of the higher frequency components, and for functions
whose frequency extent is beyond the flrst zero of the sinc envelope, phase reversal.
sine ( v 'ra)IT
............~::::::.-::::::: ............
v
liT
(a)
-._-
...-
........
...
I
........ ..........
I
"
............. .........
.
........ . ..........
•
I'
........ . ....
liT v,nax
(b)
Figure 2.4. Sampling of signal using narrow reet ( t I 'r) functions instead
of deltas. For short integration times 'ra (a), the sinc envelope barely
affects F(v). A longer 'rb (b) smoothes the signal more signiflcantly,
causing attenuation of higher frequencies in the signal, and even phase
reversal for frequencies (n + 1) I 'rb > I v I > (n + 1) I 'rb , for n even. (b)
represents the limiting case of integration time equal to the sampling period.
Applying the low pass fllter T reet( v T) to extract the n
= 0 order spectrum:
F;(v) =F;(v) . Treet(vT)
= reet(vT) .
E F'(v -
~).
sine
(n;)
n=-oo
=F'(v) .
(2.13)
20
Complete recovery of the convolved signal I'(t) = J(t)
* rect(th) is possible if
the spectra are separated (Nyquist criterion) and the sampling rect function is not too wide
(i.e. the main lobe of the sine function in the frequency domain isn't narrower than a
spectrum width; this allows an inverse filter to be applied to the resulting sinc-enveloped
spectrum). The closer the zero ofthe sinc is to Vmax, the more difficult it is to accurately
reconstruct the signal, as the inverse filter must supply a gain of [1/ (small number)] (large number) at this point. Note that the signal recovered in Eq. 3.13 is not the original
signal, rather J( t) smoothed by the sampling window; any high frequency information
over 111: is effectively lost (at least significantly reduced in amplitude and possibly phase
reversed). Thus it is important to keep 'f as small as possible to retain an accurate
representation ofJ( t). The problem with this in imaging systems is that for short
integration times tint 'f, less light is collected, reducing the signal-to-noise ratio (SNR).
=
Therefore a trade-off must be made between temporal sharpness and image brightness
level.
2.2
Video Imaging of High-Speed Events
Video recording of imagery is innately a sampling process. The scene changes over
time and is either stored and/or played back as a sequence of two-dimensional images
(Figure 2.1). The frequency spectrum of the recorded image set consists of an infinite
series of spectra of the original signal (refer to Figure 2.2) and is low pass filtered by the
display. In a cathode ray tube (CRT), this low pass filtering occurs in the phosphors; the
electron beam resides on a pixel for much less than a microsecond, but the phosphor then
luminesces from 20 J.1s to a few milliseconds, depending on the particular material (Benson
and Whitaker). This persistence is long enough to view the CRT, but short enough to
avoid time smearing of the moving image; the net effect is to low pass the temporal
spectrum of the image sequence. Liquid crystal displays (LCOs) have a persistence usually
much longer than the frame rate of video (as evident by their huge image lag). Active
matrix liquid crystal display (AMLCO) technology has reduced this time significantly, but it
is still on the order milliseconds (Morozumi). Thus LCOs, as well as many other display
systems, also have a built-in low pass function. Note that for the purposes ofthis analysis,
psycho-physical contributions of the human observer are not included.
21
2.2.1 High-Frequency Scene
The reduction in the temporal bandwidth of the display singles-out the spectral
energy below the low pass function's cutoff (Figure 2.3), but says nothing of what that
energy represents. In the case of high-speed imagery, temporal aliasing will occur if the
scene changes faster than the camera's frame rate. As an example specific to video,
suppose the object being imaged fluctuates (say a light bulb's intensity) at a rate of 35 Hz,
with the camera recording at 30 frames per second (fps) and a very small integration time.
In the frequency domain (see Figure 2.5), the low sampling rate leaves the negative 35 Hz
of the first-order spectrum at 5 Hz. After low pass filtering with a frequency cut-off at onehalf of the frame rate (Nyquist), the light bulb appears to be flashing at 5 Hz! The problem
with this is that there is no way to differentiate between this event and something that is
actually occurring at 5 Hz. This aliasing is exactly the same as the "wagon-wheel effect"
seen in motion pictures, where a rapidly rotating w, tgon wheel appears to be spinning very
slowly, or even stopped, because the wheel's image is changing near the 24 fps of the
movie film.
F.r(v)
-1 -3
-2 -4
+2
+1 -1
-2
0
-.
r--
+3 +1
0
+4 +2
-·--1
v (Hz)
I
I
·90
I
I
I
I
I
·60
I
I
I
I
I
I
·30
I
I
I
I
o
I
I
I
I
I
I
30
I
I
I
I
60
I
I
I
I
I
I
90
Figure 2.5. Frequency spectrum of a 35 Hz scene recorded with a 30 Hz
camera. Numbers above spectra show the order spectrum from which the
peak originates, and the dashed line represents the low pass function used
for reconstruction, leaving aliased frequency of 5 Hz.
The addition of a longer integration time to the problem can reduce the visible effect
of temporal aliasing. The convolution of the sampling function with the scene is essentially
a pre-filtering low pass, because the higher order spectra that mix with the zero order
spectrum to show up as aliasing are scaled down significantly due to the sinc envelope. In
the limit of integration time equal to the frame time (Figure 2.4b), the zeros of the sine
22
envelopes pass through the sampling frequencies. Note that if the signal has frequency
components beyond one-half the frame rate, aliasing occurs (Nyquist criterion), and if the
signal has frequencies beyond the sampling rate (or equivalently llr, in this case), phase
reversed spectra get aliased into the recovered signal. The point here is that a trade-off
must be made between the smoothing ability of long integration times (to reduce the effects
of aliased high frequencies) and frame rate. A high frame rate is the only fool-proof
method to thwart aliasing.
2.2.2 Transient Scene
Another situation arises when the scene recorded by the camera system is transient
in nature, i.e. only a few samples contain information of relevance. One method is to use a
high frame rate camera, which leads to the analysis of the previous section, but such
systems are inherently expensive and may not even exist for a given application. If the
event is transient, yet occurs many times, it is possible to build up an image sequence
representative of a complete event by taking one (or more) sample(s) per event at the
camera's maximum rate. Of course, if the event isn't exactly the same at each occurrence,
the recorded sequence will not be exactly correct either. This process is demonstrated in
Figure 2.7. Samples also must obey the Nyquist criterion to prevent aliasing, so the delay
of taking a sample from one event to the next (time between samples minus the time
between events) less than or equal to the 1I( 2 vmax).
This method of sampling is similar to interlaced sampling (Bracewell), where two
(or more) low frequency comb functions, slightly delayed from each other, sample the
function to gain information about frequencies higher than the sample rate, but using
multiple comb functions instead of one gains more sampling information.
A finite integration time adds the usual time-smoothing to the sample images. The
integration time should be less than Tdelay (Figure 2.7) unless oversampling is utilized. For
high effective frame rates (= 1 IT delay), the integration time must be much smaller than the
frame time, for the reasons given at the end of section 2.1.
23
J(t)
t
r-I'avent~
r-I'sample ~
Tdelay~r(a)
!set)
t
~
r- I'ajf =Tdelay
(b)
Figure 2.6. Using low frame rate camera to record repetitive transient
events. In (a) J( t) is sampled once per event, with a delay equal to the
effective sampling rate shown in (b). Tejf must meet the Nyquist criterion
for the event's spectrum to prevent aliasing.
24
3.
THERMAL ALIASING
The previous section highlighted some of the problems involved with sampling
images in the time domain. It paid no particular attention to how the image was obtained,
or what the image represented. For obvious reasons, the visible part of the electromagnetic
spectrum (0.4 J.lm to 0.7 J.lm) was the fIrst area of application for video systems. The
revolution in silicon semiconductor processing combined with silicon detectors' high
efficiency in the visible have made high performance monolithic imaging devices
inexpensive, rugged, and widely available (Rose and Weimer). Implementation of infrared
detectors onto silicon substrates followed the visible devices closely, but problems such as
low quantum efficiency (Capone, et ai., 1979), spatial nonuniformity (Scribner, et aI.,
1991), and device cooling (Wood and Foss) have severely hampered the technology,
making infrared video cameras large and expensive.
Due to the material properties of most objects imaged by infrared video systems,
high speed events are usually not expected (at least in spatially static scenes). In fact, in
common practice, OC temperatures are assigned to objects, and any rapid fluctuations are
perceived as noise and averaging is used to remove such changes in the measured
temperature. Thus, the motivation for a high-speed infrared imaging system was not nearly
that of visible systems (Kosonocky, 1992). Also preventing high-speed IR imaging are the
low quantum effIciencies of arrayed detectors like platinum silicide (PtSi), which usually
force long integration times to capture enough photons for a decent signal to noise ratio.
While visible high-speed cameras have existed for many years, it is only until
recently that IR video systems have become commercially available. Section 4 describes a
laboratory camera based on a normal video-rate PtSi ceo. Applications of such cameras
now include IR emissions of semiconductors, combustion engine gas flow (Shepard, et
al.), nondestructive testing of materials (Thomas, et al.), and many areas of science studied
only previously in the visible.
The video imaging of objects in the infrared inherits the same problems of sampling
that occur in visible camera systems. As almost all current infrared video systems operate
at standard television rates (30 fps), imaging of high-speed events leads to the problem of
temporal aliasing. For the purposes here, this effect of temporally undersampling an
infrared scene is called thermal aliasing. In particular, thermal aliasing describes an effect
which occurs even when no motion is occurring in the scene; i.e. independent of possible
spatial sampling problems. The basis for its existence is exactly that presented in section
25
2.1; the reason it is so important is that there is no obvious way to detect the presence of
thermal aliasing, even though it undermines the validity of the collected data! In the visible,
geometric cues can aid in detecting the presence of temporal aliasing (e.g. wagon-wheel
effect). But in the IR, where the image represents the temperature/emissivity distribution
of the scene, such assumptions about the nature of imagery are not possible. Thus, a highspeed camera is required to determine the presence of aliasing.
3.1
High-Speed Infrared Video Systems
Various techniques for recording sequences of infrared imagery have been
developed, mostly as extensions of current visible camera technologies. The ideal, of
course, is to have a high resolution, high frame rate camera with very short integration
times, but the current status of this camera, while much improved, is still not a common
visible, let alone infrared, product (Graeve). More common are cameras based on the U.S.
NTSC format, which operates at approximately 30 fps (2: 1 interlaced, 60 fields per
second) or the similar European PAL and SECAM 25 fps systems. While limited in
resolution and bandwidth, developing a camera system based on one of these standards
allows the use of inexpensive and/or widely available recording and processing equipment.
Custom hardware that translates the incompatible format of a non-standard imager to one of
these formats is advantageous for simple data storage and retrieval.
3.1.1 High Frame Rate IR Cameras
From section 3.1 it is evident that the preferred method of sampling a high
frequency signal is to sample it as often as possible (at least above the Nyquist rate) to
permit a good reconstruction of the signal. Since any high frame rate system operates in an
incompatible way to current television systems, recording of the imagery almost always
involves custom hardware. To also have a high-resolution image involves the transfer of
huge amounts of information from the imager to the recording system, making the task
even more formidable (e.g. 10002 pixels x 8 bits/pixel x 1000 fps
= 8 Gb/sec).
Smaller
array sizes and multiple outputs can reduce the required bandwidth of system components,
and these methods are used in some high-speed infrared camera systems (Wilson, et al.).
A high frame rate does not necessarily guarantee the temporal freezing of an image
though, as demonstrated in Figure 3.1; the resultant image is highly dependent on the
26
readout architecture of the imaging device. CCO-based readouts have the advantage of
simultaneous integration over a large part of the device. Frame-transfer CCDs operate by
integrating photocharge, followed by a rapid readout of the entire device's image data.
Interline-transfer CCOs read out the collected charge of odd rows while integrating on
even-rowed detector sites, after which the even rows are read out while integrating on the
odd-rowed sites. Both of these CCO structures integrate over a large portion of devices'
detectors simultaneously, ensuring that the value obtained at one pixel was obtained over
the same time-frame as that of a distant pixel. The metal-oxide semiconductor (MOS)
multiplexer readout architecture employs a small amplifier circuit at each detector and is
read out by addressing the row and column for that particular site. The consecutive
addressing of detectors on such a device leads to "rolling-mode integration" and associated
aliasing effects when imaging rapidly changing scenes. The same aliasing effects seen on
xy-addressed multiplexers are evident on all scanning systems, including image tubes,
unless an external shuttering mechanism is used. Therefore, for aliasing not to occur in
such systems, the frame rate must be significantly higher than any scene changes,
independent of the integration time.
(a)
(b)
Figure 3.1. SBFP InSb camera and effect of rolling-mode integration. (a)
Santa Barbara Focal Plane InSb camera, and (b) an image of a 1170 r.p.m.
rotating five-blade chopper wheel imaged at a frame rate of 48.2 fps.
Understanding thermal aliasing in imagery acquired with high frame rate IR
cameras is straightforward; if it occurs, it is purely due to the scene changing faster than
the twice the frame rate (refer to section 2.2.1). Individual frames are temporally blurred if
the integration time is too long, but it also reduces the effects of aliasing (high frequencies
are filtered-out during acquisition).
27
3.1.2 Triggered High-Speed IR Cameras
While high frame rate infrared cameras represent the ideal in terms of temporal
resolution, they usually must make a tradeoff with spatial resolution. In terms of both cost
and complexity, it is generally more feasible to synchronize a low frame rate camera to
external events and to build up a sequence representing the time evolution of the event (see
Sect. 2.2.2 on interlaced sampling). For such a system to work, the scene must be
repetitive in time with respect to the trigger signal. An analogy is the analog oscilloscope,
which must refresh the phosphor in the same positions on each sweep for the screen to
convey the trace information.
Various adaptations of turnkey systems allow triggered acquisition of transient ancI
repetitive events (Shepard, et al.), depending on the technology used. For scanning
systems, it is known that the triggering event will occur sometime during the scanning
period. So when the event does occur, the pixel presently being scanned is recorded in the
final image. As the camera frame rate is asynchronous with the trigger, the image will
slowly build up as events occur during the scan. Depending on the temporal stability of the
event, the compiled image can be the same as an image from the occurrence of a single
event. Using a short integration time permits a snap-shot of the event that otherwise was
unrecordable.
A variation to triggered pixel acquisition uses the smoothing properties of the
sampling window, namely the integration time. Since the data on a given detector is the
convolution of the integration window with the image's temporal signal, it makes little
sense to only record one pixel if the integration time is longer than the scanning time of the
pixel. For example, if the integration time is 1 ms, the line time is 63.5 J.1s, and there are
320 pixels across the line, a pixel represents a scanning time of approximately 200 ns (not
including horizontal blanking time). Therefore, over the integration time of 1 ms, 5000
pixels are scanned; it would be a waste to only record the value of one pixel for a trigger
event. Instead, the values of the ± 2500 pixels about the trigger point should be recorded,
thus making the accumulation of the final image much faster. Figure 3.2 shows the
configuration of a modified Inframetrics scanning HeCdTe infrared camera. When a
trigger event occurs, the video switch is closed for a period of time equivalent to the final
image's integration window (not to be confused with the integration time of the system's
single detector, which is much shorter). The buildup of an image using this system is
shown in Figure 3.3.
28
Gate
Video o-t:-Oo-;
Input
Frame
Grabber
~"'--.L--'
Computer
Trigger
Circuit
(a)
Trigger
Input
(b)
Figure 3.2 Inframetrics camera modified for gated acquisition. (a) with
single HgCdTe detector for 30 fps imaging in the 8 Ilm to 12 Ilm band.
Gating the video (b) during a trigger event (with a window width
corresponding to the integration time) in coordination with a frame grabber
permits the acquisition of the image relative to that external event.
--.
'I
Of
(a)
(b)
Figure 3.3 Gated imaging of a rotating tire. Spinning at 4.167 Hz
(equivalent of 50 m.p.h.), the modified Inframetrics system builds up image
(a) by collecting an integration time's worth of pixels at each trigger event.
The complete image in (b) is the result of 250 trigger events; multiple
trigger events to the same image area are averaged (Shepard, et al.).
29
A method to obtain a complete image per trigger event is to modify the clocking of a
CCD to only read out data after that event has occurred. Assuming some form of electronic
shuttering is also occurring (short integration time), the output image will be totally in sync
with the external event. The resulting image also is completely independent of the
periodicity of the trigger; in fact, no repetitive nature is required in the signal at all since the
entire image is acquired at once. Spatial aliasing effects, due to a trigger harmonically
related to the camera's frame rate, also are nonexistent. Figure 3.4 demonstrates the
triggering abilities of a PtSi CCD camera clocked in such a way that permits external
triggering of the frame capture (see section 4 for more details on its operation). Of course,
some problems with this method also are present; slowly capturing images on a CCD
meant for 30 fps can lead to blooming and noise problems, since the chip was designed to
be swept clean on a regular basis.
(a)
(b)
(c)
Figure 3.4. Triggered vs. asynchronous acquisition of a xenon strobe tube.
Triggered infrared imaging of plasma with tint = 10 Ils in (a) and recorded with an
increased delay with respect to the ignition point in (b). In normal asynchronous,
30 fpS, tint = 33 ms mode (c), only the warm quartz tube is visible.
3.2
Examples of Thermal Aliasing
So far, the effect of thermal aliasing has been described without any real-world
examples. Determining whether or not a particular image is thermally aliased is not
obvious; in fact, the key difficulty is detecting the presence of aliasing when the scene is
30
Figure 3.5. Thermal aliasing for tint = 500 & 50 Ils of chopper at 0,90, 180 Hz.
31
Figure 3.6. Thermal aliasing for tint = 500 & 50 Ils of chopper at 270, 360, 450 Hz.
32
thermally dynamic. An entire sequence of images generally is required to look for beat
frequencies, and there is no way to tell Gust by observation) if those oscillations are real or
aliased harmonics. Checking for the existence of aliasing requires knowledge of the
thermal source's power spectrum and the camera's frame rate (a priori information).
Figures 3.1 (b) and 3.3 (a) show how in IR scanning systems aliasing in spatially
dynamic scenes is manifested by spatial artifacts. In a full-frame IR imagers or the imaging
of thermally dynamic scenes, such effects in are never present, so a temporal analysis of
the image sequence must be made. Figures 3.5 and 3.6 demonstrate thermal aliasing using
the full-frame infrared imager described in section 4. A chopper is rotating at various blade
frequencies that are harmonics of the frame rate. From sampling theory, a harmonic of the
frame rate is recovered after low pass fIltering as DC (0 Hz), thus the chopper appears
stationary. The images are for two integration times, namely 500 J.Ls and 50 J.Ls, whicli is
why the second column is significantly darker than the first (fewer photons collected).
Also notice that as the chopper rotation rate is increased in the tint
=500 J.Ls images, the
blade edges become progressively more blurred, whereas the motion is essentially frozen
for tint = 50 J.ls at all the rotation rates presented.
Figure 3.7 demonstrates the less obvious (and more critical, because it cannot be
detected by any other means) case of thermal aliasing; there are no moving objects to tipoff the fact that a frequency higher than half the frame rate is present. A power transistor
Figure 3.7. Thermal aliasing of oscillating transistor. Power transistor pulsed at
32 Hz, 10 % duty cycle (leMAX = 6 A), as viewed by a free-running, 30 fps infrared
camera in the 3.5 J.lm to 4.2 J.Lm band with tint = I ms. The transistor is the central
square; the two round objects are insulators for the base and emitter leads, which
have higher emissivity than the aluminum heat sink. Each frame (starting from top
left, toward right, then bottom left to right) is 33 ms from the previous, meaning the
above sequence of 14 frames is 0.467 seconds in duration. Thermal aliasing occurs
with a beat of 2 Hz, so almost one cycle of this beat is shown.
33
76.0
tn
::l
Q
72.0
<C
CD
-ca
~
68.0
>
s::
ca
CD
0
64.0
:E
0
0
0
60.0
0
5
10
Video Frame
15
Figure 3.8. Average intensity of transistor pulsed at 32 Hz. Values of
points are the mean intensity of transistor region (961 pixels) of infrared
video frames in Figure 3.7. Pulsed nature of transistor current is evident in
the 2 Hz beat-frequency waveform.
with its TO-3 case removed is pulsed at 32 Hz, leaving a 2 Hz beat on the video screen
(silicon transistor chip is central square in image). As far as the observer is concerned, the
transistor is pulsing twice per second.
The actual nature of the beat waveform depends on the process occurring. Figure
3.8 shows the pulsed form of the transistor imaged in Figure 3.7. The mean value of a 961
pixel area is plotted in analog-to-digital units (ADUs) with respect to the captured video
frame. The low contrast of the beat (- 12/256 ADUIADU) is due to many things,
including: a large background level (with single point correction, dynamic range is only
about 7 bits), a small temperature fluctuation due to the transistor's heat sink doing its job,
the low emissivity of the transistor (much of chip's surface is covered with aluminum
contacts), and the low dynamic range of the video tape recording process.
34
3.3
Determination of Thermal Aliasing
With a low frame rate infrared camera,the observer, for the most part, is oblivious
to any thermal aliasing. A method of determining the necessary frame rate, integration
time, etc. for detection of thermal aliasing, based on a given scene sequence, would be
extremely advantageous. All the methods described here assume that only a low frame rate.
infrared camera is available; if a high frame rate imager is at hand, there is no need to do
anything except increase the frame rate to twice (or greater) than the highest scene
frequency. To gather adequate information on the signal with lower frame rate cameras,
there is the requirement of a periodic signal.
One way to do this is brute force. Using a triggerable, variable integration time,
low frame rate camera, a periodic scene is sampled using the interlaced sampling technique
described in section 2.2.2. Buildup of the "movie" is accomplished by delaying successive
samples until the entire period of the signal is recorded. The integration time is then
reduced (with the successive delay), and the process is repeated. If the same signal (scaled
by the reduction in integration time) is reconstructed in both versions, there is no temporal
smearing in the original, implying that the integration time (and the effective sampling
frequency) used the fIrst time is adequate. On the other hand, if the second reconstruction
shows features not present in the fIrst, the process should be repeated again until no change
in reconstructed signals occurs (i.e. the maximum frequency components of the signal
were captured).
As most infrared camera systems are free-running (non-triggerable), the prior
method is generally impractical. What is needed is to asynchronously determine the
temporal frequency extent of the scene. This also implies that the exact period of the scene
is also not known, but if the imagery is assumed to not change signifIcantly in its content, a
statistical approach may be sufficient.
3.3.1 Theoretical Approach
The basis of this type of treatment rests on the fact that if the same slowly varying
signal is sampled with two different integration times, the only difference in the sampled
values is the amplitudes, which should be in the same ratio as the integration times:
35
!s~(t)
= J(t) .
f [comb(i) * rect(~) ]
(3.1)
In the frequency domain:
F~(v) =
'r/.
F(v)
* [comb(vT)
. sine (v'rJ) ]
F~(v) =
'rz·
F(v)
* [comb(vT)
. sine (v'rz) ]
(3.2)
Figure 3.9 demonstrates the difference in the spectra for an oversampled signal with two
different integration times.
'r /
sinc( v 'r / )IT ~••
.'
........
'....•...
'.'.
".
.•..........
........'
.'.'
..' .'.'
v
.'.'
liT
-liT
(a)
'rz
sinc(v'rz)IT
....................
.............
....... _
. ..... .
F;i v)
.\...
v
liT
-liT
(b)
Figure 3.9. Oversampled signal with (a) long and (b) short integration
times.
36
If the signal is being undersampled, beat frequencies are introduced into the
sampled signal. A long integration time will reduce the amplitude of adjacent, higher-order
spectra, making the beats of low contrast. The effects of these high-frequency beats are
much larger for short integration times because the sinc envelope is broader and adjacent
signal spectra are attenuated to a lower degree (see Figure 3.10).
liT
-liT
(a)
liT
-liT
(b)
Figure 3.10. Undersampled signal with (a) long and (b) short integration
times. Note that the ratio F's/(v) / F'S2(V) is not necessarily the ratio of
integration times 1:1/1:2 , most notably in the regions of spectral overlap.
With no reference point for comparison (no triggered acquisition), the
asynchronous sampling implies that either the signal must be sampled simultaneously with
two integration times, or some assumptions on the signal's statistical breakdown of the
signal's content must be made. Concurrent sampling of the signal with two (or more)
integration times is possible, but is for the most part impractical, especially for full-frame
imagers. The real problem lies in how well the Fourier transform can be determined based
on the finite number of samples taken as the data set. If the strength of a frequency
component is known with a certain confidence level, it can then be compared with the value
obtained after changing the integration time. The issue is complicated further with natural
37
fluctuations in the sample values due to photon noise. Thus, as in most detection
problems, the limiting results depend on the signal-to-noise ratio.
To find out how many spectra are involved in the recovered signal, start with the
total Fourier transform as derived in Eq. 2.12 and using an un-normalized sampling
window:
L
F;(v) -
F(v -
i}·
sinc(~)
(3.3)
n=-oo
And referring to Figure 3.11, the m th spectrum will contribute to the recovered signal
(assuming a low pass filter with cutoff frequency vmax) if
m
T -
V max
<
V max
rearranging,
m < 2vmax T .
(3.4)
v
Figure 3.11. Determining number of spectral orders in the recovered
signal. In other words, v <
V max
for an undersampled signal.
And substituting Eq. 3.4 into Eq. 3.3 gives:
+2v_T
F;r(v) -
L
n=-2vnu T
F(v -
i}· sinc(r;:} ,
(3.5)
38
which gives a measure of what to expect for a given Vmax, T, and't. The more orders of
spectra involved in the recovered signal, the more difficult it will be to determine whether
or not aliasing is occurring due to the mixing of multiple spectra below v,ltOX.
3.3.2 Discrete Analysis
Using continuous signals and spectra is a concise way to mathematically visualize
the signal sampling and reconstruction process, but the temporal sampling process of video
implies that if the image sequence's spectrum needs to be found, it will be determined via
the discrete Fourier transform (DFT) (Barrett, Brown), which has the transform pair:
I
N-J
..L nhe _j21rnk
Fk = N
N
(3.6)
n=O
= I
N-J
In
Fk e+j~nk
(3.7)
k=()
where N is the number of sample points, In = Is (t = nT) , and Fk is the discrete analog to
the Fourier transform at the frequency Vk = k L1v = k I (NT). Note that Fk # Fk ( Vk) ,
since the very act of sampling a function for a fInite period of time necessitates that its
Fourier transform be infInite in extent, this is clearly not the case for the DFT, which has
only N points. Also, the DFT generates the positive half of the zero-order spectrum, and
the negative half of the fIrst-order spectrum; the maximum frequency value is independent
of the number of samples and is Vmax = N L1v = 1 IT.
Various techniques reduce the computational load ofEq. 3.3 and 3.4 by noting
symmetries and making some assumptions on the type of dataln and Fk are known to be
(e.g., In are real). Such algorithms are collectively known as Fast Fourier Transforms
(FFTs) (Myers), and generally reduce the number of computations (multiplications and
additions) from N 2 to N log N , which is very signifIcant for even moderate N. The FFT
generates the same Fk as the DFT, so from a mathematical standpoint, the DFT and FFT
are equivalent.
Clearly, for the maximum frequency resolution, a large number of samples are
required (L1v = 11 (NT». In the case of standard video, where T = 33 ms, N =4096
points implies taking image data for more than 2.25 minutes. With typical images
39
occupying several hundred kilobytes each, the storage and computational needs are
problematic at the present time.
3.3.3 Simulation
Despite the limitations of the DFT, allowing for future camera/recording equipment
enhancements to solve the image aquisition problems leaves the possibility of determining
the aliasing status of the scene/camera system. Such a test system would take the DFT of
the intensity fluctuations of each pixel in the image (parallel processing to a large scale). As
each transform operation for each individual pixel, a simulation of a possible pixel's
response is a good test for the process.
The simulation was done in MathCAD, and consisted of two functions, one
designed to have a cutoff frequency well below the Nyquist frequency, and the other to
result in aliasing once sampled (see Appendix B for the . rncd listing). The results of these
simulations are in Figures 3.12 - 3.15. Function 1 is sine 2 [(t - 0.5 N)/20J ,which is
slow in time and is thus limited in frequency extent; function 2 is sine 2 [(t - 0.5 N) / 1.5J ,
which is much narrower in time, and will cause adjacent frequency spectra to overlap. The
Fourier transforms of these functions are proportional to tri(20 v) and tri(1.5 v),
respectively. To simulate the effects of finite integration times, the two functions were each
convolved with two different sampling functions, one being Gaus( t) and the other
Gaus(100 t). Actual convolution integrals III
sine2 [(t - 0.5 N) /20J
=sine2 [(t - 0.5 N) /20J * Gaus(t) ,f12 =
* Gaus(100 t) ,f21 = sinc2 [(t - 0.5 N) /l.5J * Gaus(t) , andf22 =
sinc2 [(t - 0.5 N) / 1.5J * Gaus(100 t) were performed numerically (multiplying FFTs and
taking the inverse FFT did not give the required resolution); these functions are in the first
column of Figures 3.12 - 3.15. Then FFTs of these signals were performed (second
column, normalized), and the ratio (for each signal funtion) between the two spectra
sampled with different integration times was computed (third column, also normalized).
The four separate figures are results for simulations with different numbers of samples
(N = 16,64,256, and 1024). For the application of video, where each sample takes 33
ms, obviously the fewer samples required, the better. Spectra shown are the positive half
of the zero-order spectrum, thus the maximum value is I
sampling period is T
Nyq
= 0.5 (in FFT space; as
=1, the maximum frequency generated by the FFT =1 / T =1).
Rows in the figures show results for varying degrees of noise, all proportional to Vi( t) to
simulate photon noise.
40
.......................
.............
Oilt)
~.... ,:-:~ .. "-.
=0
..................
......
............'\\
\
\
\
\
(T,
n
(t)
= Yf(t)
!\
t/·,.:\
10
/
1.2
\
t.D
\
::
12 ..
\:
i
\
\
\
.....................
:
....
,...... .
............. >.:.::~:.::.<......'....:.,-'. ..._'.::.::..:.:,
."' ......... .
....
"'
'.0
/\
I--_-""',~:/~}_\.~
•••••••••••••••••••••••••••••••••••••••••••••••••••••
.-'-....
'0
/....-~""""'=~-._
... __
\
......................,,""
i.\
.. "
/\
.................................... .
-,/:: \,\...
ff\
I\
~t><
o~
............_......., .•._......... ..
.J.l \.
J(t)
F(v)
Figure 3.12. Simulation of aliasing determination with 16 data points. Sampling at
different tint S determines if aliasing is occurring when the ratio of FFfs (3rd column) is
non-unity. The addition of noise greatly affects the method's performance.
41
..............
1.0 .............
.........................
..........
\...../
a; (t)
n
\i
\
= Vj(t)
10
~t::~~':-= ~Dmtt:
..
~b- -· · '>·>· ·
0..
", ..•. , ........•.. - ...•....... ,
~
o.
::l...
1.2
...•...
"
-
"
....................
.......
u
l-......_ _ _ _ _
I
~
t.2
~~I'\---'··>c, . . <:: .. :....,. ~
. . . . . . .-.. . . . . . . . . . . .
"
o.
o.
Q.2
.-.-4_-'.....;._~-=
.....
o.
,........
...................
.......................
.•....
f(t)
F(v)
Figure 3.13. Simulation of aliasing determination with 64 data points. Sampling at
different tint S determines if aliasing is occurring when the ratio ofFFTs (3rd column) is
non-unity. The addition of noise greatly affects the method's performance.
42
......
-...............
.....................
.: ..•.• -.
.... _....
.................
!----~~--
t.O
~.'# ......'~.::.:.2': ...._
",
.....-........... .
:~..-..........- .............
0.4
..
~LL
~
••••••••
"\
\-..,.~
.
_............._................. _........
"l--......
- I-.... .. ..--....
-: ..
• 1..-.._ _ _ _ __
'0 '--.... ...
....
........
:':-"
J(t)
-........
............ _........
.•..........
F(v)
Figure 3.14. Simulation of aliasing determination with 256 data points. Sampling at
different tint S determines if aliasing is occurring when the ratio of FFfs (3rd column) is
non-unity. The addition of noise greatly affects the method's performance.
43
'" ,
(I.lI
.... _....
- -.....
... ~"""
-...._.-.... _....-.........
... .... -- .. - .. .............
.....
.....-....
Gilt) = V/(t)
(j,
n
(t) = V/(t)
10
.1
:.•......
"
....~.~..~..
::~...
...
::
.......
......
.....-.--.:-:::-.
... _.-.. -....-
....._...........
~~-~~-"-.
............. _- ..................
...................... -
..~.~ ...:......... _--_. ---
....::l
..
...........
................
. ... " ....
IU
...
_~----'u"-
_ __
~l
I
"
. _J~
':":
........ ::.........
__ m n __
I--l_ _ _ _ __
f(t)
~I
...............
..................
.................. .
::I-l_______
F(v)
Figure 3.15. Simulation of aliasing determination with 1024 data points. Sampling at
different tint S determines if aliasing is occurring when the ratio of FFfs (3rd column) is
non-unity. The addition of noise greatly affects the method's performance.
44
For the first signal function, which has a frequency extent oflNyq / 10, the ratio of
spectra sampled with integration times 7:J = 1 and 7:2 = 0.01 is theoretically 7:J /7:2, and the
upper right plot verifies this (plots are multiplied by 7:2/7:] = 0.01 for normalization). The
second signal function, on the other hand, has a frequency extent to 1.33 I Nyq. The
aliased overlap from the first-order spectrum extends down to v = 0.33 (5.33 tick marks
on the graphs; a kink is noticeable at that frequency on the high resolution plots). Of
course, the sampling functions, which are Gaussian, are infinite in extent and cause
aliasing, and effects of the finite sampling window also are present (Bendat and Piersol).
Noise was added in the form ofIn (t) = I (t) + Cin(t) , with Cin(t) = C Vf( t) to
simulate photon noise. The Poisson distribution of photon noise (Goodman, Barrett,
Frieden) was simulated by a Gaussian with the required Cin , and the stipulation thatln (t)
cannot be less than zero. Noise at c = 1 is very severe, and prohibits any real information
retrieval from the spectrum.
One other note on the plots is that for the ones with noise, the ratio of spectra runs
into trouble when F(v) becomes very small; dividing by zero is a real problem.
Some judgment must be made about what the noise floor is in the spectrum, and then
consider the function to have effectively no power at that frequency. The noise floor was
set to 0.01 in this simulation, and when both normalized spectra (with different integration
times) had a frequency component value below this floor, the ratio was set to one.
From the presented graphs, it is obvious that the noise level must be reduced
dramatically for this method of aliasing-determination to work; increasing the SNR is not
always possible, but some methods are worthy of consideration. Averaging the signal is
straightforward, and has the effect of increasing the SNR by a factor ofiM, where M is
the number of times the signal is sampled. The problem with averaging is that not only
does it takes longer to record the data, it is not possible in an asynchronous system; a
triggered camera would become a requirement. Another method is to add offset and reduce
the gain of the camera. While simple, it also has the effect of reducing the contrast of
possible weak sources of high temporal frequencies.
The above method seems to work when operating at a high-enough SNRs (plots
indicate 1000: 1 is a minimum). For accurate resolution in the frequency domain, larger
numbers of sample points (frames of data) are desired, but even N = 16 can give
information about whether or not aliasing is occurring. Full-frame alias determination
requires a massive amount of computation, but advances in image processing hardware,
especially in the video compression arena (Lechner) could aid the task.
45
4.
lllGH-SPEED INFRARED VIDEO CAMERA
This section describes the setup, electronic design, and operation of a high-speed
PtSi IRCCD camera system. Included is a liquid nitrogen dewar that houses the CCD and
a cold filter wheel. Two electronic card cages couple to the dewar and an 80486-based
personal computer that controls the system. A mobile cart supports the entire assemblage
of dewar, electronics, computer, monitors, and power supply.
Imaging occurs through a germanium/silicon F/l.6 lens. Focus adjustment allows
viewing of objects from 10 em to infinity. A fIlter wheel internal to the dewar with an
external rotation control houses six fIlters for imaging in specific wavelength ranges.
The camera uses the David Sarnoff 320 (horizontal) x 244 (vertical) PtSi SBD
(SBD) array to image in the wavelength range of 3 Jlm to 5 Jlm. This interline-transfer
CCD was designed for normal interlaced, 30 fps operation found in U.S. television
systems. A technique that takes advantage of the chip's buried-channel structure permits
imaging with integration times much less (down to 10 Jls) than the standard 33 ms frame
time. Timing for the ceo is quickly reprogrammed using a data generator board-set in the
'486, allowing variable integration times in the range of 10 Jls to 1 ms, as well as the
normal 33 ms.
A second mode of operation records images one frame at a time in response to an
external trigger signal. Used in conjunction with a short integration time and a digital delay
generator, imaging of transient, rapid events is possible.
For simple real-time image processing, the system includes a frame grabber/
processor board set in the '486. Processes such as background subtraction and frame
averaging are easily accomplished with the digitized image data.
4.1
System Configuration
The camera system is modular in design, with a 33 MHz '486 PC-compatible
computer as the controller. Referring to Figure 4.1, the PC generates timing waveforms
via a digital pattern generator board-set from Adtron Corporation. These signals are
conditioned by circuitry in an instrument enclosure on one side of the dewar and are routed
to the detector array. Inside of the liquid nitrogen (LN2) dewar, the incident infrared
radiation is focused by the lens through one of six positions on a fIlter-wheel onto a PtSi
detector array CCD. The CCD's internal field-effect transistor (FET) preamp drives the
46
signal to the external video preprocessor through a coax cable. The video conditioning
occurs in an enclosure on the other side of the dewar, which also contains CCD biasing and
a digital delay generator for input trigger signals.
rig.-Delay
r;::::=====1 CCD Bias
LN2
Dewar
1.:::=====1
Clock
Drivers!
Bias
Filter
Wheel
F/1.6
GelSi
Lens,
PtSi CCD
Figure 4.1. Schematic layout of system.
There are two modes of operation. Both allow variable integration time during
image capture. First, in afree-running mode the imaging system operates as most video
cameras, with the frame rate fixed at 30 Hz and asynchronous to external events. The
second method of image capture, triggered mode, takes one frame of data from the CCD on
each rising edge of an external trigger signal. This mode permits synchronized image
capture of rare events, especially when coupled with the short integration times attainable
by the system (Flath, et al.).
4.1.1
Mechanical Layout
Although not constructed as a portable system, the entire assembly is mounted on a
heavy-duty utility cart. Constructed of heavy-gauge steel with welded angle-iron comers
and shelf supports, it easily handles the weight of the dewar, electronics, computer, and
monitors. Large 8 in. phenolic wheels allow the cart to roll over rugs and cables. The cart
is painted with gray enamel. Figure 4.2 is a front view of the system as it resides on the
cart.
47
VGA
RGB
Keyboard,
Mouse
'486 PC
Figure 4.2. High-speed PtSi IRCCD camera system.
At the rear (operator side) is a handlebar for maneuvering the cart; it also serves as
an armrest when typing at the computer. The operator exercises control via the keyboard
andlor mouse, using the software displayed on the video graphics array (VGA) monitor.
Video output of the camera is viewed on an adjacent RGB RS-170 compatible color
monitor. The computer chassis and electronic power supply are placed on the lower shelf
so that the monitors don't block the view of the camera/subject matter. At the front, a
removable angle-iron bracket is attached flush with the cart's top. It sticks out
approximately 5 in. as a guard for the camera's lens, which also protrudes from the front of
the cart. If the cart were to be pushed accidentally or started rolling into a wall, the bracket
(rather than the lens) would absorb the impact. This bracket is shown in Figure 4.3.
In addition to the computer's VGA monitor and the video display, the cart's top
shelf carries the dewar/electronics tilt/swivel mount. This mount is of simple design,
consisting of two aluminum plates rotating about a brass stud. The range of swivel is
approximately ±1 0°, and is secured in a specific position via two Allen bolts. The dewar
and adjacent electronics enclosures are supported on an additional platform which attaches
to the swivel plate via a 0.5 in. steel dowel, permitting the dewar/electronics assembly to tilt
(see Figure 4.3). As with the swivel plate, the tilt position is held by an Allen bolt at the
48
rear of the assembly. All aluminum parts, including the tilt/swivel mount, electronics
enclosures, and power supply are black-anodized.
Figure 4.3. Front view of camera with lens guard. Note tilt/swivel mount.
Supporting only the computer and the camera's power supply, the lower shelf is
relatively free, leaving room for additional equipment. Cables from below are routed
through a 3 in. diameter hole in the cart's top to the dewar, electronics cages, and the
monitors.
4.1.2 Electronic Design
The electrical construction of this IR camera system is a combination of custommade electronics and industry standard architecture (ISA) processing cards in a '486compatible PC. The custom electronics are constructed around the eurocard standard;
there are positions for four cards in two card-cages; two are now fIlled on the digital
assembly (CCD clock-level regulator card, CCD clock driver card), and three are used in
the analog assembly (video pre-processor card, CCD bias regulator card, digital delay
generator card). With the extra positions free for future expansion, the system may be
upgraded with further processing capabilities. Power to the system is standard 110 VAC
49
for the camera power supply, computer, and monitors. A power-strip with surge
protection and RF-filter is highly recommended.
As mentioned previously, the custom electronics are chiefly divided into five
eurocards: CCD clock-level regulators, CCD clock drivers, CCD bias regulators, video
pre-processor, and a digital delay generator. Referring to Figure 4.4, the heart of the
camera is a 25.83 MHz crystal oscillator that is divided-down to synchronously supply
clocks in the system. Dividing the master oscillator by 20 results in a 1.29 MHz signal
that clocks the Adtron board-set. These cards are programmed with digital waveforms by
the '486 before camera operation. When supplied with a clock, the cards "play back" their
waveforms as TTL-compatible signals. All digital connections between the computer and
the eurocard electronic cages are opto-isolated to prevent ground-loops.
A programmable logic device (PLD) is supplied with a 25.83 MHz clock to
generate the CCD's horizontal output multiplexer clocks (<l>C). Along with the vertical
clocks (<l>B) supplied by the Adtron boards, they are amplified to the correct levels (set in
the clock biasing eurocard) and routed to the LN2 dewar and the Sarnoff 320 x 244 PtSi
CCD. A CCD-biasing eurocard supplies DC levels to the imaging chip. The raw video
output is first correlated-double-sampled to remove slowly varying noises (Dereniak) from
every pixel. Then the signal is amplified and mixed with an RS-170 compatible composite
sync generated by the Adtron boards.
At this point, the video signal is ready to be viewed on a normal monochrome
monitor (when operating in free-running mode only). The signal can be plugged into a
video cassette recorder (VCR) or other video equipment for 30 fps, variable integration
time infrared imagery.
For operation in triggered-mode, and/or to facilitate simple image processing using
the stand-alone system, the video is digitized by the Data Translation frame grabber!
processor board set DT2861 and DT2868. Sixteen 512 x 512 pixel8-bit frame memories,
real-'time image subtraction (for single-point correction, Sato et al.), and many other
features permit image processing of the video not available in the analog domain.
50
Trigger In
(Triggered Mode Only)
S
-
Clock
Biasing
Programmable
Delay
Generator
,
Sync
Adtron
Data
Generator
Clock
Osc5
Oscl
Osc2
DGS·2
Osc3
&
Osc4
DGS-16
Osc6
Osc7
Oscl0
Osc9
~
....
-..
-..
-..
-......
1111
1.29MHzJ
H_CLK...START-
25.B3 MHz
Osc.lDivlder
CCD Biasing
Horlz. Clock
Generator
11111
«II1B«112B«113B«114B-
«lie
-f>-
«IIB=
V_DUMP:=-.J
..
COMP_BLANKCOMP_SYNC
-
-SAMPLE
1
SCAN CLK_EN TRIG
Scan·Mode
Switcher
t
V_DUMP3
OseO Ose12 Ose13
-'r
320 x 244
PtSi IRCCD
LN2 Dewar
Data Translation
Frame Grabber/Processor
DT2861 & DT2868
Video In
-..
I
I
.1
Correlated
Double Sampler
.-..
y
I
RS·170 Video
(Free-Running Mode Only)
RedOut
GreenOul
Blue Out
.....
-
Figure 4.4. Electronic configuration of system.
RGB Video
Monitor
51
4.1.2.1
Sarnoff 320 x 244 PtSi CCD
The heart of the camera is the David Sarnoff (formerly RCA) 320 x 244 interline-
transfer PtSi IRCCD developed by W. Kosonocky (Villani, et al.). Figure 4.5 is a
schematic 4 x 4 pixel layout of the device.
D
Figure 4.5. Schematic layout of Sarnoff PtSi IRCCD.
PtSi SBDs detect infrared radiation in the 1 JlI11 to 5 Jlm range; atmospheric
absorption usually limits this range to 3 J..lm to 5 J..lm. The SBD is constructed
(Kosonocky, 1982) by depositing a very thin layer of platinum (=== 20 A) on the silicon
substrate and annealing to form a layer of PtSi. Referring to Figure 4.6, the potential at the
interface between the PtSi bends down and a potential barrier is created. This is the
Schottky barrier potential, 'l'ms, and is on order of 0.2 e V. Detection in SBDs occurs when
an infrared photon with energy greater than 'l'm~' and less than the band gap of silicon (Eg =
1.1 eV) is absorbed in the PtSi layer, and an electron-hole pair is created. "Hot" holes have
enough energy to cross the Schottky barrier and are injected into the substrate. Due to
the raised potential of the SBD, the photoelectrons accumulate at the PtSi surface. After an
52
integration time ~nt, the SBD's accumulated charge may be read out into the adjacent CCD
register by applying a transfer potential greater than that of the substrate.
E
e-
.Y:.--- -t.:~v-l
h+
. . .. ... . . .
....
Silicon Substrate
··1
1
I
.. Platinum Silicide·
.1
I
Figure. 4.6. Band diagram of PtSi Schottky barrier diode detector.
Wavelength response of the PtSi detectors is limited on the short-A. side by the
absorption of the silicon substrate:
Il
14
min
= he = (6.62 xIO-34 J·s) (3 X 10 j1m·s-l) = 1.1 j1m
eEg
(1.6 XIO-19 C) (1.1 eV)
(4.1)
On the long-A. side the response of the detector is determined by the Schottky barrier height
'!fms:
he
(6.62 xIO-34 J·s) (3 X 10 14 j1m·s-l)
Ilmax = - - =
= 5.2 j1m
e1flms
(1.6 XIO-19 C) (0.24 eV)
(4.2)
PtSi detectors are used in imaging arrays due to their high spatial uniformity
(Kosonocky, 1983; Mooney, 1989), but are beset by a low quantum efficiency (11 "" 0.01).
To increase 11, aluminum mirrors are deposited on top of the detectors, the substrate is
thinned, and an anti-reflection coating is applied. Then the array is illuminated from the
back.
53
(a)
(b)
Figure 4.7. 320 x 244 PtSi IRCCD. (a) front view and (b) back.
The device is of a buried channel structure, meaning that at least one clock must be
high to prevent the charge from diffusing into the substrate. Control over integration time
is achieved in this device by using this property. Transfer of charge from the detector to
the vertical buried-channel registers is accomplished by applying a large potential (several
volts above normal clock high) on one of the odd vertical clocks. This forward-biases the
SBD and allows the charge to move from the detector to the vertical register via a small
surface channel at one comer of the PtSi element. One such transfer puts 122 even (odd)
field charge packets into each of the 320 vertical registers. For an interlaced display, after
reading out the previous field, the next transfer will place the 122 odd (even) field charge
packets into the vertical registers for readout.
A method for attaining an integration time other than the frame time in this device
was conceived by Garcia and Dereniak (patent pending by Garcia, Shepard, Dereniak, and
Flath). It uses of the fact that by lowering all clocks simultaneously, the charge diffuses
into the substrate and the CCD is effectively cleared of all charge built up since the last
transfer. Executing a transfer, then lowering all clocks, and doing another transfer, all in
quick succession, stores only the number of electrons captured in the time between the two
transfers. Figure 4.8 demonstrate~ the vertical clock timing for this transfer-dump-transfer
method of integration time.
54
Transfer
<PIB
Dump
Transfer
---IL-,I-~tin'----I~
~
-----------------~
__________________rlLFigure 4.8. Achieving integration time in a buried channel CCD (patent pending).
Cooled Dewar PC Board
4.1.2.2
The CCD's dual-stage preamplifier drives the video through up to 2 ft. of 50 Q
coaxial cable. Each clock line coming into the dewar is snubbed with a 68 pF capacitor and
a 100 Q resistor in series to provide proper termination.
All connections from the outside-world are made of high thermal resistance wire.
Even though this kind of wire is also of relatively high electrical resistance, the lengths are
such that all connections are < 2 Q. Signal wires are twisted-pair or coax, although most
ground wires are only connected on the outside to prevent ground-loops through the
dewar. Refer to Appendix A for complete schematics of the camera's custom electronics.
4.1.2.3
Clock Generation
The master oscillator for the system is constructed as a piggyback board on the
clock driver eurocard. Figure 4.9 shows its single transistor design with a 25.83 MHz
crystal for frequency stability. Its sine-wave output is first buffered by a 74F04 inverter
operated in linear mode, and a logic-level clock is achieved after another inverter.
This logic clock is further buffered for 25.82 MHz output, and is also divided by a
74HCT193 binary counter for 12.92 MHz and 6.46 MHz clocks. A 74HCT192 decade74HCT193 binary-counter combination for a divide-by-20 achieves the 1.29 MHz clock
required for the Adtron data generators.
For a pixel rate of 6.46 MHz, the four phases of the CCD's horizontal output
multiplexer (<Pc) must be interleaved at 1/ (6.46 MHz x 4) = 155 ns /4= 39 ns. This
corresponds to 25.83 MHz, the master frequency of the system. As the Adtron generators
55
+5V
0.01 ~F
CS03
1
25.83
MHz c:::::J
X600
I
4.7 K
RS02
R604
74F04
74F04
USOO
U600
220pF
C601
2 •2 K
RGOO
47 pF
C600
1 K
PN5130
OSOO
CS04
47 pF
CS02
74F244
1.29
MHz
U604
74F244
S.4S
MHz
U604
74F244
12.92
MHz
25.83
MHz
U604
Figure 4.9. System master oscillator.
must supply clocks for two RS-170 fields (1 frame) before repeating, this corresponds to
approximately 1/30 th of a second => 33 ms x 25.83 MHz ::= 850,000 data points. As the
Adtron boards only have a 65,536 time-point memory depth, this would not be possible.
To get around this problem while still having a flexible, programmable system via the
Adtron boards, the P22VIO, a standard PLD, is used as a four-phase 6.46 MHz clock (a
reset pulse for the CCD's charge to voltage converter, G5C, also is generated). The
Adtron generator exercises control of the horizontal clocks by resetting the PLD before
every line is read-out.
Referring to Figures 4.5 and 4.10, the PLD starts in state S5 from power-up; all
output-lines are low. Since CLR is high on the next rising edge of the clock, the PLD goes
to state SO. It should be noted that CLR operates independently of the previous state. SO
has phases <PIC and <P2C high to capture and hold the next charge packet from the CCD's
56
ClK
CLR
bit 0
<p1C
bit 1
<p2C
bit 2
<p3C
bit 3
<p4C
bit 4
G5C
55
50
51
52
53
54
51
52
53
54
Figure 4.10. CCD horizontal output multiplexer clock timing.
vertical registers. States S1 - S4 set phases <PIC - <P4C to move the charge packets
horizontally toward the CCD's output. During S2 the CCD's charge to voltage converter is
reset by G5C. The software used to program the PLD for this sequence is given in
AppendixB.
Generating clocks of the appropriate levels for the CCD is accomplished by using
logic level clocks to activate HI-201HS analog switches. Regulated DC levels (from the
clock regulator board; see Figure 4.11) are applied to one terminal of these switches, and
the other terminal is applied to a EL2003H buffer amp.
Figure 4.11. Typical clock-level regulator.
57
While Figure 4.12 shows the switchlbuffer setup for the horizontal register clocks
and the even vertical register clocks, a slightly more complex circuit is required for the odd
vertical register clocks. Transfer of the charge accumulated in a PtSi detector element to the
vertical register is attained by applying a brief pulse to either <PIB or <P3B, depending on
which field (odd lines vs. even lines) ofthe image is to be read out. This process requires
the odd vertical clocks to support three levels. The circuit to achieve these three levels is
shown in Figure 4.13. A summing opamp buffers the base leyel and adds the high levels
(top and transfer) when switched-in by the HI-201HS.
+16V
+16V
2
270 pF
VB_EVEN_TOP
Cl0l
TIL«i>2B
39
«i>2B
Rl0l
0.1
~F
CIL
VB_EVEN_BASE
l-
+16V
270 pF
2 K
Rl02
TIL«i>4B
Cl04
39
$4B
Rl03
Figure 4.12. CCD clock switching and buffering.
CCDBiasing
4.1.2.4
Certain potentials must be maintained on the CCD for proper operation. These
levels are controlled by voltage regulator circuits on the CCD bias eurocard. Unlike the
clock-level regulators which use a resistive divider and a buffer for biasing, the CCD
biasing circuits use adjustable three-terminal regulators for a more stable output, shown in
Figure 4.14.
58
nL~l~B~__________~,
2.0 K
2.0 K
R302
R300
2.0 K
">"-us-O....
s ---- To «/11 B EL200SH
Output Stage
Figure 4.13. CCO three-level clock switching and buffering.
r--,---.......,~---""'"'!r----
+1.2 to +22.1V
+26V
1.2 K
Rl0l
1 ~F+
Cl0S
+
0.1 ~F
Cl04
1 ~F
Cl0S
3.7S K
Rl0S
Figure 4.14. CCO bias regulator.
This regulator circuit allows currents of up to 1.5 A, although the CCO only draws a few
rnA.
4.1.2.5
Video Preprocessing
After the CCO has captured the image and reads it out, the video signal must be
processed to make it compatible with the RS-170 standard. Figure 4.15 is a block diagram
of the video preprocessor.
59
Video
Track
/
Hold
A,=1
A,=1
Video
Out
Sync/Blan
~
Mix
A,= 0.5 ... 4
A,=·2
Clamp/Sampl
Timing
6.46 MHz
Sync Blank
Figure 4.15. Video preprocessor block diagram.
The combination of the clamp circuitry and the track-and-hold amplifier constitute a
correlated double sampler (CDS). After being buffered by a BUF-03, the video is ACcoupled into the LH0063 damn-fast buffer amp, which has an input impedance of more
than 10 Ga. On the input of this amplifier is also a MOSFET switch that shifts the DC
offset of every pixel of the input. This is achieved by applying a short « 20 ns) pulse to
the MOSFET's gate during the "flat-zero" period of the pixel's readout. The signal is
sampled a second time by the track-and-hold amplifier when the pixel voltage is at its peak
(due to the nature of the charge-to-voltage converter in the CCD, the chip's video output is
inverted and sits on a large DC-offset, Dereniak); see Figures 4.16 - 4.17. Since this twopoint sampling results in the difference in voltage between the two sample points, the
output is independent of DC-offset and slowly varying noises.
As the duration of a pixel is on order of 160 ns, very short pulses are required for
both the clamp and sample operations. Using the reset clock as a 6.46 MHz source,
74HCT221 one-shots shown in Figure 4.18 provide the required delay for each of the CDS
pulses. The short « 20 ns) pulses are formed by another type of one-shot made of
74HCT132 Schottky-input NAND gates. The circuit providing the clamp pulse is operated
on +8V, to amplify the normal +5V logic pulse for the gate of the switching MOSFET
(although this is slightly beyond the recommended supply voltage for an HCT part, it just
runs slightly warm, since it doesn't have to drive a heavy load). The 5V logic level of the
sample pulse is sufficient due to the nature of the CLC940AI's tracklhold inputs. The
60
_____________ • Reset Levet
__________ Flat Zero
Video
__ Pixel Data
<PReset
Clamp
n
n
~
n
Sample
n
n
n
n
~
Figure 4.16. Correlated double sample timing.
HOLD input (pin 1) is biased two diode drops above ground, making the tracklhold status
of the integrated circuit (IC) is controllable with a +5V IOV input to TRACK (pin 2).
Gain between one and four is obtained by having a voltage controlled resistor on
the negative input of a Comlinear CLC500 high-speed, fast settling opamp. Another
feature of this opamp is the ability to clamp the output to user-selectable levels, which is
used to remove surges and spikes from subsequent sensitive stages, such as the CLC940AI
track-and-hold amplifier.
With the video of the proper gain and offset, synchronizing and blanking
components are inserted in the next stage. LF13333 analog switches blank the video
during the vertical and horizontal sync periods by switching ground to the video during
those times, and the video otherwise. The blanking and sync signals are generated in the
Adtron boards, so the TTL level of the sync is transformed to RS-170 compatible of OV
sync-level and 0.34 V black-level also by the LF13333 and buffered by an LF356. The
sync is mixed with the video signal in an EL2020 current-feedback opamp, which can drive
a standard 75 Q video load.
61
S8
J2
To U122
U101
BNC
S04
R104
OC~i;l
100
R100
+5V
11 K
Live
Zero
.?-4_----..,---''i
R119
~F
0.1
C1171
11 K
U10S
R117
U108
I
0.1 ~F
5.S K
C1101 R135
·5V
20 K
R113
0.1
~F
10 K
ECG138A
7.5V
R123
0107
C114
uno
20 ns Negative
Clamp Pulse
Figure 4.17. Video clamp and biasing.
+5V
+5V
50 K
R127
15
18
?,4HCT221
U114
U114
CLAMP
U102
SAMPLE
01 13
co
':;;
Q, ..
...--!--.:!.j' .0
3
+--I--I1--9cuoo
L---r--r-r-~Q
g'Az
+--1---',''::,
J3
U113
EH20
From
CLKCard
Figure 4.18. Video clamp and sample pulse generation.
62
+5V
+15V
68
From U121
22
17
200
16
'>:~:=----'"'t""---"?----------~v'"
vou11-"::..5---I~
U122
CLC940AI
To Ul04
.------'-1
....
1. IS K
+5V
Rl07
SAM....PI-LE-....::'-I"...
...
' .... Ul05
"
.VCCI .VCC2
3
·vee
..
200
NTE177
0105
68
+5V
-15V
NTE177
0106
1 K
Al08
2N5911
0125
Video
Gain
-2.1V
-5V
Figure 4.19. Video gain and tracklhold amplifier.
,.
From Ul05
+15V
1 K
LF13333
2.43 K
---------------~-- ~'~~r_'"'t""--------~V\~~--~\fv_-_,
R134
I.
+sV
Sync
Level
20 K
f
R122
.5V
O.l~FI
Cll5
"
-15V
Figure 4.20. Video sync, blanking and output amplifier.
R130
63
4.1.2.6
Digital Delay Generator
When operating in triggerred acquisition mode, it often is advantageous to start the
frame capture sometime after the actual trigger signal. For instance, say the camera is
viewing an object that is by a pulsed laser. Grabbing the frame at exactly the moment of
the laser pulse would image reflections of the laser light off the object. If the heating
effects on the object are to be viewed though, the frame should be captured at a fixed period
of time after the pulse. To resolve the time sequence of heating and cooling of the object,
each successive frame should be captured with a longer delay (with respect to the laser
pulse) than the previous one. For reasons such as this, a digital delay generator was built
into the camera system for the triggerred mode.
The design of the delay generator is straightforward. A 32-bit down counter is
loaded with a number corresponding to the required delay. The counter is clocked down at
4 MHz, giving the delay range from 1 /4 MHz = 250 ns to 232 x 250 ns = 1074 s "'"
18 min. A TTL input waits for an edge (selectable between rising or falling), then starts
the down-counting process. When the count falls below zero, the count is stopped, a
fixed-width TTL pulse is outputted, and the counters are reloaded, ready for the next input
trigger. As the Adtron and Data Translation boards (four total) occupy most of the PC's
slots, it was advantageous to use some method other than an ISA-based digital JJO card for
communicating with the digital delay generator. Since no information is required of the
delay generator, the PC's parallel port (usually used for printers) was chosen as the
interface.
Information is stored on the card in a set of eight 74HCT374 registers. Registers 0
and 1 are tied to gain and offset 8-bit digital to analog converters (DACs) for computer
control of those video functions. The 32-bit delay word is stored in registers 4 - 7; bit 0 of
register 4 being the LSb and bit 7 of register 7 is the MSb. Register 3 contains two delay
generator control bits, and register 2 is spare. Inverted data are sent over the PC's parallel
port by writing to port address Ox0378. The register to be filled with these data then is
written to bits 1-3 of port Ox037A with bit 0 clear. Then the register number is written to
bits 1-3 of port Ox037 A with bit 0 set. This flipping of bit 0 enables and then disables the
outputs of a 74LS138 3 - 8 line demultiplexer, which in turn sends a data-latching pulse to
the correct register (see Figure 4.21). See the code of pic. c in Appendix B for a more
complete description for accessing the delay generator.
64
The generator is disabled while loading a new 32-bit delay word into its four
registers by first clearing bit 0 of register 3. Once data are loaded into registers 4 - 7,
setting, then clearing bit 1 of register 3 loads the data from the registers into the eight
cascaded 74HC193 4-bit counters. Setting bit 0 of register 3 enables the trigger circuitry.
+5V
PCParaliel
Port Ox0378
bit 3
bit 2
bit 1
'"
bit 0
' ..
Delay, bits 24-31
Delay, bits 16-23
Delay, bits 8-15
Delay, bits 0-7
Control
Spare
Offset
Gain
Register Clocks
'374, pin 11
Figure 4.21. Register addressing in digital delay generator.
Once a trigger edge enters the circuit and the trigger circuitry is enabled (bit 0 of
register 3 is set), the trigger edge event is stored in a 74HCT74 D flip-flop (refer to Figure
5.22). This enables the 4 MHz clock to be propagated to the count-down input eight
cascaded 74HC193 4-bit binary up/down counters, When the loaded delay word has been
decremented to zero, the next clock cycle causes the last counter's borrow output to go
low, with two results (refer to Figures 4.22 and 4.23). First, the trigger edge event flipflop is cleared, preventing any more down-counting. Second, a 74HCT221 one-shot is
triggered. The output of this one-shot also serves two purposes: it supplies the delayed
output trigger pulse, and it reloads the counters with the same delay word for the next
trigger cycle. An OR-gate connection from the trigger input and delay-enable bit to this
one-shot allows the delay generator to operate in pass-through mode when the enable bit is
clear.
Also included on the digital delay generator board are a pair of 8-bit digital to analog
converters for computer control of video gain and offset. A switch on the video
preprocessor board lets the user choose between that board's controls and the computer's.
With only 256 levels available, the resolution isn't fine enough for precise command of the
contrast and brightness in the output video, but it does offer a rough control without
manual adjustments. Register 2 is free for future use, and conceivably could be used as
two sets of extra four bits for 12-bit DACs, which would provide 4096 levels in the
65
controls. Figure 4.24 shows the basic circuit for the DAC/output amp configuration. The
DAC-08 is a multiplying DAC; the OP-27, scaling resistors, and MC1404U5 +5V
reference output the -3.840 -? +0.706 V required for the gain control. The offset version
is identical with the exception of scaling resistors to obtain the correct -2.000 -? +0.500 V
output range.
L
74HCT02
J2
Trigger
Edge
Select
d:r)'
Triggerln
1i125
.f
BNC
...r
+5V
t
+5V
"
OSC27
04 MHz
t!-
"lJ
74HCT74 '0
•
U122
~
~
cuo
".
---....!. a;
-
<iRi
74HCT08
74HCT02
om
Q2
'2
rE--!
U124
l
S
.
-
U121, pin 13
Borrow
+5V
I
+5V
c:
....."
I
..I
i
,J
i
......~ .....""""74HC193",'"....... ~ .....74HC193"""....... m-74HC193
74HC193
Ul18, pins 4&5
.. Ul14 ......
k2-. .. Ul15""", m---s .. Ul16 """ Pi2-5 .. Ul17 ""'" ~
,. ,
,. ,
11
<WA
U>AD
."..,.
<WA
""""
~
00010203
11
11
DO Dt 02 OJ
~'O.
co
D.
+5V
D'
74HCT374
20
co
3
D' ".
7
~1:50'
•
,,
00 D' ""Q;
DODtD2D3
'0lb-
L~ .. 11lE=
co a, ". '" ..
11
<WA
"""
00 DI D2 D3
'0l1-
+5V
U125. pins 8&9
PassThrough
U125
U104, pin 2
Delay Enable
7
~
u-m
•
11
~'O.
L~. 9"£
00 ., . . '" . . . . DO
e,
74HCT374
0
~
'}' 'L
20
DO D' ".
3
7
~1:6.. .,.
•
,,
D' ""Q; D
~
'}' 'L
Data
Bus
U100, pin 11
U100, pin 10
Figure 4.22. Input stage of digital delay generator. Shown are the least
significant 16 bits of the delay counter.
66
74HCT02
...,
Trigger
~X,
L..
Edge
~l>-'--Select
U125
__
~---------,
J2
Trigger In
0-1---+
BNC
'4
.r
++5V
L
+5V
t
OSC27
"MHz
74~CT74 I,. I
r!--~
U122
~
...,~
Q2
--
-
oa
8 -
an;
- - - " " Q2
74HCTOB
74HCT02
):>-!-4_... U125, pins B & 9
5
Pass Through
U 125
r'-'-"l..---+_....!.!..l
fE--!
12
U;24
U104, pin 2
~
Delay Enable
U121, pin 13
Borrow
Ui23
+5V
_C"
+:>V
,.
I.---------~--------~Lr---------~I---
"I
II
CUM
ann
LOAD
OIM'N
OOIJDN
~
11
,.
DCIWI't
IEIIDW~
LOAD
CUM
IICRON~ tICI'IW
ClOWN
II
LOAD
ocm::w~
74HC193
74HC193
74HC193
74HC193
U11B, pins 4 & 5
, " U114.....,'i2""""'-s'" U11S"""r..----s'" U11S ...... I>i2--s'" Ul17",,",,~
,. ,'.Lh- r-::dJ'..
L~. "IF-
+5V
,. ,'.lh- r-::dJ'..
OODI~m
DODIOlID3
DODID:lD3
0'
DO
at az
2.
U105
•••••••• -~
3
+5V
I» CM 01 al or
74HCT374
Data
,.I
II
o..£Nl
lOAO
7 . 11
•
}"L
,
rJ-
DODID2Dl
L~6
00 01 02
0"
c» a.
Jrr'L -
01 01 Dr
74HCT374
20
U10S
•
n
•••••••• -~ I~
3
7.,
11
--------t-H-t----+--------HH-f-4---t--------
Bus
U100, pin 11
U100, pin 10
Figure 4.23. Output stage of digital delay generator. Shown are the most
significant 16 bits of the delay counter.
4.1.2.7
Video Digitization
During normal 30 fps operation, the system operates independently of the '486
computer; while in triggered mode this is not the case. The reasons for the different
67
operation modes stem mostly from the digitization methods of the DT2861 frame
grabber/processor.
Data Bus
+5V,l
.
3
74HCT374
00
co
D.
D'
B
D'
13
D.
"
Ul00.
pin 15
-----!!
cuB
.,
..
D.
D'
D.
roe
12
DO
. ...
..
7
17
13
2
5
DO
D'
07
""" U101
10
1
-L
,. D'
11
8
,.
• D.
10
7
5
"'...
D'
12
15
DAC-Oe
D.
D.
...
-=
-15V
l~f
~161
Rl00
Rl02
+15V
'k~f
.-
vvv-
OP-27
j;2
...
3
-L
IS
D'U109-~
.1-'
~'lK
+SVREF
+15:t
2.
W
0.1 JlF
C100
< Rl03
< 5.62 K
<
-
+
,
U1iT
GAIN
-15V
-
--'-
Figure 4.24. Digital-to-analog converter for computer control of video gain.
In normal mode, the DT2861 takes normal RS-170 video, strips-off the composite
sync, and digitizes the video to 8-bits into a 512 x 512 pixel frame buffer. In actuality, the
board only digitizes 480 lines as only that amount of lines are displayed on a normal
monitor. Since the CCD only has 244 vertical lines, the chip is clocked so that a video line
is read out at half the normal rate; a blank line is inserted between every active one.
Unfortunately, the DT2861 allows for no method of doubling the information into the
blank lines in real-time, although this is easily done in software once a frame is stored (not
real-time). By eliminating the transfer pulses of either the even or odd field, the image of
the remaining field is singly viewed. This is especially useful when tintS less than 33 ms
are used, for the two fields are actually two separate images taken 16.7 ms apart.
When in the triggered mode, this system must wait for an input trigger to initiate
image capture. From the timing point of view, this is relatively straightforward. The
DGS-2 is reprogrammed to play back its and the DGS-16's stored waveforms every time a
rising-edge is applied to its TRIG input. The DT2861 is not so simply reprogrammed,
though. The board allows for digitization of images one pixel at a time (Data Translation
calls this slow-scan mode), but not simultaneously with normal 30 fps, RS-170 framegrabbing. For the digitization hardware to switch freely between normal and slow-scan
modes, a small piggy-back board was constructed which installs on the DT2861. It
selectively switches-in reed-relays (see Figure 4.25) to make the proper jumper connections
68
for that mode of digitization, based on one TTL input. A three-position switch on the back
panel of the computer allows manual selection of mode, as well as control via a TTL input.
This input is connected to oscillator 0 of the DGS-16, thus making the digitization mode of
the DT2861 completely software programmable.
+5V
1N414B R S ; t ] 'W15
0
2.4 K
R100
Normal
Exlemal
Siowscan
1
0100
::
"».i!..-----'_ _.....l "
J1
Externalln
0+-----1
BNC
Figure 4.25. Piggyback board for digitization-mode switching of the DT2861.
To complete the control of the DT2861 during triggered mode, three signals are
provided to its J2 connector. First, 6.46 MHz from the clock eurocard tells the DT2861
to digitize a pixel. Two other synchronizing signals, eLK_EN, and TRIG are generated
by the Adtron board set to enable the digitization clock and start the grabbing of a "frame"
of data. The size of this frame is programmable in software, and is best set to 320 x 244
pixels, again leaving one blank line between successive active lines.
Some amount of manipulation of windows and display buffers is required when
digitizing in slow-scan mode to avoid a flickering screen, thus the maximum frame rate of
the camera system is about 10 fps in triggered mode.
Problems also can occur when the system is triggered at too Iowa rate. If the CCD
has waited for many seconds since the last readout, it is difficult to completely dump all of
the charge from the saturated device (due to both background flux and dark-current) before
reading-out the real data. Images contrast is thus reduced, but can be considered a trade-off
for very infrequent-event capture.
69
4.2
System Operation
A main objective in the design of this infrared camera system was for it to have near
theoretical performance while remaining easy to use. As with most custom designs, such
criteria are mutually exclusive, and must be balanced against each other for the best endresult. The expected performance, how the camera system is operated, and typical infrared
imagery obtained from it are presented in the following sections.
4.2.1 Expected Performance
This is a brief description (Flath, et al.,1992) of the radiometry and expected
performance of the 320 x 244 PtSi SBD array. Figure 4.26 is a simplified diagram of the
system used for calculations in this analysis.
Lens
.. ...
f/1.6
....
. . . .: . . I
B.P.
Filter
N.D.
Filter
~
....
:,'::.',
.""."""
......
~
:::>
PtSi
Detector
Array
'",'
N.D.=I
3.5 11m < A. < 4.2 11m
Figure 4.26. Schematic diagram of PtSi array optics.
First, the parameters used in the following derivations need to be presented:
= area of pixel = (43%)(40 Jlm)2
Ad
EBB
'r
= 6.88 x 10. 10 m 2
= emissivity of blackbody = 0.99
= transmission of lens and neutral density filter = (0.75)(0.1) = 0.075
f/# :: system f-number :: 1.6
= 2.9979 x 108 m sec-I
= Planck's constant = 6.6262 x 10-34 J sec
c = speed of light
h
k = Boltzmann's constant = 1.3807 x 10-23 J K·l
Cj = Q. E. coefficient = (0.18 eV·I)(1.6022 x 10- 19 J eV-I)
A1 - A2
= spectral range = 3.5 - 4.2 Jlm
= 1.12 x 10 18 J-l
70
The number of electrons generated in the detector per second depends on the incident
irradiance and the properties of the detector:
file - = EqdAd 1]
;cLq;'
= 4 (fl#Y Ad 1]
(4.3)
where x =hellcAT_ The total number of electrons stored in the CCD's potential well is
proportional to the integration time, tint:
N
e-
- ;CAd E88'rh e 2 C1
2 (fl#Y
tint
(4.4)
Using this equation and the system parameters, Figure 4.27 displays the number of
generated electrons for various integration times. For this particular focal plane array, a full
well represents 1.4 x 106 electrons, and should not be operated near this capacity. For
greater incident irradiance or longer integration times, higher-valued neutral density filters
could be used.
71
,.....,
CIl
s::
·s0
:.:::
1.6
1.4
1.2
lOOIlS
'-'
s::
1.0
-.....
0.8
CIl
8
.....
C)
Q)
Q)
0
I-<
Q)
"8
Z
0.6
SOilS
0.4
0.2
~
20llS
__~~~~~~~~==~====::::~10IlS
400
600
800
1000
1200
Temperature [K]
Figure 4.27. Number of electrons collected vs. temperature.
The contrast seen by the detector is represented by the differential iJNe./iJT. Taking the
partial ofEq. (5.4) with respect to temperature gives:
dNe "
dT
=-
nAdEBB'rh2C3C] tint
2kT2(fl#)2
(4.5)
Figure 4.28 shows the temperature contrast for the same integration times presented earlier:
72
1000/..ls
10000
~
8000
.....
til
I-<
.....
t::
6000
Cl)
........,
~
0
200/..lS
U
~
::s
.....
~
4000
1U
a
~
2000
600
400
800
1000
1200
Temperature [K]
Figure 4.28. Signal contrast vs. temperature.
A figure of merit used to determine the temperature resolution of the system is the noise
equivalent temperature difference (NE.~T). The NE.1.T of a temperature detector is defmed
as the root mean square (nus) noise of the system divided by its signal contrast. For this
analysis, the only noises considered are shot and read noise (which is assumed to be 120
electrons nus); all other noise sources are small in comparison, since the system for most
situations is shot-noise limited (noise is the square-root of the total number of signal
electrons ).
_ ,JNe - + (120 e-Y
-
aNe -
aT
(4.6)
73
3.0
2.5
,.......,
2.0
~
1.5
~
'--'
~
~------10
1.0
J.lS
- - - - - - - - - 20 J.ls
___________ 50J.ls
~-----
0.5
200 J.ls
: : ~;;;;;;;;~;;~~;;;;~~;;;;;;100J.lS
500 J.ls
...L...._-+-_ _ _+-_ _ _+--_ _ _+--_ _--I'--_..!.1000 J.lS
400
600
800
1000
1200
Temperature [K]
Figure 4.29. Noise-equivalent temperature difference vs. temperature.
0.20
0.15
~
0.10
0.05
-----------------------33rns
400
600
800
1000
1200
Temperature [K]
Figure 4.30. Noise-equivalent temperature difference vs. temperature at tint
= 33 ms.
74
Based on this analysis (Figures 4.29 and 4.30), the 320 x 244 PtSi array should resolve
temperature differences of less than 1.0 K for integration times on order of 50 Jls when
viewing objects in the 600 K to 1300 K range, and below 50 mK for the normal tint = 33
ms. Additional neutral density fIlters and/or reducing the integration time may be necessary
to reduce the possibility of filling (saturating) the detectors' potential wells.
4.2.2 Actual Performance
The system was designed more for imaging, and not so much for radiometric
measurements, thus the performance is evaluated best by presenting images taken of
various scenes in the 3 Jlm to 5 Jlm range.
Due to the high cost of low-defect PtSi imaging arrays, one with many bad pixels
was chosen for this system (Sarnoff calls it a "Grade C" device). As such, some method
of removing this fixed pattern noise (Ewing) is very advantageous for good imagery. As
the system was to be based more on available PC-based cards than custom hardware, some
trade-offs were made on the amount of nonuniformity correction. Two-point correction
(gain and offset) is the current choice for custom camera designs (Scribner, et aI., 1991).
Although chip sets to perform this image processing operation in real-time are just
becoming available, building a custom two-point corrector remains a nontrivial matter.
Various frame grabber/processor board for the PC do have the ability to do simple
mathematical operations on images in real time. As in the application here, the DT2861168
board set digitizes 512 x 512 x 8 bits into a possible 16 frame buffers. An on-board video
arithmetic logic unit (ALU) has two inputs. Using one of the buffers as a reference
(background) frame, the ALU is programmed to subtract this buffer from the one currently
being digitized, thus providing offset correction, otherwise known as background
subtraction. If the scene doesn't change in its average brightness, single point correction
can provide a significant improvement in the output image. Unfortunately in the infrared,
the large background level requires at least one-half of the dynamic range (1+ MS bits) be
devoted to the background frame. For a 12-bit analog-to-digital converter (ADC), the
remaining 11 bits still leave a possible 2048 gray levels. But for an 8-bit ADC such as the
one used in this system, only 128 levels are left after single-point correction, which may
not be enough dynamic range for some measurements. The trade-off lies in the large
expense of video rate 12-bit ADCs, and their understandably sparse use in turnkey video
digitizers.
75
(a)
(b)
(c)
Figure 4.31. Soda can in the infrared. (a) raw, (b) background, (c) singlepoint corrected image.
76
Figure 4.31 shows an image of an aluminum soda can using this IRCCD system at
normal 30 fps and tint =33 ms. Also shown are the background subtraction frame
(average of 15 images acquired with lens cap closed) and the output image with singlepoint correction enabled.
Although the transistor recorded in Figure 3.6 showed this system's ability to
capture high-frequency events near a multiple of the frame rate (using the short integration
time capabilities), the triggered mode offers far more flexibility in acquiring high-speed,
repetitive events. The same transistor is imaged in Figure 4.32, except now in triggered
mode, which allows the capture of the pulsing at 100 Hz.
(a)
(b)
Figure 4.32. Transistor pulsed at 100 Hz, 10% duty cycle. Captured using
triggered mode with delay of (a) 2 ms and (b) 9 ms.
17
Figure 4.33 is a sequence of images taken of a xenon strobe tube. Triggering was
accomplished via a photodiode that sensed the fIrst light output of the tube. As ignition
occurs in less than 1 ~s, jitter due to trigger noise was not a factor. The fIrst image at t
~s
=0
is immediately after ignition of the plasma. The next 13 images show how the plasma
arc decays in 15 ~s intervals. To reduce the effects of temporal noise on the imagery, this
sequence was recorded with a 15 frame average; i.e. each picture is the average of 15
frames taken at each delay from the trigger.
Figure 4.33. Xenon strobe tube flash in 3.5 ~ to 4.2 J..lm range. Each
image is 15 ~ from the previous, with the fIrst less than 1 J..ls from ignition.
Images are averages of 15 trigger events at each delay and are single-point
corrected.
4.2.3 Using the System
The Infrared Laboratories liquid nitrogen dewar houses the CCD. It has a 1.5 liter
capacity and will maintain the CCD's cold fInger at 17K for more than 24 hours when its
vacuum jacket is fully pumped down to 10-3 torr or below. The camera has been used up
to a month between vacuum pumpings (requires a good diffusion pump). For best
performance, it is recommended that the dewar be pumped down every two weeks.
Power for the system is standard 110 V AC, 60 Hz line voltage. Once plugged-in,
and the power strip is turned on, the '486 boots as a normal PC would. Typing ptsi at
the command prompt executes the software and initializes all hardware for proper
78
operation. Default camera operation is initiated; i.e. free-running mode with 33 ms
integration time and no frame averaging or single-point correction.
Camera Adjustments
4.2.3.1
In any mode, some adjustments to the camera electronics must be made while
viewing the image. First, the offset control (brightness) on the analog electronics assembly
is varied to see the object's IR features in the best possible range and to minimize the
effects of the usually large background flux. A gain control allows the contrast of the scene
to be adjusted. The third control is changed when switching between normal and triggered
modes. This transfer gate voltage (VT) is reduced for triggered mode and is increased for
f~ee-running
mode. The reason for this is due to the method by which variable integration
time is achieved in this system (see section 4.1.2.1). The effects of these adjustments are
easily viewed on the output monitor, and with a little practice, become second nature in
use. An additional circuit was recently added to change VT automatically; a switch on the
clock bias eurocard allows the user to choose between automatic and manual VT
adjustment.
Due to nonuniformities in the individual detector elements that make up the IRCCD,
a fixed pattern of intensity variations is apparent when imaging with the camera. To
eliminate this effect (to first-order), the lens cap is first closed and single point correction is
selected. The software averages a number of "dark" frames and stores the result in a frame
buffer. Then the DT2861 is programmed to subtract that frame from any input image
before storing it in its respective buffer. When the lens cap is removed, most of the fixed
pattern noise is subtracted out, including the 300 K background flux. Images are
noticeably better (less noisy) but it should be noted that as the frame buffers are only 8 bits
(256 grays) deep, the single-point correction reduces the possible dynamic range of
images. Refer to Figure 4.31 for an example of the picture improvement with single-point
correction.
4.2.3.2
Software
After typing ptsi at the DOS prompt, the screen shown in Figure 4.34 appears on
the computer's VGA monitor.
79
Figure 4.34. User screen for ptsi. exe.
Upon entrance to the software program, the system is automatically programmed to
image in free-running mode (30 fps) with a 33 ms integration time. Almost all of the image
processing mentioned previously is available for use in this mode. Different integration
times are chosen directly from a menu list or are entered manually. Fourteen video buffers
are available to digitize an image, and the present receiving buffer is easily changed by
clicking on the desired letter in the Dsp Buf menu. A real-time sequence of up to 14
buffers in length (approximately 0.5 seconds) may be captured. Halting the digitization
permits viewing of all stored images, and playback of the sequence at different rates is
possible.
By clicking the item Trigger in the Mode menu, the system is programmed to
only capture an image when an external TTL-compatible trigger pulse is applied at the
trigger input connector. The DT2861 is programmed to operate in slow-scan mode and the
user can easily set the digital delay generator for any trigger delay from 1 Jls to minutes
(when delayed trigger is activated). Note that the system will hang if no trigger is
80
available; the program checks for user interaction between trigger events, but if the fIrst
trigger doesn't occur, the user will be locked out. Imaging in triggered mode is best for
trigger rates between 0.5 and 10 fps.
The remaining text in this section is devoted to a description of the program
pt s i . exe.
Specific options are user selectable via the mouse cursor or the cursor keys.
Execution occurs after the mouse button is released or the return key is pressed. Help
about an item is available in the message window (bottom line of screen) by holding the
mouse button down above that menu item; move the mouse cursor from menu before
release to avoid executing that item. The backslash key ("\") will refresh the screen and
return you to the program if an error occurs in the DT-IRIS routines. Refer back to Figure
4.34.
4.2.3.3
PtSi Computer Program Guide
Mode menu (hot keys = "M" or "m"):
Free Run:
(Default.) The camera is taking sequential frames at 30 Hz, no
trigger is used. The integration time is variable.
Trigger:
The camera takes a frame only when a trigger pulse occurs.
Halt:
Stops image acquisition.
2 Fields:
Switches between 2 Fields and 1 Field to acquire frames vs.
fields in free-running mode. Shows only 1 Field in triggered
mode.
Trigger menu (hot keys ="T" or "t"):
External:
(Default.) The camera acquires images on the external (TTL)
trigger.
Keyboard:
The camera acquires an image when the "tab" key is pressed.
81
Trig Dly:
Resets the trigger delay time to 1 J.ls (the minimum value).
1 J.ls:
Manual entry of the trigger delay time from the keyboard in
microseconds; arrows above and below adjust the time in either
one or multi-step increments. Range is from 1 - 109 J.ls. Only
meaningful if Delay=ON is in Seq Frame menu.
Int Time menu (hot keys = "I" or "i"):
33 ms:
(Default.) Sets integration time to normal video's 33 ms.
1000 J.ls
Sets integration time in 1 - 2 - 5 steps from
- 10 J.ls:
10 J.ls - 1000 J.ls.
Manual:
Manual entry of the trigger delay time from the keyboard in
microseconds; arrows below adjust the time in either one or multistep increments. Range is from 5 - 1000 J.ls.
300 J.ls:
Activates manual integration time (which it displays in J.ls, default
value is 300 J.ls); set by using the arrows or selecting Manual.
Bright menu (hot keys = "B" or "b"):
128:
Manual entry of computer-controlled brightness (offset) from the
keyboard in microseconds; arrows above and below adjust the
level in either one or multi-step increments. Range is from 0 255 (default value =128). The gain and offset control switch (on
the analog circuit box, under the offset control) must be set to
COMPUTER (up position).
Contrst menu (hot key ='c'):
255:
Manual entry of computer-controlled contrast (gain) from the
keyboard in microseconds; arrows above and below adjust the
82
level in either one or multi-step increments. Range is from 0 255 (default value
=255).
The gain and offset control switch (on
the analog circuit box, under the offset control) must be set to
COMPUTER (up position).
Histogram box:
The histogram is displayed in the rectangular box in the lower
center of the screen. Simply press the mouse button in the box
and the histogram appears. The camera system automatically goes
into halt mode.
Dsp Buf menu (hot keys = "0" or "d"):
A - N:
Selects the buffer for image digitization. If halted, selects the
buffer for display.
Rotate:
Rotates through the images that were acquired and stored in the
buffers. The speed is controlled by entering a number between 0
and 9. The larger the number, the slower the display rotates.
Start and End buffers specified in Seq Frame menu determine
which buffers are rotated through.
Clr Buf:
Clears the buffer chosen. Confirmation must be given before it
will be cleared.
Seq Frame menu (hot keys
="S" or "s"):
Go !:
Starts image acquisition and storage.
Start:
The first buffer in the recorded sequence.
End:
The last buffer in the recorded sequence.
83
Delay:
Turns the delay on or off. The delay is only used in the trigger
mode and the amount of delay from trigger to image capture is
displayed in the Trigger menu. For sequential frame
acquisition, the trigger delay is advanced by the amount specified
after each event, so that an interlaced sampling of scene is
recorded.
Goodies menu (hot keys
Ave = OFF:
="G" or "gil):
Turns the averaging function on or off. Used in conjunction with
any acquisition mode. Default is OFF.
SPC = OFF:
Turns single-point correction on or off. This function eliminates
background (fixed pattern) noise to first-order. Cover lens with
cap before activating SPC, then remove once background
subtraction is evident on video monitor. Default is OFF.
15 Frames:
Sets the number of frames to be acquired for averaging and the
single point correction frame. Clicking left mouse button raises
number by one, and right mouse button lowers number by one.
Range is 1 - 30.
Zoom = 1:
Allows image enlargement by the factors of 1, 2, 4, and 8.
PanScroll:
Pans and scrolls the displayed, zoomed image. Upon execution,
acquisition is temporarily halted, and display window is moved
over zoomed until a mouse button is pressed or cursor keys are
used. Acquisition is then restored.
Get Value:
Gets the value of a point. Upon execution, acquisition is halted.
The value is displayed in the histogram box. It is a four-pixel
cursor with the coordinates and average value also displayed. The
cursor is moved around with the mouse and/or cursor keys.
84
Fill= ON:
Turns line-filling on or off. As CCD has 244 lines (2 Fields,
Free Run mode) or 122 lines (I Field, Free Run mode or
Trigger mode) and the frame grabber has 480 lines, this function
copies data from adjacent lines to fill in the image after acquisition
is halted. Recommended for accurate histogram calculation.
Default is ON.
Info= ON:
Turns buffer-level information on or off. If ON trigger delay and
palette bar are drawn on image buffer when acquisition is halted.
Default is ON.
Add Title:
Allows the addition of a title to the image. Upon execution,
acquisition is halted and user is asked for title (32 chars max).
LUTs menu (hot keys ="L" or "1"):
Grays:
(Default.) Linear gray scale output look-up table.
Limits:
255 is red and 0 is blue; the remaining values ofthls ouput lookup table are those of the linear gray scale.
Pseudo:
Pseudo-color output look-up table.
Custom:
Output look-up table loaded from a file (see File menu).
Rotate:
Output look-up table is shifted up or down in response to the
mouse and is retained in that position by pressing a mouse button.
Original order of palette is restored by re-selecting the appropriate
LUT (see above four options).
F i 1 e menu (hot key
Dir:
="F" or "f'):
Shows the files in the current directory.
85
Ch Dir:
Allows the user to change directories. After selecting, directory is
displayed near lower left comer of screen.
Load Img:
Loads an image (uncompressed Data Translation format; raw
512 x 512 bytes with 512 byte palette header) from disk into the
currently selected buffer.
Load Seq:
Loads an image sequence with first eight (or less) characters
provided by user (must have extentions . 1 - . m, where m is the
number of frames loaded). Files are loaded into buffers specified
in Start and End items of Seq Frame menu.
Load LUT:
Loads a look-up table from disk into the custom LUT and
changest the active output look-up table to the custom LUT.
Save Img:
Saves an image (uncompressed Data Translation format; raw
512 x 512 bytes with 512 byte palette header) to disk from the
currently selected buffer.
Save Seq:
Saves an image sequence with first eight (or less) characters
provided by user (extentions .1 - .m, where m is the number of
frames saved, are added). Files are saved from buffers specified
in Start and End items of Seq Frame menu.
Quit:
Exits the program to DOS. Hot keys "Q" or "q" select this item.
86
5.
CONCLUSION
While the thermal time constant of most materials pennits the infrared imaging of
scenes at standard video rates, there are occasions when a high shutter speed or high frame
rate are desirable and/or necessary. Information obtained from standard cameras can be
misleading if the scene changes faster than the imager can perceive; the deceptive effects of
temporal aliasing prevent an accurate interpretation of the true nature of the scene. The term
thermal aliasing is coined to describe the result of temporal subsampling of infrared
imagery.
Various techniques modify existing infrared camera systems for synchronous
detection or triggered acquisition, and can image transient and high-speed events. Fullframe imagers have the advantage that rapid spatially fluctuating scenes, while still causing
temporal aliasing, do not result in a spatially distorted image. This is extremely important,
for in scenes without spatial cues (such as thermally fluctuating objects), there is no way to
know whether or not the imagery is real or aliased; a method to determine the aliasing
status of the image sequence must be detennined to guarantee the imagery's validity.
5.1
Results
Three major accomplishments are described in the preceding dissertation: a unique
high-speed infrared camera system which has capabilities beyond any formerly available,
the investigation of phenomena previously imperceptible without the aforementioned
camera, and a simulation of how to detennine whether or not aliasing is occurring in a
video sequence using a fixed frame-rate camera with variable integration time.
The PtSi IRCCD based camera described was constructed to obtain variable
integration times between 10 ~s and 1000 ~s, in addition to the standard 33 ms, by
clocking the CCD with the transfer-dump-transfer technique (patent pending by Garcia,
Shepard, Dereniak and Flath). Output in standard RS-170 video format is available in both
acquisition modes: normal free-running (30 fps), and triggered f~ame acquisition based on
an external signal (up to - 10 fps). The system is based around a '486 personal computer
on which custom software written in 'C' presents the user with a friendly interface and
allows complete control of the system via the mouse and/or keystrokes. Clocking for the
CCD is achieved via programmable digital waveform generator cards; variable integration
time and the triggered acquisition mode are attributable to this ability to change the CCD's
87
clocking in near real-time. Compatible video output and real-time image processing (such
as background subtraction, lookup-table operations, histograms) are accomplished through
the same software application with a frame grabber/processor board set in the PC.
Several examples of the imaging possibilities of this infrared camera system were
presented. In free-running mode, video at 30 fps of a rotating chopper wheel confirmed
the operation of the variable integration time, in addition to showing the existence of
thermal aliasing. A more significant demonstration of thermal aliasing, a power transistor
pulsed at 32 Hz exhibited a beat frequency of 2 Hz; with no spatial cues in scenes such as
this, there is no way to tell that the device is pulsing faster than the observed rate. A xenon
strobe tube flash was imaged in the MWIR using the triggered mode of acquisition by
inserting a successively increased delay from the trigger (ignition) point for each picture in
the sequence. This method of interlaced sampling was also utilized to show the thermal
emission in a 100 Hz pulsed transistor at various portions of its oscillation cycle.
Demonstrations such as these illustrate the capabilities of this high-speed infrared camera,
many of which have been unavailable in other infrared systems.
Simulations of a method to detect the presence of aliasing, given only image
sequences at two different integration times, offer both good and bad news, depending on
the noise situation. Taking the ratio of the FFrs for sequences that do not include aliasing
should result in the ratio of integration times. The result of aliased scenery will give a nonunity ratio. Simulation of 16, 64, 256, and 1024 point sample signals all confirm this
method when no noise is added to the signal. The problems occur when noise is added
with variance equal to the mean, as in photon noise. Not until the signal-to-noise ratio is
brought to more than 100 (equivalent to detection of 1()4 photons) does the technique have
the ability to reliably determine the presence of aliasing. Performance of the method was
reasonable even for small numbers of samples, which is beneficial in reducing the
computation time; larger sample sets will increase the frequency resolution, though. At
present, the algorithm requires processing power and memory beyond the scale and speed
of everyday computers; this is sure to change in the near future, if the last decade's
computer advances are used as a guide.
5.2
Future Work
A few areas related to the camera and some of the techniques applied in its use and
construction could be further explored. While not essential for the operation of the system,
88
a better understanding of some fundamental issues surrounding its application might make
the design of future high-speed infrared cameras more straightforward.
First is the determination of temporal aliasing in the infrared (thermal aliasing),
which is slightly impractical at the moment. A way to test whether or not noise will destroy
the usefulness of the method presented in section 3 would be to use a single photodetector
with a repetitive signal. Two different preamplifiers (whose integrating time constants,
hence integration times, are chosen for their relative temporal smoothing effect) aid in
sampling the signal. Different numbers of sample points, as well as methods of increasing
the signal to noise ratio could be tested to improve the technique. A possible way of using
the present system for testing the alias-detection method would be to program the two
interlaced fields of the CCD to have different integration times. While the images are not in
complete spatial (40 !lm) and temporal (16 ms) registration, the images might suffice.
The operation of the camera presents many areas for possible study. A full noise
and linearity analysis of the transfer-dump-transfer process of achieving variable integration
time should be accomplished. Perhaps a different method of clocking the CCD would be
more efficient and/or have a higher performance in gaining a variable integration time. A
confmnational test of the NE.!\T should be performed, with the data overlaid on the
theoretical plots presented in section 4 (it is difficult to obtain meaningful results with only
the 8-bit frame grabber card to record data; quantization noise limited). Other tests could
verify the performance of the triggered acquisition mode: the upper and lower limits of the
frame rate, how slow trigger signals affect leftover charge in the array, and a more
complete analysis of the interlaced sampling method used to gather image sequences of
transient events.
5.3
Final Note
Construction of the high-speed PtSi infrared camera system presented in section 4
was under the direction of the United States Army Tank-Automotive Command (TACOM).
The camera now resides at that facility and it is hoped that this document can provide all the
information necessary to maintain the system and to provide the basis for future
improvements.
89
APPENDIX A: DIAGRAMS
For reference, diagrams relevant to the design of this high-speed PtSi IRCCD
camera system are provided in this section. The drawings are presented without figure
numbers; titles on the schematics are found on the lower right comer, while timing
diagrams are titled at the top center.
A.I
Schematics
Complete schematics for the camera system's custom electronics are presented as
engineering drawings on the following pages. They are, in order of presentation: CCD
Bias Regulator Board, Clock Regulator Board, CCD Clock Board, Dewar CCD PC-Board,
Video Preprocessor Board, Digital Delay Generator Board, and Jumper Piggyback Board
for the DT286I.
Some components, such as decoupling capacitors, are left out of these schematics
for clarity. Refer to notes on the drawings for more specific details of such omissions.
-PI
'"0 l2
on
U
:;;
+18V
+1.Zlo+ZZ.1V
I
..
-,,-.,J:;\I
PZ
3~'
rRl
3~'
I~ I
VDDZ
+1.2 to+23V
.'"
0
.I
-=
VSO,
+1.2 10 +ZZ.1V
.,
0
U
c
'"
:;;
!L
0
0
l2~o
on
0
'"
M
N
co:
VSC
+1.2 to+23V
~~~S1
.
" 0'"
on
"':
-=
rl
..
.... ,1::\1
VDDI ,
+1.2 to+23V
-=
..
-,-"t:;\/
3~'
I RI
II
SPARE
+1.210+23V
C
on
~
"~<D
'"
M
N
co:
-=
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
CCD Bias Regulator Board
96
Drawn:
L. Flath
i_..
DIN96
Date:
i_..
IEngineer:
L. S. Bell
i_
\0
o
Pl
+26V
I
~
l
11'1
co
0
;:
'tiJ..:=
~TG
~SKO
as.±Lg:
~
-TG
VDC
+5.l to+l3V
0.82pF
+5VDC
f
W,"
II
"
RllS
49.9KO
70KO
R1l2
R1l3
~
+26V
l
I-
0
-'rG
~TG
'ti
+5.2 to+23V
-TG
~H. I
I'" I
•
-~
II
-=
-26V
-5VDC
.1
~---i-:
0.82pF
+5VDC
iJ
God
"
C120
20KO
49.9KO
Rl16
Rl18
70KO
R1l9
33 pF
I-
C122
l7.i
'"~ '"~
:=
<D
o
'ti±L~
~~
-15V
G3C
-7 to+7V
"'
'a±LS 'S..Lc;
- I
Q1£..
,
0
.n~+sVDC
-SVDC
~lI1IC~ ... nn
CllS
I~ I
-=
~_
33pF
-SVDC
'"
+15V
~
Clll
VGG
-7 to+7V
N.,- ~
G1C
-1.2 to-23V
'S.~2
u
NOTE: Ul04, Ul0S, and Ul08 are
decoupled with a 0.01 pF ceramic
and a 4.7 pF Tantalum capacitor
on each of the ±lSV supplies.
~f~a:
'"
...
,.;
0
N
~
"
GlC
-1.2 to-23V
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
ceo Bias Regulator Board
Drawn:
L. Flath
Size: B IChk: -'File:
Date: 1n-'4-~'
jEngineer: L. S. Bell
jRev: B
CCOREG
\Sheet:
2 of 2
\0
r~
tw.::::.
16V_RTN
,~.
PI
1-1
SPARE
RIOO
-l1V1lC
VCEVEN_BASE
l..lLI
DIN96
0.82 pF
-1fCI04
r~
6.04Kn
,o/fuo:f-+'
I
+l1VOC
0.82pF
4.99 Kn
6.04Kn
Rl09
Rll0
SOKO
vaT
RI03
jfzj
-5V1lC
VC_EVEN_TOP
·IIVOC
+11V1lC
cw
-16V
-
50 KO
RI02
+SVOC
+16V
tw
RI04
-=
·IIVOC
-IIV1lC
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
Clock Regulator Board
L. Flath
NOTE: All ICs are decoupled with a 0.01 pF ceramic and
a 4.7 pF Tantalum capacitor on each ofthe ±16V supplies.
,Date:
IEngineer:
L. S. Bell
Rev: B
\0
N
+I1VOC
ewL 50 KO
RI05
VC_ODD_TOP
...
r=
., -16V
,~.
1-1
,1_.- ::::--.....
1_ 1
VB_EVEN_BASE
,1_._::::--.....
1_ 1
VB_DOD_BASE
)IBlF~
1_ 1
VB_DOD_TOP
PI
VB_EVEN_TOP
-IIVDC
50 KO
RI06
50KO
RZ02
-IIVDC
ew
r=-
ew
VC_ODD_BASE
UI06
r=-
ew
50 KO
RZ03
'!i.
-IIVDC
-IIVDC
-=
4.11VDC
r=
cw
50KO
R5LHlGH
-IIVDC
r=
ew
...L
RZ04
, -16V
, -IIVDC
50KO
RZOI
ew~ .50KO
UZOO
R200
RST_LOW
UZOI
r=
ew
50 KO
•RZ05
-IIVDC
-IIVDC
GROUND
OV
-=
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
Drawn:
NOTE: All les are decoupled with a 0.01 pF ceramic and
a 4_7 pF Tantalum capacitor on each of the ±16V supplies.
Date:
\0
W
r-----+SV
+SV
--"--
1.29
:!I74HCT192~
1~::::
101Hz
=:
..",
6.46
101Hz
lJ601
12.92
101Hz
-=
25.B3
101Hz
L _ _ _ _ _ _ -=
U604
-
_I
+16V
J3
.
VB.EVEN.-TOP
,
V.1l>2B
$2B
",
GROl.f.lD
I To Dewar I
V.1l>4B
$4B
C I I
'YYY'~-T--"""--"'.~ +16V
EI I
~
lJ I I
~
116V.RTf'I
•
·16V
NOTE: All HI·201 HS, OP·1GO, and EL2003H are
decoupled with a 0.1 pF ceramic and a 10 pF
Tantalum capacitor on each of the ±lGV supplies.
All 740LGOOO are decoupled with a 0.1 pF
ceramic and a 10 pF Tantalum capacitor on each
supply (pins 1, 6). All EL2003Hs have a finned
radiator. Each FCT240 is decoupled with a 0.1 pF
ceramic capacitor and pins 1 and 19 are grounded.
University of Arizona· lPl & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
CCO Clock Board
.
Drawn:
L. Flath
'Engineer: L. S. Bell
Size: B,Chk: 'File:
ClK
'Rev: B
Date:
~
+16V
PI
IjllC
GROWO
'S.±Lo
ISOL-+SV
~ ~T~
+5V
u
24
-=-
25.B3~
MHz
1jJ2C
P22Vl0
2'
II
ITo Dewar I
!!
1!
1!
:z ~
12
-= ISOL-GND
"".
1jl3C
GROWD
I
I<
..
VC_ODD_TOP
1jl4C
GSC
ITo Dewar I
GROWO
.....
University of Arizona - lPl & OSC
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
NOTE: All HI-201 HS, OP-160, and EL2003H are decoupled with a 0.1 /.IF
CCD Clock Board
ceramic and a 10 /.IF Tantalum capacitor on each of the ±16V supplies. All Drawn:
L. Flath
IEngineer: L. S. Bell
. I,
I. .
I,
740L6000 are decoupled with a 0.1 /.IF ceramic and a 10 /.IF Tantalum capacitor.
on each supply (pins 1, 6). All EL2003Hs have a finned radiator. Each FCT240 Size: B IChk: {ile:
ClK
IRev: B
is decoupled with a 0.1 /.IF ceramic capacitor and pins 1 and 19 are grounded.
Date:
\0
VI
J3
Pl
2.01<0
2.01<0
GRClU'lD
R302
2.01<0
R304
1.01<0
],15
R30S
c
~
VB_aDD_BASE
':'
ITo Dewar I
2.01<0
2.01<0
W
GROU'ID
RZOZ
Z.OI<O
'V"IA
,;1'1
I~
-L
R204
1.01<0
1'· I I "Ii' -::: I r'\N'I
cjl3B
RZOS
c
~
"
ro.
I V_DUMP3
Pl
VB_aDD_BASE
ISOL..GND ':'
SPARE
VCEVEN_6ASE
VC_EVEN_TOP
VBT
VC_ODD_TOP
VC_ODD_BASE
VB_ODD_BASE
VB_ODD_TOP
VB_EVEN_TOP
VB_EVEN_BASE
~
!lit..
Ft..
PZ
RST_LOW
,..Of
':'
':'
_
NOTE: All HI-201HS, OP-160, and EL2003H are
decoupled with a 0.1 pF ceramic and a 10 pF
Tantalum capacitor on each of the ±16V supplies.
All 740L6000 are decoupled with a 0.1 I1F
ceramic and a 10 pF Tantalum capacitor on each
supply (pins 1, 6). All EL2003Hs have a finned
radiator. Each FCT240 is decoupled with a 0.1 I1F
ceramic capacitor and pins 1 and 19 are grounded.
University of Arizona - lPl & OSC
Copyright (C) 1991 All Rights Reserved
Title:
~~- ~.--" -.--'-
•
Drawn.
L. Flath
Size: B IChk:
Date:
IFile:
\Engineer: L. S. Bell
ClK
IRev: B
\0
0\
.-
J2
0. . . 1
200n
VIA
.,.
BHC
~
I
...
~d
Rl0S
I
0
<D
'
' ·15V
-I;)V
04
g
'"
-=
0
~
-
ToUl05
-=
~~v
.,
.5V
llKll
Live
Zero
~
I
10Kll
..
~,I
+
I
o~m'"
'"
~
'-'-0
'1
-
-
"'!
~
~
Ulosl
'"~~
+.15V
0
~
kS::
~~
'"
'"
lCiij
9lD
';:;
"a
11-
Qi
lKll
Rl0S
0'"
·2.1V
:=
o
'i;.
H
Gain
ciIG
·5V
~i.]
..l..
Video
'S.-L~
.5V
'O
I
'5.
Ul07
.5V
o
~I~U
.15V'
'::"
i.15V
U114
~
un"
4
.SV
74HCT13Z
.E
,.....--...::~
: .E
Ul0Z
-= -=
SAMPlE
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
Video Preprocessor Board
Q"QU113
..,.
From elK Card
Date:
\0
-...l
+ISV
GBn
200n
From
700n
2.43Kn
R134
R130
UI22
Ei:s,"~
,.+SV
Ln
t+l!
c~"'
g
::
-=
"
a:
+SV Sync
Level
-=
~
0
1
-
~
-'IMr
20Kn
:::*"'c
-
2.43 Kn
6Bn
f
R12Z
.sv
-ISV
0
C
RI02
'5. __ _
+SV Black
'"'Iu
20Kn
0
c
Level
f
"''"
Ul~
-1
R116 'li..L~
.sv
'"'Iu
0
-=
-ISV
PI
4pH
YYY"'
L300
J3
4pH
COMBLNK
'lilo 'li±L_
• +sv
0
~T[3
YYY"'
~TO
l+SV_RTN
L301
.....
P2
6,10
4pH
"IV"t"'
L30G
4pH
YYY"'
'liI<D 'S.±L~
-ciIe)"'
ISOL-GND
c I I
~
I I
':":'0."
c I I
~
c
•
-=
lISOL+SV_RTN
•
-=
+ISV
,ISV_RTN
-ISV
ISOL+SV
~TO
L307
PI
•
NOTE: All linear ICs are decoupled with a 0.1 /-IF
ceramic and a 4.7 pF Tantalum capacitor on each
of the ±15V supplies. All digitallCs are decoupled
with a 0_1 /-IF ceramic capacitor. U114 has a +8V
supply. U121 is heat-sinked. Each 74541 has
pins 1 and 19 grounded.
University of Arizona - LPL & asc
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
Video Preprocessor Board
Drawn:
L. Flath
, ..
Date:
IEngineer:
L. S. Bell
'Rev: B
\0
00
""L
Trigger In
..r
Trigger
Edge
Select
.SV
.SV
Output
.5V
Pube-wldth
Adjust
"
~
R108
7
~IS
6 II
Cl03
J3
74ilE'i'ffi
~
~,12
Delayed
Trigger Out
SIC
,
74HCT02
-=-
UI25
UI04, pin 2
"J:.-,)
Ul04, pin 5..
External Load
Delay Enable
U125
.SV
~
1111
1111111'1
Ul00, pin 11
U209, pin 5
U20B, pin 5
U207, pin 5
1111111'1
Ul00, pin 10
1111111'1
Latches
-=
NOTE: All digital ICs are decoupled with a
0.1 pF ceramic capacitor.
'
Ul00, pin 7
Ul00, pin 9
Register
U20G, pin 5
111
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
Digital Delay Generator Board
L. Flath
IEngineer: L. Flath
Rev: B
Date:
\0
\0
Data Bus
+15V
Il
~~
~
11
4pH
't"'I'V'
L300
': •
_
4pH
~~OI05
II
't"'I'V'
L301
IIIIIII f~
+5V
•
'!il '!i±L~T5
+SV
o0
~Tf3
l+5V_RTN
----'
"",.
-=
PZ
--,
+15V
4pH
Y'I"V'
L302
4pH
't"'I'V'
L303
'aIN
_
0
~TO
•
'a±[M
ISOL..+5V
~T5
llSOL..+SV_RTN
Ul00.
pin 14
+5V
-=
fJ
~r:CT37;;
11111111
IIII
cII
<I"l
::1:
.. "
~~OI~·IIIIII~1
7
IIII111
'YYY''---+---4---I 15V..RTN
,"n"
-=
-=
4~T374,,',
,
'J",
Delay Enable
ExtemalLoad
",
m
<11'2
'I ~!;:
~~:
=--
UlOO...~..-_ _ _ _ _
pin 12
• •15V
~
+5VREF
,""
+SV
I I
18:
;'19
II
NOTE: All digital ICs are decoupled with a 0.1
IlF ceramic capacitor.
±15V Supplies are
decoupled with 0.1 IlF ceramic and 4.7 IlF
tantalum caps.
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
Drawn:
High-Speed PtSi Camera
Digital Delay Generator Board
L. Flath
L. .
-=
Date:
1_..
IEngineer:
L. Flath
IRev: B
o
o
J.
STROBE
I"
-=
'SOl.GNO
r
U2~6
r
n j.
J.
02
"
U200
•
~
..
ISOLGND
74LSZ44
uzoo
-=
~
7-
"
ACKNOWLEDGE
±tt~f-±J
-=
ISOLGND
ISOL+5V
03
••
~:aY:l
-=
- -
II
ti: j
1
ISOLGND
6
.5V
LOll.
74LSZ44
_h..
-=
+SV
60
11
ISOLGNO
DO I
."
-=
ISOl.GNO
ISOL+SV
ArnOI
J.
02
5
03
~
h..
BUSY
C
17
"
UZOI
ISOLGNO
-=
ISOLGND
-=
ISDLGND
-=
+5V
1]6011
•
75
071~
ISOLGND
01
D4
os
U200
-=
1Nir
PiiiNffif
l!'
il
AI
-
"".
ISOLGND
II
-=
Lft:a4
-=
ISOLGND
"
""5
-=
rrooj.+sv
,,~
"
-=
21
ISOLGND
"
P.ENO
NOTE: All digital ICs are decoupled with a 0.1
pF ceramic capacitor. All digital inputs are
snubbed with a 47 pF capacitor and 100 n
resistor in series to isolated ground.
All
740L6011s have 10 Kn pull up resistors from pin
5 to +5V.
ISOLGNO
-=
.------University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
Digital Delay Generator Board
L. Flath
Drawn:
I
Date:
..
._..
IEngineer:
L. Flath
'Rev: B
>-'
o>-'
I
+5V
Normal
External
Siowscan
1
1
':"
~
>0
.,. ::
N
'"
'"on 0:...
c
,
7406
UlOO
.
!2N >§
'"
7406
11
~ ~~
.,iC>o:
I.
.
7406
'".,.
,
0
~~ H;
~dJ
"
""
UIOO
UlOO
UlOO
·~ttJ
7406
.w ~'dJ
~~::
C
0
,.:g,
External In 1;ii:I
-{?6 ,
,
.
~~
;
Z
~
15
0
::
..
..
II
UIOO
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
Jumper Piggyback Board for DT2861
Drawn:
jEngineer:
Flath
L. Flath
Size: B IChk: lFile: DT2861 Piaav IRev: B
Date:
1 of 1
12-30-92 ISheet:
§
Adtron
DGS-16
Digital
Clock
Board
, o-z
TOP
SCAN_MODE
, 0-,
PHUB
s 0.
PHI 2B
0-,
PHI 3B
• 0-,
PHL4B
7
11 C>I
13 0-1
15 C>1
HCLK..START
V_[)lI.IPI
V [)lI.IP3
1701
190.20
21
Zl
o-u
o-z
CaMP SYNC
CaMP BlANK
r;;;ru
29 C>JI
31 0-3
TOP
033 C>14
....
....,
OSC3
""~,
OSC4
...
OSC6
..."".
ose7
,
oseB
"'"
......
OSC9
OSCIO
""~
' .n "u
OSCI2
"""
e'K
crAt.! TD'C.
05C11
21
22
2J
s
• "
, ,.
OSCS
.....
,-
2
,
,
OSC2
,-
«rAt.! rlV
20
OSCI
....
25 <:>26
Z7018
""'"
Mode-Switching
Keeo-Kelay t:!oara
~
BNC
on DT2861
,
OSCO
2S
7
.,.
27
Adtron
DGS-2
21
29
"
'" ~OUT3
:n
BNe
" "
'C?
OSC13
0-"
12
15
..
...
.....
ffijG
0
ClK
0,.
0"
036
" 037
'I
2
•
'7
n:
, ,
n:
DCB
't
'7
-=
r;;;ru
Data Translation
DT2861 J2
"
loe34
-=
OB37
o
TOP
Dewar
ceo
Video Out-Ij]J:)
SMA
CCD Temp. Sensor
Video
Preprocessor
Board
IJ§I}
BNC
Video In
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
Cables
Drawn:
Rev: B
(-2.B83 mVlK @II a pAl
Date:
......
ow
0,
0,
Oc
00
0.
0.
Oc
011
OJ
Dewar
Digital Side
0<
01.
Ow
OH
0.
OIl
o.
Or
au
0.
Ow
Bendix Z6
PHL2B
Digital Electronics Assembly
0.
RTN
PHL4B
0,.-
02
RTN
PHUB
DIS
O.
RTN
PHUB
CUi
o.
RTN
PHLIC
GI7
o.
RTN
PHUC
011
06
RTN
PHUC
GI9
PHL4C
0,.
0<21
03
RTN
VGG
022
023
On
O.
0,
On
On
017
019
065
0"
'""
0,1
....
....
....'""
....
....
0......
010
RTN
o.
0,
'""
Y"""CIII~'hiI:.
o.
RTN
GSC
....
....
....
"""....
...
'""
,....
IlI4IlRIcIrDII~~'
01
RTN
.....
069
Eurocard
Backplane
Digital Side
On
On
0"
079
Oal
0 ..
Oa5
0.7
DIN96
0"
Oil
025
Oil
DBZS
University of Arizona - LPL & asc
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
Cables
Drawn:
L. Flath
Size: B IChk: !File:
Date:
10-27-93
IEngineer:
CABLES
TSheet:
L. S. Bell
IRev: B
2 of 5
t-'
~
Analog Electronics Assembly
0.
Os
Oc
00
Of
0OG
Got
Dewar
Analog Side
C>J
0<
0..
C>N
OH
+18V
O.
RTN
VSO
01.
G4C
001.5
C,
RTN
VOC
016
C>n
VDD1
011
G1C
On...
C"6
RTN
Dig
BlldonV.'Iit.
C,
0,.
o.
O.
C>s
C>r
C>u
vsc
o.
RTN
VDD2
0.21
G2C
022
010
023
Bendix 19
....
....
8bdcCWIVtllil.
OJ
RTN
....
.....
....
....
....
....
Y._onVtlllt.
O.
RTN
.."
~
G.
RTN
G3C
,"-
0,
RTN
I
....
......
O.
0,
O.
0,
O.
011
On
015
017
019
o.
Eurocard
Backplane
Analog Side
0,
O.
c,
O.
015
017
019
DIN96
Oil
0"
0"
0 ..
013
OB25
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
Cables
Drawn:
IEngineer: L. S. Bell
L. Flath
IRev: B
Size: BlChk: lFile:
CABLES
Date:
ISheet:
10-27-93
3 of 5
....
6:
Digital Delay
Generator Board
~
o>zs
~
0-23
~
0>21
~
0-"
~
0-17
~
0-15
~
0-"
~
0-11
~
0-0
'\.
'\.
'\.
0-,
'\
IDCZ6
PC Parallel
Port
...
.....
... ....
~
8ra.fton'A1oIt.
alldon~'NI.
mum
DO
01
100t Pnnter
(!nOlI!
02
~onBllltk
""'.
~.onl'l'tit.
....
'(~onBlK.k
015
O.
016
o.
select Ine!!
03
017
04
Gnd
019
Gnd
06
.".
MonSIad
O.
0-'
GrNr'lon~.
GlIyonBlid:
0-.
...
l2htGretn
1>.
0"
Select
'".
Shield
'40011
10 C>9
COLTRIG
COMP_SYNC
On
"
011
"
O.
0,
COMP_BLANK
o.
• 0>.
O.
•
•
•
O.
• 0>.
-=IDC20
IDC20
0 ..
011
OZ4
012
Gnd
BkleonYl'llle
16
010
Gnd
P. End
015
-=-
Os
Gnd
BUSY
"
16015
• 0-.
OZI
Gnd
Acknowledge
"'I
110011
011
• 0-,
0,.
Gnd
07
019
12011
0,
,.
20 ()ol!il
011
0&
Video
Preprocessor
Board
Digital
Clock
Board
Os
Gnd
OS
B&KfIonVl,*'
014
O.
Error
!l!!!!
~"CIIIV.,..
o.
Auto Feed
025
011
DBZS
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
Title:
High-Speed PtSi Camera
Cables
Drawn:
Rev: B
Date:
......
o
0\
Digital
Chassis
GA
G.
C>c
G.
()£
C>f
C><
C>H
GJ
GlC
0.
Power
Supply
Gz
.SV_ISOL
ISOL(.NO
.16V
16V RTN
-16V
.sv
.SV_RTN
.16V
lGV RTN
OA
o.
Oc
o.
OK
OJ
o•
• IGV
0,
OK
Bendix 14
GA
G.
C>L
GN
GK
C>P
GlC
Gs
0-,
o-u
Gv
O-w
Gx
Bendix 26
.SV_ISOL
ISOLGNO
.1SV
lSV_RTN
-lSV
.26V
26V_RTN
-26V
.ISV
lSV_RTN
-ISV
.sv
.SV_RTN
Video Out
Data Translation
DT2861
I
IJ§I} Video In
{J£l]
BNC
I
BNC
OF
o.
-16V
16V RTN
Clock
Driver
Board
OJ
Video
Preprocessor
Board
t
Clock
Regulator
Board
•
Fan
Red Out
OL
D.
Dc
Green Out
CCD
Bias
Board
Blue Out
O.
OK
0,
OJ
o.
BendiX 14
Analog
Chassis
[J§\}
{J£I]
Sync Out
1
V,deo
Preprocessor
Board
Green In
BNC
[J§\}
{J£l]
BNC
0,
Red In
BNC
BNC
0.
0.
[]§[}
{J£l]
BNC
OA
o.
RGB
Monitor
Data Translation
DT2861
Blue In
BNC
[]§[}
{J£l]
BNC
Sync In
BNC
University of Arizona - LPL & OSC
Copyright (C) 1991 All Rights Reserved
High-Speed PtSi Camera
Title:
Cables
Drawn:
L. Flath
Size: B !Chk: !File:
Date:
10-27-93
!Engineer: L. S. Bell
!Rev: B
CABLES
!Sheet:
5 of 5
...-
S
108
A.2
Board Diagrams
Each subsection presents the board's position in the card cage, as well as the component
and back-side views of the the board.
A.2.1 CCD Bias Board
Position (Analog Chassis)
Component - side
Back- side
Component - side
Back- side
A.2.2 Clock Regulator Board
Position (Digital Chassis)
109
A.2.3 CCD Clock Board
Position (Digital Chassis)
Component - side
Back- side
Component - side
Back- side
A.2.4 Video Preprocessor Board
Position (Analog Chassis)
110
A.2.S Digital Delay Generator Board
Position (Analog Chassis)
Component - side
Back- side
A.2.6 Power Supply Enclosure
Outside
Inside
111
A.3
Timing Diagrams
The digital signals generated by the Adtron DGS-2 and DGS-16 are programmed
into their waveform memories by the '486 computer. These waveforms control the
operation of the camera's clocking, integration time, and acquisition mode.
Included with the Adtron boards is a software package named ped. exe, which
allows the user to view and edit the waveforms on the computer's screen. Although this
application was beneficial during development of the system, it would be very awkward (as
well as slow and disk-space consuming) for the end user to load new waveforms in this
way every time a different integration time is desired.
Thus the alternative method of programming the Adtron boards directly was
chosen. Communication with the data generators occurs via standard reads and writes to
ports on the ISA bus. Like most application-specific boards for PC-compatibles, the
protocol for this communication is specific to the hardware, and requires rigid adherence
for proper operation. Refer to Appendix B.1.3 for the code (adtron. c) used to program
the data generators.
Presented in the following pages are timing diagrams for the two acquisition modes
of the camera system: free-running and triggered. The timing of the sync and other control
signals is quite different for the two modes. Note that the time per bit of the waveform is
0.7743 Jls. The entire waveforms of 43,050 bits are not presented; only the areas where
unique transitions occur are given (vertical blanking periods, beginning of vertical transfer,
etc.). The missing parts are repetitions of patterns established in the material that is given.
The free-running mode diagrams are for the specific integration time of 50 Jls, but,
as can be seen from the plots, integration times up to the vertical blanking time
(approximately 1 ms) are possible. For the unique integration time of 33 ms (normal video
camera operation), no dumping of charge or second transfer occurs.
Triggered acquisition mode does not repeat the stored waveforms in a loop; the
patterns are played-back once for every trigger (triggers occurring during playback are
ignored). While based on the basic timing of the free-running mode, the readout in
triggered mode occurs in the second field, permitting integration times of up to 17 ms.
In any case, determination of the specific time-points for which a given trasition
occurs are readily computed by examining the function build_gen in the program segment
adtron. c presented in Appendix B.1.3.
112
·..L.L.t ..L....~....t,... ...L.L.L . L....L.L.t
..L.L.t. "'r"':'"
:: ···t'·'r'·'j'·';'··
i ~ i! ··+··+··~···~···t··+··
! l ! : : :
.
o
o
N
::r:r:::r:rr::r: : :
1 ! l i
i!
!!!!
: i i i i!
..
.... ::::::
'"1'''7'''r'''1''' "TT" "T'TTT" ..T·1·..·r ..'1' ..1"T· ..·t"·j"· ..·t..·t·"j·"j"·
,0.
-:::\::11:1:: ::1::1::: ::1:111:: ::111J:1:1 ::t1:: ::ftr:[ :t::t:::\:::t::t:::I::: :::r:::I:::i:::I:J:: -::i:::I::: :::1:::1:::1:::1::: :::I:::i:::I:::I:::I::+:
oco
.++...++-+.+..++.++++. . .
-+1++++++++1 -++H++ ].j.,~I.,].J.J.,].,I.,~I..l,.~IJ.,. ~~ ~
:!~ ~ :-. :~ ~ ~ :~ :f·.: t.i~ :. ·:I~ ;=:~ .
ggN _:.·:.• :. .:•:.::.!
. :..•:.•:..:i:t:......•.:·.:.1:1.·. . ..•..·•. .
.
! ! ::
:!. .....:.••: •.!!:...
. :.::.•:.•:••:.•:1:::::-.:·:::!
. . ::.:::.·:-1::
.
:. . ..
::..
.! !
.
:. . . .:•.: . ·.:·:.·:.·:!::.:.:.·:;::
.. ..
!:::
:.·:li. . ::. . .•.:•..
:.... ....•
."
..
:.
•.
. ::1::1:::
i
::::::
~ - :::J:::r:!:::I::: :::r:l::: :::I:::j:::1:::I::: :::j:::t:t::I:::I:::t::
: .~ :~ ~ ·.: ~
~
.
h
~
·
.
·
I
·
"
·
O
&
+
·
.
·
·::I:::I:::l::t:
"·50··'1··· ···;.···.···1··· .. ···
~
i!! i
:::[.:.1:::1:1::: :::!:::::l:f:.::1:1:::!:::::
• •• -j ••••j..u•••••••••••
:::I:::l::1:1:::EI:::
::: :! i i ! !
· : ~.· 1: : f: ~.· : :! : :~ ::?:f::: ::: ~
~
0
N
:t::
goo _ .:.:. :. ;.::.:.l
. . . :. :.:t·.:.:.:
. . :1.:.:.:
. . .::... :i. . ·.: :;.::
. . ...: .::. :. ::. '.:...:.::. :. ::
. . . ::.!.:. :.:.. :t;f.:.:.:
..
:....::...::.::.:
. . .. :1.:.:.::!.:f:
. . .. ·.:.::.:;.::
. . ... :..
.
..
..
.. .
.. :::1:::1::: :::f:::I:::I:::j:::
...
.. .
1::::
. . .. :.. :. . . .
:::I:::I:::j:::j:::f:::I::: ::: r-
Ql
:1.::".:.: ... , ... , .......,. ..., ... , ... , . . . . . ., ..., ... , ... , ...., ... , .... ..
.,:--.+ ... ···t .. ·"... ..;....• ·.· ... (... {....J. ••••••• , ••••:•••• ··J.·.·I •••
0
0
!-;Irl-~ ~llrli1~II-rr ~~;Ill~I-':I1111~1= ~+
It
~ -:ljjlllll ;lm: ]]:8: l1J~t IlI1H- ~~
:1:~ :H-1=~' ~f~Hl =~
:::EE
::rrr:E ::EITTTE: :::... L..L.....l.. ..L.L.. L....L,J...L.. ,L ..L.. -..++. ·+. f·..!. +·.4:l. ++++·· . .
0
co
o
<D
o
v
o
N
1. ..
!!!
-Go
...
In
In
-Go
.&
...
'"
-e-
I-
U
~
'":::;;o!
~
u
J:
'"
~
~co
0
:::;;
0
U
o!
U
CD
E
i=
••••:•••• ~ ••• I ... I ... ...) ...•... 4••• "·•• -}· .. J. ......
o
Freerun SOJJS, 00200
1
1
_I
1
00400
1
1
1
1
$1B
..... i.....;.. -.~..... i.....~.- .. ~..... i.....i.... ~..... i.....i.....t.... ~.....i.....;.... i·· ... i.....;.....!..... i.....;.....~ .... ~ ..... i.....~ .... ~.- ... i~=~ .... ~.....i.....~ .....;.... i.~.-~i~ ....;-~- .. ~.....i.. -..;.. -.~.....
.....i....l .... 1. ....i.....~ .... J.....i.....i....L.... i.....i.....~.... i..... f.....i....i..... i.....t....L.... l. ....i....l .... l. .... ~ .... l ....i.-...i.....~ .... l ....i.....i.....~....i.....t.•.•.~ •... ~...•.i....J...J ... .
:
$2B
:
:
:
:
!
LJ
:
:
:
1
:
:
:
!
!
:
1_ !
!
:
!
:
!
!
!
!
1
!
!
:
!
!
!
!
1
1
!
·····~····t····i··:·:-~·····t···+···+····~····t···+···+···t····i·~~·~~~-·~=~=i····+····t····t···+···+···t···+···+····t····i····+····~.. ··t···+···+···r··+···-·r-···t··~F·-·+·~·-F···i·····
:::::~::::1::::t:::i:::::L::L:::i:::::i::::!::::r::r:::t:::t:::i:::::i::::r:::i:::::r::::r.::::t::::~::::t:::L::I::j::::r::I::::t::::t::::L:::[:::::t::::]::::l:::r:::t:::L::l:::r:::
$3B
. ·..~ ....f. ·+. ·+. . }··. i....+. ·+. ·t·. ·i·····~..·..t···+ . ·+. ·+. +. ·+. ·+. ·t··. ~··· . ~ ....t. ·+·. +. ··t···+..·+....t....t·. ·~. ···~ ....·t···+..·+. ·f..·+·..+. . t..·+. .
..·..r....+·..+
. ·+. . t..·+. ·+·. +·. t·..+. ·+·. +....{·..·+. ·+. +. ·+. . t·..+. ·+. ·+. ·f·..·~. ·..~..·. t..·+·. +. ·+·. t. ·+. ·+····t..·+. ·+·. f....i....+·. +. +. .
::::I:::t:::t::l:::t:::t::::t:::l:::t::::r::I:::t:::t::::i:::::t:::t::l::::t:::I::::t::::r::::t:::C:J::::t:::t:::t:::t:::t:::t::::r::::t:::r::t:::t:::t::::i:::::t::::t::::
:::::I::::f::::j:::::I:::::I::::j:::::j:::::I::::f::::j:::::I::::f::::j:::::I:::::I::::f.::::j:::::I::::f::::j:::::I::::f::::j:::::I::::f::::j:::::I:::::I::::f::::j:::::I::::f::::j:::::I::::f::::j:::::I:::::I::::J:::::
$4B
..... t .....~ •••• ~..... ~ ..
!
!
!
!
···t .. ·· -t..... t· .. ··t ....
:
:
!
:
~
:
.... -t ..... , .....~ .... -t..... , ... ··t .... i .... · ~ .....~ .... '1..... ~ ..... ~ .....~· .. ·i ..... , .....~. 'i'
00
:
!
:
:
:
:
:
:
:
:
:
:
!
!
:
!
!
00 0 0 : 0 0
:
oo.~.
00 . - : - . . . . , • • • . .
!
:
:
t· " •. ~ ... ·i .... · t .....:-". ·i· .... ' .. · ..t· .. ·i.... ·
:
:
:
:
:
!
:
:
:
:::::j::::f::::f.::::j:::::l::::j:::::j:::::l::::f::::j:::::l::::f::::f.::::j:::::l::::f.::::j:::::l::::f::::j:::::l::::f::::j:::::j::::f::::f.::::j:::::l::::f::::j:::::l::::f::::j:::::l::::f::t:::j:::::l::::j:::::
!
HCU<-START
! !
.· ...i .....~ .... .[·· ..·i.....~ .... .[·· ...i .....i .... ~· .... i.....i .....!-.... .[..... i.....~ .....[..... i..... t.....:..... i.....
i.....t....i.....i.....~ .... l.. .. .i .... J.... j.....i.....~ .... J.... i. ....L....~ ....l.. ...i.....L...i.....
:::::/:::l:::j:::::/:::t:::j:::::/:::::I::::t::::/:::::1::::t::::j:::::/:::t:::l:::::l:::::I::::f::::j:::::I::::t::::j:::::I::::t::::t.::::I:::::/::::t::::I::::l:::t::::j:::::1:::l::t:::I::::l:::j:::::
COMP_SYNC
t]!=I=!:::1::t::~::=t~ltt~lrl::Utff!-;=rT=[:~l:In=l:lr~Urn~r
r-..
·.... !··· ..t .. ·!' .... !.... ·r· .. ·!··· .. i.. ····!· ..·r.. ·t ..·!·····!····r.. ·i .. ···r .... r· .. ·i·· .. r .. ·r.... !·· .. ·i .... I ....
··· .. f··· ..
COMP_BLANK
..·.. ;· .. .. ·{..·.. ,.... ·J ..··{.... ·i....·J· .... ....{.... ·I· ..
....,.... ·J· ....:....·(· .........
·!·· ..1..··1"· .. t· ....r.. ··!· .. ·l.... T.. ·t .... i· .. ·T ..·r.. ·r .... i.... ·!·· .. r· ..·
··I··· ..r.... {.... ·,· ....,. .. ··v .. ··:c .... ·J .... ·jo· ..·\· .... i ..···jo··..,·· ..·I· ....i .... { ... ..
. ·. ~....t. ··i....+. . ~ . ·+-..+. ·+. ·t·. +. ·+. ·f. ·+. ·+. ·+. ·i·..·+···+·..f·. +. ·+. ·t. ·+. ·+. . t··..i· ..·+. ·+·. t·. +. ·+. . t..·+. ·+. . t....i....+. ·+. ·i....·
200
~····i
··~·
~
··~····{·
·jo .... '· ..
1
1
1
1
1
1
1
1
1
220
240
260
280
300
320
340
360
3BO
400
Time Bit
.......
w
.......
114
o
o
-~Hll :H~ ~lHr~mlIJnl1lr_tlll~ll~ .• -:
o -
~l :1I ;l ~ :1;1I~1~;llljF!fll~ ~IllIJJ;III;1 ;- ~
~ -~Inf li~ ~m~EUIIU II~Illt~E~nn:~
: : !:
O -
o
l!
::!
1
!!:!:!
!!
~~I~~r~I~I~: ~I::I~~ :J~~I~~r:I~: ~:I::r:I:I:I::r: .: .:.
..
++++. ++. . ++++. . ++++.++
!!!!
~
... {-...:...............{.•..,._.-
-·-~···i··--:····.···
... (....:....,. ... ,... "... .:...
0
~.
:t.:..·.: .:!.:.:.:
. .:.:.::.:.! .:.:.:::;:.:.:.:
. . :!.:.:.:.:
. . :!.:.:.:
..
.:.:.::t.:.:.:
. . . :!.:.:.:.:
. . :!.:.:.:.::
. . .:!.:.:.:=
. :. !. .:.:.::t.:.:.:
. . . .:.:.: fo-
2
"''''·-1·,'
II')
!!!!!:
g-=R~r·n lffFnn:I:Ff~:FFFF ~:I=rrFj= -•..
0
....
····:····.···'···1···
N
II')
II')
" .• o·'i-.--:-_·."_.· ,.,
~1~t~H-:ttil~llft~
ll: :tlllJ:!-rl=:lll ~~
···,,····:-···.···,······,,····;.······1···"····:-···.·····.(
... .;....,. ... ,............ ···.···t·······} ...•... , ... "...
: : ::
::
::::
::::::
0
....
IX>
0
'"....
. .. I... "· ...}... ,. ..... .
0
....
....
0
0
.e-'"
co
.e-
co
.g.
l
~
,d
..J
u
:t:
o!
s""o!
8
U
u
~
Vl
::;:
m
::;:
0
CD
E
j::
N
....
l;:
-
iii
0
0
0
....
115
-j:ljl:!:l~ "tIll ~lltHlll lill JHH:\ ~~
:tlllll~ -J-tt:1: ~ijUU 1flill ~I~I~II;I;~
o o
..
···~····:·- t···!··· ··-1···-t··· ···~·-·1"·-t· ..!··· ···i'·-i",··t,·,t'·'!'·-i'·· ... ~··.i· .. ····~···j. ..·i·-·i··- ..: ... ' ···i···,i.. ··:····j.·.....
g-Jillil:tiltiHHI:tt tl:H"j:tltH:e-
0
0
co
0
co
I"-
0
ID
I"-
...
0
I"-
0
N
I"-
==
m
0
0
l"-
CD
E
j::
0
co
ID
o
ID
ID
~ :~!~I! :1;111: :~ ~=I:I :~- ~l l : .f!I:l l~ .: ~
:::FFrr: :::FF :::FFFF: :::FFFfrT ::Fr: ":rrrr: :::FFFFFF : :
...o
ID
o
N
ID
o
o
ID
tr
.e.'"
.e-'"
.g
'"
'"
~
~
~
u
:x:
u
z
><I)
o!
:::;:
0
u
'"
S
CD
o!
:::;:
8
116
. ++++. .++. . ++++. . ++++.++ . .~. .
L. ·.. ~· ..;... ;... i ......~ ...L.L.L+...~ ......
o
o
o
-nrl:Tl: :r:r:ll :lnnlllll:i=ILi~;Hllr ~
o
'"m
o
0
....
m
I~~I!I~!~ ~lll--;!~J:I~!I;1 ~1~1~IJr~! I:I!I; :
0
N
m
~
m
0
0
m
.u( .•••:.•••••••••••••• .; .••. )- ••.••• , ••• ; .•••:•.••••..••• ( .•• ..: ......................... Jo ••• , •••••••;. ••••••••••• , . . . . . .} ••••••• ( ••• , . . . .;. ••• ,. ••••••
i=
0
ex>
ex>
o
'"ex>
... (....;. ...,. ... , ... ···i····> .. · ···f···;····;.···.· ..... ;... -:-...)._.-, ... (... -:-._ ...•... , .......} ... ,. ... ' ... f .............. , ••• " ••••:-••••••••••
o
....
ex>
o
o
Ii:
.e.'"
.e-'"
.g
'"
.e..'"
~
u
~
~
=I
::;:
:t:
U
U
0
'"
S
'"~
::;:
0
U
CI)
E
ex>
117
! ! !!
..
....
... ~.. -.~ ... ~ ... ~ .......;. ...~ ...... ~ ... ~....:. ...~ ...
_
~.: ·. :·,t".: ;:~,.
....: ... '.' ',' f.!.:'.",'.: .......
' ·.t,:'..:·.·
'.' ',' ...
·,
·.':.f:·: ,: ....
,.
·.'.:·,.'.1,:·.··.·'....1.:·,· ·,",·f.:.:',' ·.·!.i:·:·....·,
!:!!::
::
! l !!
11 111!
..i... -r ...r..· .. .
o
o
N
··.i···~····~ ..·i· ..'; ... ~... ···;···1··· ... .:,. ...;. ... ;....... ..·r.··!·.·~·
,'.~,:· "
:::·,i.,::·... .........,';.:.: '.' . . . i.I,,:.:'...,·.I,.::..:·.·l,.:...·.:
::1::1::: ::+::1:::1:::1::: :::t:::t:::t::t:i:::t::: :::
,+.+
....·f. ,t..·j. +....·f..·f..,l. ·;. . f..·f·....,"'1"'~ '"
···t-··r··· ~.-. ~...
... ~ ... : ...... .:. ...~ ... : •.. ! ...
a>
"'r"'r" .~ .. -i" -t"'f .0. . ..
"orO'I·OT'or'!'·';'·' ...
...L.i.. ....1.J... L.L. . . . . . .
...:L..L
..... t ..L..L..t.. ~~~~.~:]" :J,.~J,.~~j. :::~.~::: ::: ~
:
.... : : : : : :
··'t···j"· ···t··'!'·'i,··t-: ···;···~··T··r·r·T·· ..
"
0
::::
g
0
o
::]~::j::: ~::!:::t:::i:::i:::~::I:::~:::t::t::l:::i::: :::
::1::1::: :::l::E:I:::F :::I::1::I:::I:::tE:
o - :UTL:n:
80- _ :,':.':.'
~.
JIILTIIITt:j::I: =~:ji:l= :-tH=ttj: . . .
l
:l.",,::.': :...:,l
:... . . :'.:.:,.I..".,:f :,' :,' :.'
:.!,.",::.:.. , : .
:::~ ~
::.1.,::':
. . ....:.:':.'"
.,. .f :.,:.:'.:':.'.:!.,:i,
. ..:,.:':.!:i.., ":..
. 1:...,: ..:, :.:,.1",.,:[:" ..::,.
:....
., ,
-
···f····:····)···,··· ....:....,. .... u •••• -t••• -:•••••••.
:.~",i
.
···~···-:····)···I··.~
· ·-:-· ·t· ·t· ·~· ·
:.!. ··,t···,···
···:-···'···f···i····:····.··· -..
- :::1:::1::: '::f:::I:::I:::J::: :::t:::I:::I:::j:::f:::I::: :::-
:...:, :.' ....::,J".,,::::.' :.. :..:[...1,., :,':.'.':I"".,:f.:'.'::,' :.!,:::,'
.... ..: ::,f:,. :._
...-:.·. ..')-u_I •••.•••:.•..•••••.•• 1...
i -~llll~[~I[tltj[~lf~l:t
o
to
o
·f..·[·....,+..·f..·f..·j·.. .+-+.. j... j.. ,+,-+..... ~
·. t"'f"· ·. j..·j..,t"·f"· . ·j..·j....f. t..]·. t.. :::1:::1::: :::t:::\:::I:::I::: :l::I:::\:::j:::t:::I::: :::
o
....
o
... L..LJ ..J. .....L..L.. ...L.~..-l...L.. ... L.1....L..L.L.L....L.. L....1.j...~ ... L. .. L.J. .. L.L..L ..L.. ".
. ++. 1. ·1. ·.++. . +-+++-- . +++. 1·+,+ .++....,f. ·I. ·I. ·I. ,.++'++++.....
~
'"
-eN
'"
-&
'"
~
CD
j::
-:::EFFF .:IE: :::EEFE ::11:E1::[E :::[:1::: .:II:EE ]::EI:EEr: :::~
.e-'"
m
E
0
a>
0
."", ..,:!." ... .·.·".,,1 .....·,,:1.·.,.· .'.','=.:! .....-",! ,' .......' .....:! ...' ....,:!.' ....=.:! .· ..., ,1.,.·.·
..
,'.·.'.·,:!.'.·.'.·.:!,·,·.·,·.:!.·.·.,.·":I,,.·,·.·.:! ...... __
.:! ,',' ..
,. ]·. t·"f"·:'"
:!:!
0
0
• •• )0 ••• 1.•• 1.•• "•.•.:. ••. ) ••. ".
~ -Jl1~tJt
1Hl:~t:lltl
_~,:
-
0
N
u
~
~
V)
:I:
U
:5u
o!
::;:
0
~'"
ttl
o!
::;:
8
o
o
o
01400
Freerun SOilS, 01200
I
I
I
I
I
I
I
I
·····~····f····i·····~·····f····i····+···+···t···+···+···f····i·····~·····t····i·····i···-·t····t····~·····t·····t···+····~····f····i····+····}····t····~·····~·····t····~·····~··..f. ·+···+····t···+····
,::::f:T:T::f::f::F::j:::T::T:T:::j::::FT::f:T:::F:f::fT::f::f:T:T:::j::::F:F:f::f::Ff:::j::::FT::f:T:T::f::f::F::
<PIB
·····i·····~····~·· .. ·i·····~····i·····i·····i····~···-·i··-··i·-···~-···i··-··i···--i····'(··-··i·····i····~· .... i.....i.....~ .... ~..... i.....~ .... ~..... i..... ~ ....t ..-.i ...-.i ..-..i...-i..... i.....~ .... ~..... i..... ~ .. -.~.. -.-
••••• ~ .•.•.~ .••• J...•. i.....t ... J..... i..... ~ ....L.... ~ .....i.....~ .... J•••••i.....~ ....J.....l.....t....L.... l.....!....l ....l..... i.....~ .... l..... i.....;....L.... i..... ~ .....~ .... ~ ..... ~ .....i .... ~..... i.....i .... ~.....
1 1
<P2B
;
i
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
1
!
!
!
!
!
!
!
!
!
:::::i:::t::L::!::::tJ::::!:::::I:::t:t::t:t::LJ:::tJ::::!::::t::Lt:::I:::t:L:t::Lt:::I::::t::Lt:J::t:J:::t::L:L::i::::t::L::
. ·. ~ .... f···+· ..+·. ·t..·+···+..·+. ·f..·+. ·+. ·t....i....+. . t..·+·. ·~· . . ~·. ·t·"+"·+"·f"·+"·+"··r·. +. ·+. ··t....t"·+"·+"·f"·+. ·+. ·t. ·+. ·+. . t·..·i..···
·.... j....t. ·+. ·+. ·+. +· . +
. ·+·. t. ·+. . i···..}....{····+....}..·+. ·+. . r....T·..+. ·+. . t..·+. ·+. . t....i....+·. +···t···+. ··~....·t..·+. ·+. . t..·+. ·+. ·+. +. .
$3B
::::l:::t:::t::T:::t:::t:::i::::t:::t::::r::T:::t:::t::I::::C::t::t:::t:::I::::r::T:::t:::t:::t:::t:::t:::t:::r:::t:::t:::l::::C:::t:::T:::t:::r::I::::C::r:::
:::::I::::i::::j:::::I:::::I::::j:::::I:::::i::::t::::1:::::I::::i::::l:::::I:::::I::::f.::::I:::::I::::i::::1:::::i::::i::::l:::::I::::f::::j:::::I:::::I::::t::::1:::::I:::::I::::l:::::i::::f::::I:::::I:::::I::::t::::
.,' .. t .... ·~· ... -c''' .. ~" •. '~"" i .... '1'" .. ~ ... ·7· .. ·~' .. ,·~ .. , ..~ .... i .... ', .....t .. ''-Coo ... , .....~ .... -;..... 1.... '~' ....~" "1" .. '1' " ..~ ... '-: •• , ,,', .... ~ ... '7" .. , •••.• } .... ,} .... '1 ..... : .... ~ •••• 1.... "I" ...} .... 1......
cjJ4B
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
!
:
:
:::::I::::f::::l:::::!:::::I::::!:::::!:::::I::::f::::!:::::I::::f::::j:::::I:::::I::::l:::::I:::::I::::f::::!:::::I::::f::::!:::::I::::f::::l:::::I:::::I::::f::::1:::::I:::::I::::!:::::I::::f::::l:::::I:::::I::::l:::::
!
HCLICSfART
!
·.... i .. ·..}· ..·.{· ..··{· .. ··~ ..··i.... ,i· ....i·.. ·.:..·.. i .... ·i··.. ·~· ..·i..... i..... ~ .... .{..... i..... j. .....:..... i.....
i....J....i.....i.....~ ....i..... i.... J.... j....~i.....~.....~ ....i.....i....J....i.....i.....~....i.....
1:::::I:::l:::j:::::j:::l:::j:::::I:::::I::::t::::j:::::I:::l:::j:::::I:::::I::::t::::j:::l:::t::::j:::::I:::l:::j:::::!::::t::::j:::::!:::l:::t::::j:::::I:::l:::j:::::!::::!::::j:::::I:::::kl:::
,;;:;;:;:~~;:;~i:-;~;:-;:~:;;;i~I:lt~l:fH1JI~I~j:[i~I~r
COMP_SYNC
COMP_BLANK
..... ~.... f··· '1'" ··1·····~··· ·1·····i···· '~""f"" ~.....~.... f··· ·1·····~·· ···t····1····· ~ .....~ .... f····~····· ~ . . t··· ·i··...!. . t···· i·····~ .....~.... f····~··· ··1····'r'" ·i·....~ ....·r····i····· ~ ...··t ..··1·····
1200
I
I
I
I
I
I
I
I
I
1220
1240
1260
1280
1300
1320
1340
1360
1380
Time Bit
1400
00
Freerun 5 OilS, 01400
_I
1
_I
1
01600
1
1
1
ll:lH~f+ll-+#++1+11:j:i=i=t.li::!:~::~:lj:r=!=ti~::lti:1II
4>18
·····f·····~····i·····t·····~····":·····t···
..
t····-:···· ·t·····t·····:-····-t·····I·····t····-t·····t·····t····.;· ····~·····t·····t····i·····I·····t····o;·····l·····:-··· ·-:-··
.. t·····t·· .. ·!-····t·····t .. ···:-····i·····I·····t····t·····
1;;;tt:l;n.ttt;i;.1+l~lU:tttti:l=ilttJ;tt:tltFtt:1:1l
4>2B
·····,·····,.····{·····'····4····{·····,· .... ) .... -:·····,·····)·····,.····{·····I·····)····{·····c .. ···,.····{·····{· .. ··)·····)-····{·····I·····,.···_o(····_J·····,.····{-····c·····)·····,.····{·····)·····j---·-i····-l·····}····{··_.-
,~~~~lJ~~~tJ~~~~t~~i~~~~1J~~~lJ~~J~~J~~~1:1:~:tJjl:::f::::t::::J:::::I:::l::J:::::I:::l::J:::::I:::::I::::t::::I:::::\:::t:::l:::::\:::l::J:::::/:::::I::::J:::::
4>38
.•..•i.....~ .... l..... i.....~ .... l..... i.....!.... ! ....l.....i.....~ .... l..... i.....~ ....l..... i.....~ .... i .... ~ .....i.....~ .... j..... i.....~ ....l..... i.....i .... i ....i.....i.....i .... J..... ~ ••••.L.... l..... i.....i....J.....
~:I::t:+j~+¥lt:I:I+j+l:tln::t=!::I::tHtj:!:+:tt:I::I:+J=I=j:t:j:tt
4>4B
:ijf:i:lI1:I:t:i=H:tl:i:l:i:~Hl=i=l-ld~ld~tttll:I::I:tfl:1+
HCllCSTART
·····r····T····r····l·····r····l:::::j:::::1::::t::::j:::::I::::i::::l:::::j:::::t::::l:::::!:::::t::::t::::l:::::I::::f::::l:::::i::::f::::l:::::I:::::I::::t::::l:::::!::::t::··t···l····r··-r····r··T···r····
COMP_SYNC
COMP_BLANK
:-n;tJ~tt-l~J~¥llJTl~=~1~~ttli:f~HJ;!=.J;f.l~ltr:t1~1-l~-~l
1400
1
1
1
1
1
1
1
1
1
1420
1440
1460
1480
1500
1520
1540
1560
1580
Time Bit
1600
\0
120
0
0
t
::::.:.::l:::::::::::.l.:
. . --:::::::
..
::::::'::.:::::::::l
..
::.:::::::::l
..
::.::.::::::t
..
::.,.:::::::
..
.:.::::::t::.:::::::::t
..
::.:::::::::;.:
..
::::::::::l
. . ,.:.: ..·.::::i::::.:::.:
. . ..:.::..::.:::::::
.
_
::rrrr
::r::C1:::L
: : ::
~
:::!:::!:::
:::
: : :::+:::1:::1:::1:::
: : : : :::!:::I:::l:::l:::t:::r:::
...L.L .. !... !... l...L. ....
:::f.:::!.::: :::+.:::f.:::!.:::!.::: ..·\ .. ·\..
. . . . ,. . .,. .,. .,. . ,..........,. ..,. .,. .,. . . . :::t::tt:t:: . .;. .
:
:::l:::t:: :::!:::j:t::t::: :::!:::j:::t:::I:::!:::l:::
:
:
:
·1·). +..·\..· ..·-
: 1 : : ! :
j ...... .; ... ; ... , ... ,... ..., ..., ... , ... , ...., ..., ......
.++.++. :::!:::!::: :::i:::!:::!:::j::: :::t:::t:::l:::l:::i:::f::: :::
-..·]. ·t....·[. ·1..·]....[..· ..·l..·]....i. -[-"·I..·]..· ..·t.. .+.+...+++.+....-t..·t"·j..++·t..· ... :::r:r: ::rr:r::r: ::rTTrr:r :::t:::!:::j:::t:: :::1:::1::: :::!:::I:::I:::I::: :::t:::t:::\:::j:::t:::\::: :::
·! .. ·! .. ·,,,,
o
~ -~:I.l~!f.:.ilr"I..I~I.:.
!.:;!,i"~.t:ttt:!t
:ttU: :j~:ln=I:f.
..
~
:::1:::1:::1::1: :::1:::1::: :::!:::I:::I:::J::: :::t:::t:::!:::!:::i:::t::: :::
o - :::l::+: :::1:::1:++:: :::1:::1:::1:::1:::1:::1::: :::I:::I:::l:::L
O~-
~
_ :. .::...:!:i. . . :. :.!.
:! ..
::.'
.
:~ ~ .:~
:.I. . .::.. :. :i. :. i:
. . .:(. :.. :.. :..:l. . . :. :....::. .:.!::i
. . . :. :...:!:.:::.. :..
:.. :...
:.!. . .
.-. ,.. •..... "·1· "-I" •••••• ·r···
!:. : . :. ·.:~
~ :~
: :l:;~:I:l: : :~i: '~: :!: : t: l:=:i: : i~:i:I~:;~_:l: :~
:.!:!.. :....: :.l.::. .::. I:i. . :. :. :i. :. j:.::I:J:J:::: . .,. .,. .,. . _.....,. .,......,. .,..............,. .,. .
:.!. . .
... {... ~......... ~ .. -I··· .c .. ,
:. :. ~:l :.· ~ :. ~.!:
..t"·["·l·..t.. :::f:::I:::I:::f:: :::1:::1::: ::1:::f:::I:::I::: :::f:::I:::t... ..,!.. 't·..
~
···~···I·· --t ••• .;... ,- -1···1···
"0) .• 4· . ·1', .{...
. .•• ,'·1···
:.:.l.
:I.·.::.:.:.::::
. . .. :!..
OJ
~
0
U>
~
...
0
~
0
N
~
0
0
~
:·:.:.·:.
. . . :.. :·:.:.:.·.:.:!
. . ::.:.:.l
..
:. ·. :.:.:..1:. . ::.:.:.:.!
. . ..:!::.:.:..
::t:t:t::t:: :::1:::1:::1:::1:: :::1:::1::: :::\:::1:::1:::1::: :::1:::1:::
0
OJ
:£
0
U>
:£
...
0
:£
0
N
:£
... ~.. -.:-..
··-f··-t···-t····~···
·.. t···-t· .. -:-···t .. ·, .. ·t.. ·
···t .. ·t···t···-t·.. ..·t···I"· · .. -:-· .. t .. ·,···t .. ·
.. ·t ... t ... t... ~... ·~ ... t ... •••
. ++ .+.+++. ·+·+++. +· .++.++..++. .+++.+...++.++++. . .
1..
.e.'"
..
.;;.
==
m
CD
E
i=
-j -lt1l:R=
- - :nnn
: lltflt:rt If Jj~[~t lit
_ :.:.. :.:.!:!:. . ...:..
0
..
-&
..
4
!;:
u
~
~
en
-'
::E
0
,d
u
:J:
o!
U
'"~
m
o!
::E
8
0
0
:£
Freerun 5 OilS, 21200
I
-'
I
21400
I
I
I
I
:!=jf:!=:!:!:I:tjt:I:~~I~:f:l::tj:I:I:t!:!;I~;I:I:~t~:~I=lf=I!:j:+I:j:f
<PIB
!
:::::!::::r::F:r::r:T:::F:r::r:;::::r::r::F:r::r::F::j:::+::r::;:::::F:r::;::::r:f::F:r:::f::::FT::r:r::F:r::r::F::r:r::;:::::
<P2B
:::::I::::f::::;:::::I:::::I::::I:::::I:::::I::::f::::1:::::1::::1::::;:::::1:::::1::::1:::::1:::::1::::1::::j:::::I::::f::::j:::::!::::t:4::::I:::::I::::t::::j:::::1::::+::::I:::::I::::+::::j:::::!:::::I::::I:::::
~1:t:¥f-;H:FFH~tttl-l:llFrtlm~t*:Fl~:j:rH:rrl-f~tll~~
<P3B
f
·.. ··l .... t·· ..1"····i.. ···!····1'· .. ·1· ....i·· .. t· .. t·..·~· .. ·t.... 1..···f·····t .... 1···.. i·····t ..··i.. ·.. 1· ·f .. ··t·· .. t·····f .. ···u::v· .... ~·· .. ·t .. ··t··.. i··· ..~·· .. 't .. ·t···T ... t .. ··1'··ur··· ..t·· .. 1' ....
<P4B
uo
HCU<-SfART
COMP_SYNC
COMP_BlANK
:::::j::::t::::t::::j:::::!::::I:::::IFf::r::T:::r::T::T::r::r::T::r:T::r:T::r:T::F+:::Fl::I:::::!::::t::::j:::::1:::::I::::j:::::I::::f::::l:::::J:::::I::::l:::::
,
I
21200
21220
i
I
i
21240
21260
I
i
I
21280
i
I
21300
Time Bit
i
I
21320
'
I
I
•
I
21340
21360
21380
i
21400
-tv
122
... ~ ...:...i...;....f...W-L.+ . .f... ~... j...
0
0
<D
! ! !!
::
....
···1··++·+··
.+++.+. +++.+. ::rrTT ::rr: ::rrrl:
... L..LJ ...L.....l .. L.. LJ .....1...L..L..L. ! : :! :: : : : i
- :::1::::.,:::l,1 ::::.C
~
: :~.i.~·.: .(.: l,cl: : :::.1: :l,(,: ~,i: :!.: :
;
::rrTTrr: : :
:rrrr ::rr: ::rrrr: ::rrrrrr: :
...~ ••• ! ••. ! ••. ~•••
N
! 1 11 ! 1
••....
"'l'u~,,- ···t··'r···iu,~", "'~-":"'1"':-":"':"""
0
<Xl
roo
. . j.+++. .+++.+. +++.+..++.++ "TT" "TT·TT"· :::~:::::::j:::l:::t:::t::: :::
O
-~.~~i.E.I.~~.[.I~[.[.~.i=E.:i.~:i.~ j~Eil
: : : : :1=1= THrU1~i:i:>... ..+.+-+.. +. . .
"'f'U~'" '-'T"+"1"'~'" ~
+..
···~···!···!···i··· ···~···i··· ····r···t···j···1-·· ..J... ~ ... i... ~.. -.~-.-i ... ...
++.++++. . .
) ...;...l...t .....;...;......+...;...;... ;....
f-
::rrTTrr: : :
:::t:::!:::!:::!:: :::I:::!::: :::!:::!:::!:::!:::
···;···i--.i-.. ~..... +-.~ . . ···+··+··i··,1,,·: :
···1···i····~ .. -;··· ...
))... j.).. ···;···1··· ..·+···;···1···;·..
:::1:::1:::!::11:!::: :::~
'''~'''!''+''+'' .. -~ ... ~ ... ···t···t···i···!···
...~...i...i...~...~ ...t.•. .••
...~...~ ...~... +.. ...~... ~... ··'f'·+·+-+··
.....:
: : : : . +.+. "'+"'r"+'+" : : !
::t::tt::t::
.+.+...-++.+.+. ::rrllr:r::~ : :" "
...i ...L.. i... ~...
i
: !
···J···I··· ···:····.···.···1··· · ..,. ...•...i ... i ....:- ...
... ...
ttlt :1=1= :UI=lC±:=t:ttl==>t~l:t :1=1= =I=1:li= lHlji: .•
: : ! !
···;···i···i·.. ~...
..+.+.. ···+···t··+·+·· ···t··+·+·+··+-··~··· ... ~
II)
N
0
<D
II)
N
0
....
II)
N
0
N
II)
N
0
0
II)
N
..L.L..LL
i...i... i... ~ ....~ ...i... ...
.++...++.+.+..++.++++. . . " "
o
•••
:::[:::I:::l:::i:: ::r:l::: :::r::r:rr: :T:r::j:::r:rl::: : :
::Err:r ::tt: :::1:::t:l::1: ::tttt:rt: : :. ++ . +.+++...+.++++.+..++.++ ·+·r:.dJ·. FFttFFFFF· . ·
... ~....:... ..·t···t .. ·~·.. ·:-· .. · .. t"·i.. ·-:-· ..t· .. t· .. t.. • .. ·~~~i~
.. ·l.. 'I........
·..ii
t·· I
~~iit
....· .. ·t· ... ·
<Xl
....
N
0
<D
....
N
Ii:
'"
~
.;;.'"
'"
.fJ.
J.
~
:5u
:c
....
....
0
N
0
N
....
N
iiiiii
• ~ •• t .. i
u
~
a!
::E
0
u
,I
.A.
........
5'"
£Xl
a!
::E
0
u
CI)
E
j::
0
:::!:::I:::I:::::: :::I:::j::: :::t:::I:::I:::!::: ::t:::I:::j:::j:::t:::i::: :::
...~ ... ~ ...~ ... ~... ...i...;... ...!....i... i...i..
-
m
0
0
....
N
123
:
:
:
:
···i···t··
~:~t~t:
: :
...L.L..L..L.....L.t.t ..L.L.t..
1 j it
j j
1 1.1
j
: : : : :: ::::
--rrrr
:::!. :::I. ::::::t. :::l.::::I.
"'i"'r'
:::I_.:::;.:-:::I. ::
::t:J--:tt::::::
···;···:···i···+-··
-_-.~
-_-~ - :~
"'i
r" ...:.... :... ...:....
i . r i' i
-++-++-+--\----++--1---1--++---+-+-f-+--:::1:::1::
...L..L..l....i... ...L..~...l ...L..l... ~... ···~···i···i..·;··· ·······1··· ··· ...···t·······t···..····..·· ···~···i····.. ·.·.... --+...
:
:
:
...:-: .. :- ..
... ,::... .:,.: ..
---++... -:... -:- ..
o
o
~
N
o
o
U)
:
:
--++---j----~--
---+-+-
::tt
:
:
:
:
-_-_:_:·:i.:-_--_-.:..
..:'_:-_- :l_-_-_:-_--..
..::.: ._- -_--_- -_- -.- -_- ....::.:.--.-- -_- ....:;._-- -_- :'.. _:-_- -_--..... _:-_-_::i·---:---.
..
.:!-:-----.
.
! ... : ... : ... ; ....; ... ... ~ ... ~... .:. ... ~ ... .. .
_1~I~li ~itl~li IIIf ~~I~itJiIl~II:~~H
tHti±tH±.ltliitltl:t. ill*:""
i ! ! i
i
~
! i !!
::::
::::
..·1-·· ...::
;... i... ·..~··.~...i...~...
---LL
···t···t···~·
.. ·t···
••
···r···~···l
···;·.·i...i... ~....~ ...t... .•.
::ttt:t::: :::t::t:tttt: :::t::ttt - -.- -.- - - -{- - .- -.- -,- - --->---.,.-.---.---->---.--- ---: -:~.- ·: -:· ~i·:- :~- : .:- _-~_ : ' -: ':~. ': -: ~.:' ':- :~_ -+-+-++- -+--j--- --+-i---I---I---~---~-- :---j--+++-- --~ -::11:
=-~
~::r:r: -:rrrT: ::r:rrTrr:: :::~
--TT"
:~- _- _:-.;I ··t···l···~···t···t··'l··t··t·, "r'T" "'r'r"r-T" "r'r'T"r'T'r" ...
--+-+- -: - _:~! - - .·;I.:- :- -:~ !
·_::·.C::·.~::: :::t::.t::.t:-.t: :::~.·::::.r::·,(:-.t:t::~.i::: :::
:
... i....~ ..
::
::..
:
C
::J
'CD
~
LL
..
::. . ':-:-: -:-:-:'::..
::. . ,:-:-_-1.:...::.:-:-:.:::=":.:-:
..
:
...
..
0
ex>
"-
N
0
<D
"-
N
..."0
N
0
.N
"-
N
···t···t···-:-···t···t···t··· ···;···i···i... ~... ···t···t··· ···-:-···t···t'··1·'· ···t···t···t···i····:-... t ••••••
N _:::j:::i:: ---~-.+++-- -·++-t---~---~--+- -++-++- :::1:::1::: :::i:::I:::I:::I::: :::I:::I:::j:::j:::t:::I::: :::~
(f)
N
::!:::
-:::rr
---,---"'--- : :I: :j: :t: :~: : :::j:::j:::f:::I:::l:::l::: :l::!:::l::l: :::1:::1::: :::f:::I:::j:::j::: :::I:::I:::I:::j:::f:::I::: ::: ~
·······t··· ..····.. ··· ···t··· .. ···... ···t···t··· h
0
0
ex>
:-:-:-.!:t:-:--. . __-_:---_:i-:·--_:·:-.·
.. ..:--_--.:-:t
..I
:. . :-:-:·:. . .
::rrrr
0
0
"-
N
<D
N
::---_:-:i
..
:::-:--·
.. _
::
'''r'''!'''j'''-r''
~
~
:::CI: :Htr :H+dJ ~ij1 =11:¥I:UJt~:m:::""
. +. +.. ::f:1::+1:: :::l:::LL!:::l:::l::: ---t---t---j--';"- ---'---1'-- ---->---.---.---.--- --->---.---,--....-->---.--- --- --++
... {... +..
-+-+-++ -++-- -++-+-+- -++--1--+++-- .+----l---t-:
:
0
<D
<D
N
:
:
··-{-··f··
: :
-:-:-.:1:-:-:-:·
. . ,1:-:-_--:..
:.1. :-:-:-:1:-:-:...
:-:-:-:·_:l:-:-:-:.. :I:-:-:-:..
:I:-:-:--.:
. . ..:f:-:-:-.-:1:-:-:-:'
. . .:,1:-:-:-
,
1
i! i
:
! ! !
j
i 1
-:::rr ::rIrr: :::j::IIr:i:::L
::t£
: :
:::t. :::1,:::1. :::1.:.::
:-_ : .:!-_ :_- ~.:·
-_--_-:_r
:-_-:_-_-l::
..
.. __
_:_:_:.-.:r_:_:_: :l_:_:_:,:.:!_:_:_:.:
...
..:!_:_:_:=
..:!
_: _:- ':~_: _: _:_:_:~
---1---1-++-- --+++-1---1--+. , '
'-rTTT---r-rrrT"T---[---l---j---j--- : :l:r: l:~: : :::::1:::l:r::::1:::::!:::t;b:i---l:i:::::1:::::!:::::1:::l:j::: :::
"·l"T··r·T" ···rT··r"r··1"T·· ..t···~···~···t"
'"r·r'r
.e-'"
'"
-eN
'"
-&
...
'"
-e-
...
0
<D
N
:::1,: :::1::::: :::1.,.:::t:: :::1,::::1::::: :::t,::::1"::::,::::1:::::1:,:::1::::: :::
_::__:_:_:.-.:l_:_:_: ,l-:-:-:
..
_:_:_:=-.:!_:_:_: :l-:-:-:.-.:l-:-:-:.:-.:!-:-:-:
...
~
,J
-'
CJ
::c
CJ
~
Z
~
:5
::;:
::;:
~
0
CJ
CD
~
8
CD
E
j::
0
ex>
::
••• ~••• J. ••
==
m
0
N
<D
N
0
0
<D
N
Freerun 50,",5, 21800
i
I
I
I
22000
I
I
I
I
·····~·····f····i·····~····+···i·····f·····f····t···+····f····t····i··-··~·····t···~i··~~F··t····t····iO&···!·····~····~·····~····+···i..···i·····~····t····~·····r····}···+····~·····t····i····+····t····i·····
••••• ; •••••:••••• .:••••• , ••••• ) •••• "••••• , ••••• } •••• , •• ••• ; ••••• ~ •••••} •••• ; ••••• J ••••• J. •••• O( ••••• , •• - •• J. •••••:••••• { ••••• ) .....). •••• { ••••• , •••••J. •••• .: ••••• J•••••;. •••• .:••••• , ••••• ) •••••,. •••• { ..... J. •••••,.. •••• , ••••• J•••••;. •••• -t•••••
:
Ij>IB
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
':::::/::::Lt::t::t:t::t::t::Lt::t::L:L:t:J:::L:t:t::t:t:::I::::t:::t:::!::::Lt::t:::t::::L:l:::::t::::Lt:J::t:::Lt:::1:::+:::
····+····r···+····~·····t···+····~·····~····t····i·····t·····r····i·····~·····t· .. ·i·····~·····t····t····~·····f····t···+····~·····t····i·····~···..t····t···+···+···t····i·····~·····t····i·····f····+···i·····
1j>2B
::::r:::t:::l:::I:::::1::::j:::::r::1::::t::::j:::::/:::::t::::j:::::I:::::t::::j:::::j:::::t::::t::::j:::::I::::i::::I:::::I::::f::::I:::::I:::::I::::t::::I:::::I::::i::::I:::::I::::f::::j:::::I:::::I::::j:::::
·····I·····r····i'·····~·····,.····i'·····f·····'····.,:··· ··~·····'·····r····;'·····I·····'·
..·;'·····f·····,.····-:·····i·····'·····}····;'·····,·····,.····;'·····I·····,.····{·····C·····J·····,.····(·····,·····jIo····i'·····F·····,. .... ;'.....
1j>3B
: : :I: :l: :l: : :/: : :I: : l: : :j: : :I: : t: : I: : :I: :l: :l: : :I: : :I: : l: : :j: : :I: : t: : j: : :1: : t: : l: : :I: : t: : t.: : I: : :I: : f: : j: : :1: : t: : j: : :I: : ~: : I: : :I: :t: :l: : :
$48
~ ~ ~I~ ~fJ~ ~ r~1~ 1~ ~I~ ~ rTj~ ~ r4~ 1~ ~I~ ~1~ ~I~ ~r~J~J~ ~ I~ ~ ~I~ ~ I~ ~ I~ ~ ~I~ ~ I~ ~ I~ ~ ~I~ ~ ~1~ TJ~ ~ ~I~ ~ I~ ~lJ:~ ~t~t~ ~I~ ~lJ~ ~ ~
:
HCLK..START
CaMP_SYNC
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
I!-!~!!!=!!~I!!-!;!!!!!I!!!:!!!!;!-!;I!=!!!!:!!!!!!;!'~t=ill
·····I·····i-····,·····{·····~····.,:·····I·····}····
CaMP_BLANK
:
. . . ··· ·{·····,·····}····.,:·····I·····}· .. ·.,:·····(·····}···· ..... ····.,:·····,·····i-····(·····J·····i-····.,:·····t·····}····{..... ,..... , .....:-.... (..... , .....:-.... .,:..... ,.....}.... , .... .
·····~·····f···+···+····f···+···+···+···t···+···+···f···+····~·····f····t···+···+···t···+···+···t···+···+···f····i····+···+···f···+···+····f···+···+····t···+···+·..+. +....
21800
I
I
I
I
I
I
I
I
I
21B20
21840
21860
21880
21900
21920
21940
21960
21980
22000
Time Bit
.......
~
125
0
0
! : !!
• • ••
. ++....;. .
::::::
::::::
... ~ ....:-.. ··,!,·t·'t,nr'·· ··'1'·'i-·-t··'f'·'j'·'i
j... j....L .... ·j.. ·j..·+..·;..·i.. ·j..·
,
y~.: ;
- "TT'
..+..+.. : : ::
•
,
u
...... :,:; ......•
:,:; ......
......i,.:f •••
•••
::::
••••~ ••• ,~-.-,,! ••• .:.,: ••
..
••
N
N
N
! : ! ! : !
•••.••
"T"l'" "'r'l"l"'!'" ···r···~···~···i··· ...···;··· ...
.++.++, "',"','" "',"',"',"','" ..-f, .......
f !
. . {,. .t,...f,... ...
:
:
:
.•.•
:
.',:~ :. ~. . ! ! ! ",["T"
!!
!!!!
"·T"·r"T"!'''
.....::,. :::,',:::.1,:::.1,:::1,:::,i,'::: :::_
""
:::::: "'["T'TT'
"'!"'!"'!""'i'" "'r"'!-'- ···T··+·';'·-j-·· : : : : ~ :
N
•••••.•
:,:: ........: :,' •••••• y+,: ..... ......'.:!, ......•
0
:
... ~........ ...i... i... ~.. -.~ ... ···~···~···~- ..i...i... ~... ···~···t-··i···~··· ...;... ;-.- ···~.··;.··i ...~... ...t... t"'~"'i'''+''+'' ..
:: : : : : : : : : : : i i i ! i!
i i ! i ::::::
N
0
"·!'-+-.y··'r'·· "+-+"T"-r--+-+" '.:'.'.!...... -.·.·.·.CI~·. :·.·.f.·.·.'.'.!...... ·.~~r.~~:.: ·.·.~!,!·.·.·.·.f.·.·. ··t··,!,·,(t,·t··,(, ...
...'-+"T"
~....:... ..·!···~· .. t· ..f.. · .. ·~···1···t···f···i···1···
.
···r···r···i···i···+···~··· .. .
."~::".~.~,:,, ···i···i···~····~··· ···i···i···~···t···i,··i·,· .,.L.L..L.,L...i,J......l...L.,L,L. ···~··+··i···i····t,·+·· ... r- N
'"
! : :!
! : : 1 :!
! i i!
i i
!! l! : : : : : :
'.!
0
-
-'-r"T"
"'~.'."'-.:."
O
.·.·.·:t.·.·.·.·.i.·.·.·_·,i·.·.·.·.,l.·.·.·
: : ::
N
.·.·.·.·,i.·.·.·.·.~.....·=.~ .....·,i.'.·.... :i.·.·.·.·.~.·.·.· ·'r··i·--r·'r· "-r'T" '··r·T·'r'T'· "r'r'T'-t'r'T" ...
~ : : : "',~"',~".',:"'-,:" ".,}'.",:." "._,:...,~ ....,: ....,: ... ...t! ... !t... .:.! .. :!... .:.: ...il ..... .
:::
~ -:::j:::r .+.+.++....+-++++.+...t--·~"'l'''1·'' :::1:::1::: ·::t:::I:::j:::i:::: "r'::::l::l:t:::l::: :::~ N...
~
0
::rrr:r
·"1,,·t
...:. :.i !.: .: ;,i.: .:r..i·.: .:i, ~.: .: .:.:.:.;.i.:.:.·.;.i.:.:.:i,i.:·.·.:,i,!.:.:.:.i.!.:.:.:.;...i::.: ...,...!...!...!......'"t'''!'''
..·t..·(!"'!'" ..·(·((j..·t..·(· ..·
·.. j....r..
, ...!.....·t..·,..·! ..·!..· ..., ...,...!...!....,...,......
~
::
!!:!
··,: ..·t·· ···~· ..i"··r· ..l···
!!:!!!
···r··r···r···i·"!···l···
!!!:
::
::::
::::::
··t·..!···!···:··· ···i···j··· ·,·,,;···t···j···i··· ·..t···i···i···.j····!.. ··i·.... -
++ . .
.++.++
:::rr
::rr: :. Lr:cc
:::rr
: : :: :::::: ::r:rTT ::rr: :::Ff::rT:~:::;::::::Tl:rr: :::. +. :::1:::1:::1:::t::: ::t:t::1:::t::t:t:: ...;... ~
o - ..
L..L.L.L.....L.L.L ..:... L..L.
.++. . +++.+..++.++++. . . ~
o
.: .+.+++. . +++++.+. ".'. .,. .,. .~.. . , . ' . ., "".' '. . ..
o
.+.+.++....+++++.+....L..L.. L.L
::r::CCLLL.. . .
N
N
o
:::::a.
:: ) ... j.)....~...... j... j.))... j... j... i i i i
-
1..·
~,'
ii
iiii
iiiiii
i... j... ......,... /......<........,... ,......, ...,... ,...,...., ...,.....,
N
0
N
N
N
:!::
0
0
N
N
·f,·.~ .·~..· !,·.....·.!.:.·.·.i.·.·.·.f,:.~ .:::::I.:
· ........) ..J..~...L.....~..J....~...~... j..J.. .).)...~...1...t.) ... '.'
:
: ::
::::::
2 _:::rt
::rrrr: ::rTrr::r::r
:::j:::t:: ...
~
i...j...L...~......i...l...l ...i...i...l...
:.:.:.1,:
u.::~ tlltl:alt~
!... .... . . . !... •.
: !
... ~ ... ~ ... ~....~ ......
~ ~ ~-
~...
0
:::i,: :::i.::::r.:.:: :::1.,:::1.,::: .::t.,::::.;:::1,,:::1,,::: :::,[:::1"::::.!:::I":::i,,::::,;::: :::_
:. :.~,:'. :. :.~, :. :.~! : :. :.~" ,:. :.~":. :. ~.;:. :. :, :. . ·. :. f,:. :. I.: ·. ·. :.~ ,.: .: ·.~,':. :. :. :.~,;:. :.
:.:. :.:.:.["
:.:.:.
:.:.:.!"
:.:.i,;:.·:.:.I;::.:.:.·:,i,::.:.·.i,
.. :.:. :.:.:.1;::.:.:.1;::.:.:. ·.·.::.:.i:,.:.·:..
~.
..l.:
:.I;,:. ~,:". : ,":. :.; ·.: ~/.,:·
.. '·:.:.. :.;,;:.:..
N
N
~ ...
0
'"0
N
N
~
.
~
-:::j:+: :::1::1:11:: :::1:::1::1:1:::1::1: :::I:::I:::I:::t: ::t:l::: :::i::ttt :::t::::::tt:tl::: :::~
-:::rr
+++++.+..
: : .+.+++
~~~~~~l~~t~~C:. .~~~j~J:~:t:t~t::t:._
""0
:.:.:.
..·I,,:. :.:.:.l::.:..':1;,:.:.:. '.::.:.
0
0
N
N
:.:.:,f.:.:.:1,I.:.:.:.:,I:..:.:=,I.:.: .:.:.:.;,t.:.:.:.::!.:.:.: .·.:.:=..,I.:.:.:,I.:.:.:,I.:.:.:.::!.:.:.: .:.:.:,f.:.:.:,I.:.:.::,I.:.:.:.:,I.:.:.:.:,I.:.:.:,I.:.:.: .:.:.:
"·i· .. t··
~~I~~I~
: : ::
!i!!
::::::
!!i::i
....
::::
..
::
....
r
ii::
:
m
. .....
r
:!
~
.e-'"
'"
-eN
.e-'"
.,.'"
-e-
~
:5
u
:I:
0
N
0
N
N
i:i:::
.. t·...··"1·"i
··-i-··i···t,,·r···i·"i"·
"To'r'~ ···i"·i·"i·
. ,(t··t··t
..·t·"1···j·"~"- ~ ~: t,: ~:~t",:C~ .,.:C~ .,:i·~: ~~:t.:i~: ~",:C~ .:~ "':!:::t.,:i: :~.,.:C:~",:C:~., :C: .,.:t: : : :~.,.:C:~., :C:. ~ :~:t",:i:~: :::
l
u
~
'"a.!
~
8
:s'"
z
:5
~
8
CD
E
j::
... -:...-;-.. ...... ........:,...... -_:. ·.·..
g -:::l:::i:: .+. j..+. +.....j...j...+.+-+.+. ::i,:
III
0
0
0
N
N
22200
Freerun SOps,
I
I
I
22400
I
I
I
·····~·····t···+···+····t····i·····f·····~····t···+···+····t···+···+····t···+···+····t····t···+···+····t···+···+····t····i····+···+···t···+···+····t···+···+····t···-i-···+····t····i·····
·····1·····:·····,,·····,·····
..
...{.....}.....,. .... "..... ,.....}.... {..... ,.....•.....;..... {.....{.....}....{..... ,.....}....{..... ,.....,.····-:·····,·····.·····}····,,·· .. ·,····+·····;·····i···· ·r····"·····
:
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
····{·····,·····.····~··
::r~I:$I:f:tf~:ktlt:l:l:I::f:1=lilkf:lll:ll~--f-l:1:1::t::kt-l~-l!:;I:
$1B
$2B
<P38
$48
,
HCLK...START
COMP_SYNC
.
.
.
.
..
.
:1!lf;:I~-FEl":Fblll~lli-lTll,l:i:~~i:l~:i:i~::I::i:j~~ij:ll~~l:;!~r;:1
·····,·····;.····<·····(·····,.····i·····'·····)····-:·····{·····i·····,.····;:·····I·····;····{·····l·····}····<·····-c·····}·····l-····(·····I·····:-····{·····I·····;····.;·····l·····)·····;.····{·····i·····:-····i·····t·····}.... , .....
COMP_BLANK
·····~·····t···+-··+·-··t···+···+····~····t····~·····~····f···+···+····t····i····+····t····f····i····+···t···+···+····r..··i····+···+···t···+···+····r····~·····~····f···+···+····f···+····
22200
I
I
I
I
I
I
22220
22240
22260
22280
22300
22320
I
22340
I
22360
I
223BO
22400
Time Bit
......
N
0\
Freerun 50J.l5, 22400 - 22600
_----'-_ _l
·····~·····~····i····+·.. ·t····i·····~·····~····t····~·····~·····t····i····+···+···f···+····t····t···+···+····t····i····+····t····i··~i==t····t···+···+····~····i····+····~····i····+···+··+····
.. \.....;.....:-.... -(·····1·····,.·· ..
..·)·····)O·· ..
·····~·····:-····i·····~·····,.····i·····~·····l-···.,:···
:
$15
:
:
:
:
:
:
:
:
:
:
:
:
:
:
0( ••••• ; ••••• ,. •••••:••••• ( •••• ·}·····,.····~·····I·····,.·-··i·····I·····i·····:·····t ··
:
:
:
:
:
:
:
:
:
:
:
:
:
;
:
:
:
i· .. ··)·····}···· ..·····;··· ..l-····i·····
:
:
:
:
:
:
:
::::t::Lt::t::L::L:t:t::t:t::t:::Lt:::I:::t::t:t:t::t:t:::/::::1::::L::I:::+::t::t:::!:::t::I:::::I::::1:::+:::I::::1:::t:::I:::::I::::1:::::
·····~·····t···+····~·····t···+···+····~···-t···+···+····f·..+····f·····t··.. i····+····t····t····1·····~·····r···+····~····t····i·~··+····t····t····f·····f·····t···+···+····r···-1-···+····f···-i-····
$2B
:::::!::::1::::1:::::I:::::1:::1:::I:::::I::::1::::1::::1::t:1:::I:::::I:::1:::I:::::I:::t::1::::t::L:L::L:Lt:t:t::t::L:t:t:J:::t:t::t::t:t:::L::
$JB
:::::\:::+::1:::::\:::+:::1:::::1:::::1::+:::1:::::):::+::1:::::I:::::I::::j:::::/:::t:::!::::I:::::I::::!::::j:::::I:::l:::j:::::/:::::I::::!::::j:::::l:::t::l:::l:::+::j::::f:::I::::j:::::
$4B
:::::I:::l:l:::l:::l:::j:::::j:::l::l:+::f:l::F::!:::+::l::f:+::T::f:::I:::l::j:::::I::::t::::t.::::I:::::I:::l::j:::::I::::t::::j:::::I::::t:::J:::i:::::I::::j:::::
f·····
.... ·1·· ...~ .... ~ ...•. , .•• ··t···· "I •••••
HCLKsrART
COMP_SYNC
J•••• ~••••• , ••••• J.....)- .... t.... • , ..... t·· "-1-' ••• ,. •• ..t .... -:..... t·· ... ~ .....~ .... t .... ·,· ....~ .. • .-; ..... : . ....~ .... ~ .. .. t .... ·t .... ·:- ... ·t .... ·: .. ·· .:-.... of .... • f· ....:-.... ~.....
~::jjntlti:tt--!if.iJllitt:-ll-JjtittLt:i:+t=itj-=l:lft:
1~ i~=i~;I~i;l~il~I~I-~i: !;I~I -!-il;I:~I~ I:~:I~I=~1:l~ ;i~-I~l~ ;:I~:I-;I~ I: I~j:j~:1
•.. ··I .... ·}·· .. .(·· .. ·,· ....}· .. ·.(··· .. ,·····} .. ··~.. ···i .. • .. }· .. ··} .... i .... ·I·· .. ·}· .. ·i· .. ··t ..
CCMP_BLANK
···>· .. ·-;.. ·.. (·····} ..
··+····~
.. ·.. 1•....:-· .. ·"'·····,·· .. ·}· .. ··:.... ·,· .... }· ....}·· .. ,· .. ··)· .. ··:- .. ··i.... ·1 .... ·) .... "'·· .. •
.... ·~....f. ·+. ·+. ·+. +·..+·. +. +. ·+···+..·f. ·+·. +·. ·~· . +. ·+·..+. ·t···-i-..·+. ·f. ·+·. +. ·t·. +. ·+·. +. ·t. ·+·. +. . r·..+·. +....r..·+. ·+....t..·+....
22400
I
I
I
I
I
I
22420
22440
22460
224BO
22500
22520
Time Bit
22540
I
I
22560
22580
22600
tv
-....J
Freerun SOps, 22600
I
i
_L
_I
I
22800
I
I
i
:::::!::::i:::i:::::i:::::l::::i:::::i:::::l::::i::::l:::::!::::i::::i:::::!:::::I::::1:::::I:::::1::::i::::1:::::1:::::[::::1:::::1:::+:::1:::::!:::::!::::i::::l:::::l:::+:::l:::::l::::L::l:::::!:::::!::::i:::::
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
$18
~11H-rJ;tlt:ll~tllH11~;~i"H:lfl:f:'j~rllH=:rJllj11
$2B
$JB
:::::I::::t::::j:::::I:::::I::::j:::::l:::::l:::l::l:::::t:::l:::j:::::I:::::I::::j:::::1:::::I::::t::::j:::::/:::f::j::::f:f::j:::::I:::+::f:T:::I:::f:T:+::f:l:::I:::::f:::l:::
·····f····"!····!·····l·····!····!·····!···..!····!""···!"····f····-r····l·····i·····!····1""···!·····t····t·.. 1·····f····t.. ·t····f·····t····t···!"····!····!····!····T····! ····~····T···t····l·····!·····t····l·····
$4B
:::::I::::t::::j:::::j:::::I::::j:::::/:::::I::::f::::/:::::I::::t::::j:::::I:::::I::::j:::::j:::::I::::f::::l:::::I::::t::::l:::::I::::t::::l:::::I:::::I::::t::::!:::::I::::t::::l:::::I:::l:::J:::::!:::::I::::t::::
I
HCLK...srART
COMP_SYNC
COMP_BLANK
22600
I
I
22620
22640
22660
226BO
I
I
I
I
22700
22720
22740
22760
22780
22800
Time Bit
I-'
tv
00
Freerun 50J,ls, 22800
i
I
i
I
i
I
23000
I
-'
I
:::::1:::::f::::l:::::i:::::~::::j:::::i:::::!::::f.::::l:::::I:::::t::::j:::::I:::::!::::f):::::!::::f.::::J:::::1:::::!::::/:::::I:::::~::::j:::::I:::::I::::t.::::I:::::I:::::!::::/:::::!:::::!::::j:::::I:::::!::::j:::::
cj>1B
·-JlfllIlt1-J~jfI~Ht:l:tlll~!:11~rHl-lri~ll~I~!~11~Hlti~~
cj>2B
cj>3B
~:FH.l=.1.l~~Hl~lll-~lFFHj~J:l~JJf.J=.ll=1~lJI~l-l:rhll
<P4B
:::::!::::t::::j:::::I:::::I::::j:::::I:::::!::::t::::1:::::!::::t::::j:::::I:::::/::::j:::::I:::::I::::t::::j:::::I::::f::::j:::::I::::f::::j:::::I:::::I::::t::::I:::::I::::f::::j:::::I::::f::::j:::::I:::::I::::j:::::
HCLI<-.START
COMP_SYNC
.....i.....~ ....~.....i....Jp... L... i.....L ...~..... j.....L... J....L...i... j ....-~..... i....J .... .l.....~.....i....·~· ... i..... j•••••~ •••• ~••••• i.•...~....~...··i····.; .....;....~.....i.....; ....~..... i.....;.... i.....
·~!!~~!::!:!~:!:!~~!~!~=!~~:!:!~j~I~;!;l~i:ll~~!~I~i::~~t;:!;j::I~I;~,=I:j:H:kt::
·····I·····:-.. ··.:·····,·····~····<·····t·····J····-:···· ·(·····)·····,.····<.... ·1 •••••,. •••• .:..... { ••.• ·,. .. ··.:··· ··'O:····4·····~····~·····1·····~····.:·····1.··.·,.····-:- .. ··t·····J·····:-····~·····~·····:-····~·····I····.,.····~ .....
COMP_BlANK
····+···f···-i-···+····t···+···+···+···f···+···+···f···+···+···+··-i-···+···+···f···+···+···f···+···+···+···i····+···+···t···+···+····t···+···+····t···+···+···+··+····
22BOO
I
I
I
I
I
I
I
I
I
22820
22840
22860
22880
22900
22920
22940
22960
22980
23000
Time Bit
......
N
\0
Freerun SOps, 23000
23200
_l
i
i
i
i
i
i
i
i
: r i ! ! ! ! ! ! ! ! ! ! : ! : ! ! ! ! ! ! ! : ! ! ! : ! ! ! ! ! ! ! ! ! ! !
·····i····T···T····i····r···t···i·····i····r····r-···i····r···t···t···r···1"····i·····r····r····r-··r····r····l·····r····r····r···r··..r····r ..·i····r···r···r····i····r···-r····i····r··-r····
..·····i·· ...).... {.....
: :0 : : ; : ; : ..... j : : : : : : : : : : : : : : : : : : : : : : : : : : : : i
·····l·····:·····~·····;·····>····{·····I·····J····-:·· ···-r·····)·····:.····"·····I·····,.····i·····;·····,.·····:·····(·····)·····,.····1·····1·····:-····,·····1·····2- ·····:·····l·····~·····,.····I·····,.-·-··,.····
:::::t::::+::::j:::::!:::::t::::j:::::!:::::t::::~:::::!::::t::::j:::::!:::::!::::f,::::!:::::!::::i::::j:::::t::::t::::j:::::t::::t::::t.::::t:::::t::::t::::t:::::t::::t::::j:::::t::::t::::j:::::I:::::t::::j:::::
<PIB
..... , .. u·,.····"·····f·····:-····f·····f····-t····-;···· ·{·····t·····:-····,,·····,·····t····,,·····:·····t····-;· ····{·····l·····:-····~·····I·····:--····~·····:·····:-··· ·-:-····{·····r·····t····f·····t·····:-····f·····'·····t····f·····
<P2B
:::::I::::l;;;l:::I::::t:l:::I:::::i::Jili::i:::l;::i:::::1::::;1;;;1::::1:::1::1;::1:::::1:::1:::1::::;1;;;;1::;1::::1:::::t::J::::I:::::I:::::i;;::I:::::i::::I:::t:::I:::l;;;i:::::
·····!·····~····i·····!·····~····i·····!·····l····+····!·····~····+···+····!·····~····i·····i·····}·····i·····!·····~·····~····!·····!·····}····i·····i·····}····i·····i·····l·····~···+····t····+····i·····l·····}····i.... .
..... ;.....~ .... ~..... ;.....~ .... ~..... ;....•t.-.. .;. •... !.....t•••• .!. •••• ~•••••!.....~ .... ~..... ;.....~ .... .;. .... !.....:.... .!. •••• ;••••• i.....!. ••• -~•••••;•••••t.... .;.....;.....:.....~ .... !.....:.....~ .... ~.....;.....~ .... ~.....
:::::I::::t::::j:::::I:::::I::::j:::::I:::::I::::[]I:::::I::::t::::j:::::I:::::I::::f.::::I:::::I::::t::::I:::::1::::t::::I:::::I::::t::::j:::::!:::::f::::t::::I:::::1:::::I::::I:::::I::::t::::j:::::!:::+:::j:::::
<P3B
<P4B
HCLK..START
COMP_SYNC
COMP_BLANK
23000
I
I
I
I
I
I
I
I
I
23020
23040
23060
230BO
23100
23120
23140
23160
23180
23200
Time Bit
.....
UJ
o
Freerun 50/.1s, 23200
23400
q,lB
q,2B
q,JB
q,4B
HCLK..START
COMP_SYNC
COMP_BLANK
~lj1j--J~tfJ:14Jllltt:f:H:1H11Jtl-ttt!11:1it~;Ir
l_l~ I~;i;r~-l ~!~:i~f ~I;I:~l='l ~ l;l~j~:=i~ il;i~j~;~j~I~I~I:~ :~i~ I~I:~
::::r::Fll::l:::::I::::j:::::I:::::!::::i::::j:::::!::::i::::j:::::I:::::I::::f::::IFy:r:r::r::F:F::!:::T::F:r:T::r:r::r:T::T::Y:r::jf:::I:::::I::::f::::
i i i
23200
23220
23240
23260
i i i
23280
23300
Time Bit
23320
i i i
23340
23360
23380
23400
W
I-'
Freerun 50/Js, 42600
.i
_I
I
I
42800
I
I
1
I
·····~·····t···+···+···+···i·····f·····~····t···+···+····t····i·····f·····~····i····+···+···t···+···+····t···+···+····f····i····+····t····t···+···+····F~·i····+····t····{····+···+··+····
l·····;.····{·····J·····J····.f·····r·····)·····:·.... (.....;.....;. .... ,.....,.....,. .... ,.....
···,.····-:·····i·····,.·· ..{.....
: : : : : : : : : : : : : : : : : : : : : : : : 1...·1 : : : : : : : : : : : : :
••••• J•••••:••••• , ••••• , •••••,. •••• " ••••• , ••••• J •••• ..;. •• ··;· ....
«PIS
J •••••,. •••• ..;·····,·····,·····,.····,·····; ..
:::::I::::f::::j:::::I:::::I::::j:::::I:::::I::::f::::j:::::I::::f::::j:::::I:::::I::::j:::::I:::::I::::f::::1:::::I::::t::::I:::::I::::f:4::::!:::::I::::f::::/:::::!:::l:::l:::::!::::t::::I:::::!:::::I::::I:::::
.... -1-' ... ...,"-.•. -t··· .. ,. .... 'I.•••• -t···· oJ- •• ,-;- •••• "••••• }••
~
0 • • : - - • • • ,,_ • • •
,t,···
-t···· 'I.••••• t··· ..J •••••:••
0 ••
i'··· -to ••••~ •••• t·· ••• , ••••. ~ •••• ~•••
··1···· ..... ;- .... ,... oo} ..... .... t· ....}..... •••• <t..... t·· ... •••
.~
~
~
~
,~.
,- ••
:H~rrrriJ:l;rtl-lXrtl:rt:lTrJ~i;lij!;l--FI:l;;t:t-rrllt
<P2B
:t:]::I:l:lll:1HlHrj-~FI~Hl~1-:f:f::I~-j:l:r-t~I~Frl~tl:l:f:-t-=
«P3B
....................
$4B
HCLK....START
CaMP_SYNC
CaMP_BLANK
:::::!::::t::::j:::::!:::::!::::j:::::!::fr::FT:::r:::f::::r::r:::r::r::::!:::::r:::r::::r:::r:::r::r::::!:::T:::r]:1:::::I::::t::::I:::::I::::i::::j:::::I::::t::::j:::::I:::::I::::j::::::
42600
I
I
I
42620
42640
42660
I
42660
1
42700
Time Bit
1
42720
1
42740
1
I
42760
42760
42600
Ul
tv
Freerun SOilS, 42800
i
I
i
_I
i
i
43000
~
~
J
IPlB
=rlil:j=~i!:i:i:l~i=l~i:;r=UJln-::l:t-:U_-flTtljfHHI
IP2B
:TrFn+:FFFFTrFi:i:FFr-}~rf!~IjTrTffr[_-l-Ijl::r*:i='U::
IP3B
::f-f:FFlFl~FFfJ;tlll:H~Mi~trl:l~fll-Frl-HilHll4:
:iil:tt=t:l~tl~t~I:JJlJ:l~I~1H1-1-:I~ldj:l=.rj;I~r:U:l:FFFi~ll
~~~~~[JJ:~~~f~I]~~~~f~J~I~~I~~r~~LI~~f~lj~~~IJ~~~r~~rl~~lJ~~~J~~~I~~~lJ~~~~~I~~~f~~I~~~~~I~~~~Ll~J~~~fl~~~!~~J~~~l~~~
...........
IP4B
HCLICSTART
-
....
-
-
..
:::::j:::l::j:::::!:::::t::::j:::::!:::::I::::t::::!:::::I::::t::::j:::::I:::::t:::l:::!:::::t::::t::::j:::::!::::t::::j:::::!::::t::::t.::::!:::::!::::i::::j:::::!::::t::::j:::::!::::t::::j:::::I:::::kl:::
COMP_SYNC
COMP_BLANK
ilrlllllJ:111l1i-r~Jil~I~!~-I"iI-I~~I!:i:~!I::llj1l:
42800
I
I
I
r
I
42820
42840
42860
42880
42900
Time Bit
42920
42940
I
I
42960
42980
43000
W
W
Freerun 50J,ls, 43000 - 43050
·····!·····~····i····+···+···i····+···+···t····i·····~·····~····i·····~·····t····i·····~·····~····t···+···+····t····i····+····t····i·····j····+···f···+···+····t···+····~····t····i····+····t····i·····
.. ···,·····,.····i·····'·····:.·····:·····(·····,.·····;.····{.. ···,.·····;.···· ..·····r·····;.····i·····
·····i·····;.····,·····,·····,.····,·····r·····~····-:·····~·····i·····;.····"·····,····-,.····l·····:·····,.·····:·····,·····,.·····;.····(
<\lIB
:::::!::+:::j:::::t:::t::::j:::::!:::::!::::t:::j:::::t::::t::::j:::::I:::::/::::j:::::I:::::I::::t::::l:::::I::::t::::l:::::I:::::I::::j:::::I:::::I::::t::::I::::J::t:::l:::::1::::t::::t::::I:::::/::::j:::::
·:~!t~~!~!~FF!4~fj~~f~I::m~r~lfHq~E[-:Jltl:THj~:la~FEt=tB~J~
4>2B
..
••••• , .....;. •••• { ..... , ••••• ~ •••• " ••••• , ••••• J•••••:•••• ·i'·····~·····~····i'·····I·····Jo····,,·····(·····)·····:·····<·····)·····Jo····(·····I·····:-····"·····I·····~·····:·····{·····~·····:-····(·····}·····~·· "·····f·····~
....".....
: : :!: : r: j: : :I: : :!: : j: : :I: : :!: : t: :f~ r~l~]~ ~ i~ ~ :I~]~ ~fJ~ ~I~l~ ~I~ I~ l~ ~i~ ~l~ l~ ~i~ ~I~ l~ ~i~ ~ ~i~ J~ ~ i~ ~ ~I~ ~I~IJ~ ~ I~ ~ I~ ~ ~
<\l3B
:::::/:::l::j:::::/:::::I::::j:::::I:::::I::::t::::l:::::/:::l::j:::::/:::::I::::j:::::j:::::I::::t::::1:::::I:::l::l:::::/:::::I::::j:::::/:::::I::::f::::/:::::/:::l::l:::::/::::t::::J:::::/:::::I::::j:::::
<\l4B
··· ..!""·-t....1'"·-·! ..-··! .... r..·T .. ··r ..··r.. ·~~:~:T:::t:::r::l:::I:::L::I:::I:::I:::I::::L::I::::L::I:::r:::L:J:::::t::::I:::I:::T:~:r:~:L:~T::::L::L::I::::L::r:::
:::::!:::+::t:::f:::!::::t::::!:::::!::::t:::!:::::I:::l:::j:::::I:::::I::::t::::/:::t:::L:I:::::/::::t::::I:::::I:::+::I:::::l:::::f::::t::::I:::::!::::t::::I:::::/:::+::/:::::1:::::1::::/:::::
HCU<-START
COMP_SYNC
..... , .....). .... (..... , ..... ».... "..... , ..... , .....:..... (...........:-.•.. O(· ..··I··· ..»····O(·····,· ....)· ....:.... ·~ .... ·•· .. ··» .. ··" .. ·.. I·· .. ·,. .... " .... ·I·· .. ·)· .. ··:· .... , .... ·)· ....,. .... ~ .. • .. I .... ·»·· .. ,,·····,•.... 1.... "· .. ••
:1~H:':l+1~:':t:!jll;I~I:II=I;II~I~!llllj~I~I~:I~I~:1~1~:I~~I~I~!I~I~!:
·····I· ....:.·· .. {· .. ··I .... ·~· .. ·.:.... ·I .. ···I· .. ·-:· .. ··" .... ·I· ....:-.... ( .... ·I· ....~····(·· ... I .....~ .... -:- .... ( ..... ) .... ·:-.... (.· .. ·I .. · ..:-· .. ·(· .... I· ....I .... ( .... ·, .. • .. )· ....:-· .. ·~ .... ·I .... ·:-· .. ·(.... ·I·· .. ·) .. ··(.....
COMP_BLANK
-----j---+--+--+-+--+---j---+-+---!:::::I::::t::::j:::::!:::::!::::j:::::!:::::I::::i::::j:::::I::::f::::j:::::!::::f::::j:::::!:::::I::::f::::!:::::!::::f::::j:::::!::::f::::j:::::!:::::!::::j:::::
43000
I
I
43020
43040
I
43060
I
43080
I
43100
I
43120
I
43140
I
I
43160
431BO
43200
Time Bit
......
w
~
135
o
o
:lrfr ~.!:
N
.::.·I,.:.:.:,..::.:•. ,:,:",,!:,:,: ·.:.::I.:.·.:.:I.,.:.:.:I.,.::.:.:!:.:.:.:
-
::
j:
••
.. ~...,.....,..
.
.
:Tr
::I::j:::I::I:: ::f::I:: :t::f::!::f:: ::I::j::l::j::J::t:
::I::q::!:: ::1::1::
,,(ttl"
.
t,,(
..
ti":"!'
::I.::I.::t.::!.::I.::t.:
::1::1:::
::n::n::
"j"]'"'r"i" 'TT' TTTT
.: ... . Trr-
·· ..···.. ··1·· .. ·· ··t--i-·-:-.. t·· ·''1···t··t··''!·· ··I··i-··t··l·· ···:-··t·· ··-:···.··1··-::·· ··i··~··.:.··i··i··.;.··
.. i··~·.·
.-; .. ~...; .. i.-
o
10
.·~·.t ..
l+·j. ::I::l::t::I:: ::t:I::I::f: .++++. ++. ·+·l++ ++++++ .++. ··H++· ++.
~. ,.......,. ,..... ::U:::U:: ::tt ::t:U:t :..:.,:.:. '.::l. :._~:·.:? '.:l ~.: '~._: ·.:~ .: _: :f:[.:.:.:r-.
g - ::1:::U::t:
::t::l::!::j:: ....,j.....
.. j..+.. j....+..j..:.. j.. ::1::1:::1::1:: ::t::I:: ::t::l::\::t.:
..+..
~ :. _.:j .~ : t.:·".!: .: i: ·.: ::I::!::U:: :tl::!::t.:
:.:.:!:.:.:,. .:.~ .: .=.~-:..:.:!:... :. :.:.:.:.!.:.:...
_
o
g
..
..
.:.:'.::i.:.:.:.:.. ..
::i.::.:.·
. . '.: '.:
:l. ..::·.:.:·.:;.:.: .:·.:.::i.:·.:
. . '.: '.:.?.
:!.:.: . : . .
:!:.:.'
.~-.: ++++.
++++++ ::n:
.++ ::rlrr
++H. IF
++. r... ++... +·H+
.... :rrrrrr
"H'"'''''' ..., .., .... { ............ " ' .. 1"""'.. 1.. ·, .... I .. '· .... , .. , ...... , ....... , ..
..
:.:f:.:. . .
-Ulf Wi ltH ]:!:I: ~): ~
~.. :~ :~ :~ :~.:~ :~. :~,. :.~ :~.
v.
. . :.[.:·.: '.:
1.;.
jJ: J): lL:1 : !: :~ ·: 1: :! : ~.:~·: :~.:!:~i: :~: ~:': f:1i: ·:~.· f: 1: >-
JIlllj:
:lr
:fH::I:: :H: r..{......,..,...........:..................,.. ::l::I:::t::!:: ::1::1:: :tl::l::t: . '·. .
+H+ +H+ +H+ ttt :It 1',1]::1:
_ .:.::i.:.:.:;
. . :t.:.:·
. . . .:!.:.:·
. ..:!'. .:.: :.::!
.. . .
.
.
·.:!. ... :i. :.:1.. :. ;. :. '.: :.:.:
. . ..:.:. . :. ;-.: . :. . '.:
.
f..
.. ,..,...,.. ,....., ..,..............,..
..: ..1
..·:.. j.... j....+..j.. j.. +.
H
g
-
0
;!:
0
~
==
m
0
~
.. I · + .. I .. " " ............ , ....... , ..
~-·iHtmlm
i -HHHH =tl=l:t Ill;~I I!I:I
::LUI
g
j::
0
10
o
'"
:[.: .:j.: .: ~.: :!.: .: ~.: _~:r.: .·:!.: .:.:.~:r.:.: r.: .·:!.: _~:f.: ::u:::u:: ::n::
::l::J::I::1::n: 'II. ::i::I::t::l:: ::U::r..i ..' .. J ..
J ..
~. ::1:+1:1:: ::H:: ::H::I::t.: iii i (. i ';; ; i i i i i
.
.:.:..
.:.:-.':!.'.:.:..
i ....
i .. i..
Jmtf fiH1Hf-
-tiff ~~~ii;mt1~~I= ~I~ ~1!lltl+'*R :fll=i: #
+1-1+ ;;" ;'" ..
!;:
OIl
-&-
OIl
.&.
OIl
.e-
OIl
.g.
~
~
u
:t:
u
~
U)
c!
::;:
0
U
~
Z
:5
a:J
c!
w
...J
CD
«
Z
w
::;:
,,2
8
u
...J
'"
w
Cl
Cl
0:
I-
CD
E
o
N
o
Trigger 1/60 s, 21400 - 21 600
~_ _
1-
I
~~~~~I~~~~bl~~~I~~~~~I~~~l~~~I~~~~~!~~~~Ll~~~I~~~~bl~~~1~~~~~I~~~~bt~~~I~~~~tt~~~~I~~4~~~I~~~~~!~~~t~l~~~I~~~~~I~~~~Lt~~~!~~4d~~~~~!~~4d~~~~I~~~~~bl~~~
cj>1B
'~f~f~F~r~~ff~~l+~FFf=j~F¥:f¥F~~tJ:~I~t_t-:i:~n::ltt:~i~::f~::iJ--:
cj>2B
~~~~~HrT~J~~~~~I~~~~F~f~l~T~~T~~r~+~~F~I~~~+~T~~~I~~~+~~I~~I~~~~~I~~~+~~F~~I~~~~r.::F:r:+:::F:F:f::FT::f:+::F:r:+:::l:::::
cj>3B
~~~~~I~~~~bl~~~I~~~~~I~~~~l~~~~~I~~~~~bl~~~I~~~~~I~~~~bl~~~I~~~~~I~~~~l~~~~~I~~~~~bl~~~I~~~~~I~~~~bl~Jd~. +··+····f··+··+·+··+·+·+··+·+. +··+·+···
cj>4B
.....i.....~ .... ~..... i.....;.... ~.....i.....i....~.....~.....~ .....i .... ~.....i.....i.... ~..... i:.:.~i ... -~.. ·-·(·····i·····~····i·····i·····~····~·····i·····i····.:·····i·····i·····~-···{·····i····-~-·-·.{·····i·····j.· ... .c.....
·····~····f···-i··-··~·-·-·r·-··1·····i··· .. ~····+····~·····~····+····1·····~·····r···-1···-·!··-··r····+····1· .. ··~····+····~····+···+····1·····!·····r····+····~·····r·· ..+···+···+···+···+_·-+-···r····+····
HCLJ<-START
:::::j:::T:::F::FT::T:::F:f:f::F:f::FT::f:l:::Ff:::/::::F:!:::::I::::!::::I:::::I::::!::::I:::::I:::t:::!::::I:::::1:::t:::I:::::I:::t:::t::::I:::::t::::!::::..
·····!····t····1·····:·····~····1·····:·····:····t···· :·····:····t····1·····!·····:····1·····!·····r····t··· ·1·····:····-:····:····-:·····~····1·····:····t····t····:·····!····t····:·····:····-:····:·····!·····~····:···
COMP_SYNC
COMULANK
:::::l::::L:L::E:::l::::E::E:::l:::l:::L::l:::::f::::E::!:::::F:E::E::1::£:t:::!:::t::t:::!::::Lt:::!:::::!::::t::!:::::!::::t:t:::l::::t:t::t::t:t:::
:::::I:::+:::!:::::!:::l::l:::j:::::!:::l::!:::::!:::l:::j:::::!:::::!:::l:::!:::::!::J::t:::!:::+::J:::!:::+::l:::I:::::I:::l:J:::!::::L:j:::::1:::+:::1:::::1:::::1:::+:::
·····!····+····1·····!·····r····1·····!·····~····+····1·····!····+····1·····!·····~····1·····i·····~····+····j·····i····+····f·····i····+····i·····i·····r····+····!·····j····f····i·····f····+····,·····i·····r····+····
.. ·..
·····;·····;····i·····!·····lu··i·····i·····~····t···· 1·····l····t····i·····!·····t .. ··i·····!·····t····i.. ···1·····!····t····i·····!····t····1·····!··.. ··r····t···· i·····!·····~····i·····!·····;····1·····~·····;····i
CLJ<-ENABLE
TRIGGER
~~~~~I~~~~Ff~~I~~~l~~~!~~~~~I~~~~~I~~~~F~!~~~lH~~~~F~~!~~~~~I~~~l~~~I~~~~~F~F~!~~~~~!~~~~ht~~~!~~4~~~1~~~~~!~~~~~!~~~~bt~~~!~~4~~~!~~~~~!~~4~~l~~~!~~~~ld~~~~
:::::r::+::::r:::r::::~::::r:::r::::~::::r:::~:::::~::::r:::r:::~:::::~::::r:::r::::~::::r:::~:::::~:::::~::::~:::::!:::::~::::~:::::~:::::~::::+::::~:::::~:::::~::::~:::::~::::+::::~:::::~:::::~::::~:::::
i
I
21400
21420
i
I
21440
i
,
,
,
I
I
I
I
21460
21480
21500
21520
i
I
i
21540
21560
I
'
I
21580
21600
Time Bit
.....
W
0\
Trigger 1/60
5,
23000 - 23200
- - L - - - _ - - - - L -_ _,
-
I
cjJlB
cjJ2B
cjJ3B
cjJ4B
HCU<-SfART
::;i:t::I::iJ:I:t:j::t;I!:~H-~--1-!~~-f::-::!::I='f:--l:-~~-~:-t::!::H:l~:!-~1:~::t=:!=f:l~I~::
·····!·····:····1.. ···:·····:····1·····:·····:····:···· ·1·····~· ..·t····:·····!·····!'····i"····!·····!'····t····1·····!····t····1·····!····t····t····!·····!'····t··.. ·!·····:····t····1·····:····t····1·····!·····r····1·····
COMP_SYNC
COMP_BLANK
CU<-ENABLE
TRIGGER
:::::E:1::FJ::::t::::E:T::I::1:::1:::::E:1::1:::::E:T::l::1::::E::F:E:t:t::t::t:t:::t:t:t::t::J::::t:::t::t::t:t::t::t::t:t:::
:IJ:l::i~-~~f:t-;='!;1Ii~i::rr:it;lJ;-J-;i-~i~iitt:!:I:i:j=:f::lttl+:j::!=tt
:::::i:::i::l:::::j:::::i::::l:::::i:::::i::j::::j:::Jt::::4::::j:::::l:::::f::::j:::::l:::::f::::f::::l:::::t::::f::::jli::::i:j:::jr::t::::+::::l:::::l::::4::::(::1::::+::::t::::l:::::t::::l:::::
:i:t1:::I~:i,ld='I~!::m]!:J~ktl:id::i':~!d+~1::tH!d=iH:Fr!:fl:
I
23000
23020
23040
23060
230BO
23100
23120
23140
23160
231BO
23200
Time Bit
.....
w
-....l
Trigger 1/60 s, 23200
:
:
:
i:
:
:
:
i:
:
:
:
L__
:
:
:
:
I
:
:
_ _1_ _
:
:
:
:
:
:
I
:
:
23400
:
:
I
l
:
_ _L
:
:
:
:
:
:
_I
:
:
:
:
:::::F::+::::r:::F::r:::~:::::~:::::F::r:::F:::~:::::r:::F:::r:::r:::F:::~:::::~::::F:::F:::F:::~::::r::::f::::r:::r::::~::::T:::r:::~::::r:::f::::F:::F::r:::r::::~::::T:::r:::
Itrl;f~H:tltj;:11J-~Lfl-1~tH;l:lflJ~l:Ll~-lI~f;M~tl~lt
<PIB
$2B
1!:r:Fr:r:ni::~~~:::r:r:rr~l::r:rl~=:i:!:rFr~:~:r:!!'fH,:i=rcr
.. _--!" - ----1··.··!···.·:····1·.···!--·.·r-·.·r·.··1·--··i-·.·t···-:-·_--!_···-:···-:·····!_····:-··-:···-:··__
···:····1·····
~_:!:rHllJ:1J:JJI~tt]~:t:t.tI:[=:t:H~!:=:r-I!!I1~1:~!=:f:]:j~II:H:'
·!·· ·--:··-·~·-··-!-·---:--·-:·---·!·----:·--·r····!·-···:- ···t····:····-:
<P3B
<P4B
HCLK...START
_. :····j·····!..
gr-H-:[:j::f::[::Ef:I!:::ff:~1!.~tj=:trt:~=i=t-tf::f.::j-:Ff:JEtj-EF
·····:·····~····:·····!····-:····:·····:·····!····t····~·····!····t····:·····!·····:····:-····1·····:····t···· 1·····:····-:····1·····:·····:-····1'····1·····:····1"····:·····t·····:-····:·····t····-:····:-····!·····!····i.. ···
COMP_SYNC
COMP_BLANK
:::::1:::+::1:::1:::::1:::1:::1:::::1:::+::+::1::1:::1:::::1:::::1:::1:::1:::::1:::1::+:::I::::1:::+:::I:::t::1:::::I:::::I:::t::I::::1::t:::1:::::1::::1:::+:::1:::::1::+:::
::::t:t::Lt:::t:::t:::t:::t:t::J:::::t::::1::::t:::t::::t::::t:--:1:::t::t:t::t:t:::L:t:t::t:J::::t:::t:t:::t:::t::t:::t:::t:::1"":::::::::I::::t::::
:
.
: .. !.....~ .... ~..... ;..... t•••• ~ •••. ~ ..... ~ ...• 4. .... J••••• ;•••••~ •••• J.. :
.
:
.
.
.
.
.
.
.
•
.
.
.
•
.
•
.
.
: •.• i..... ~ .... J•••••
,:::::L::±::::l::::j:::::t::j:::j:::::t::::±::::l:::::~::::±::::L:::L:::~::::l:::::l:::::~::::±::::l::::i:::±:::t::::L:::±::::t:::t::::~::::±::::l:::::L:::i::::]:::::~::::i::::i::::t::::t::::r.::::
CLK...ENABLE
TRIGGER
l::::!::::L::t+!:::::t::::j:::::I:::::t::::t::::j:::::!::::t::::j:::::!:::::t::::j+:l:::::!::::LJ::::!::::t::::j:::::!::::t::::j.::::!:::::f::::t::::!:::::f::::t:::lj:::::l:j::::jr!:::::f::::j:::::
~ ~ ~!~ ~ 1~ ~ 1~ ~ ~1~ ~ ~!~ ~ 1~ ~ ~1~ ~ ~!~ ~ !~ ~ l~ ~ ~!~ ~ f~ ~ l~ ~ ~I~ ~ ~!~ ~ l~ ~ ~I~ ~ ~!~ ~ t~ ~ 1~ ~ ~I~ ~ t~ ~ l~ ~ ~I~ ~ f~ ~ f~ ~ I~ ~ ~!~ ~ !~ ~ 1~ ~ ~I~ ~ t~ ~ I~ ~ ~I~ ~ t~ ~ I23200
-I
1
23220
23240
23260
23280
23300
23320
23340
23360
---
233BO
23400
Time Bit
.......
w
00
s, 42800
Trigger 1/60
I
:
:
:
:
I
:
:
!
:
I
:
:
:
:
:
:
:
-f--------:-:
:
-:
:
:
:
I
:
:
43000
:
:
I:-
:
:
:
I:
:
:
:
I:
:
:
:
<PIB
:;I~;I:lIt=ti-~tllt:!~ti~_t;I:~:FiT;:::iFirFF!i:F1:FP::FF
<P2B
;;;;;l;;;J;;;j;;;;t;;;;;;;;;i;;;;t;;;;l;;;;L;i;;;;;l;;;;Lt;;l;;;;;l;;;;t;;t;$:t::::i:::::i::::t::::j:::::j::::i::::j:::::i:::::i::::t::::j:::::i::::i::::j:::::j::::i::::j:::::i:::::i::::i:::::1
<P3B
~~~~~I~~~~FT~~j~~~~~I~d~~~~~j~~~+~~T~~I~~~~~I~~~~Fl~~~1~~~l~~~F~Ia~~~FT~~~I~~~~FT~~~I~~~~F~!~~~~~I~~~~r~~F~!~~~~~I~~~~F~!~~~~f~~F~j~~~~~I~~~~r~~j~~~~~
~1-t1j:t!-:!I!1-:!::t-:tJ-E'-='[:~J:!:f:l~E!:1~:t!tll=E!::!~r~!!I:H::!:­
<P4B
HCLK....START
:!:ff:j:~1:Tt-:1:frr1::f:j=Ft:t#-[~-!::-t=t:rrt!:T-:=l=!=11-t!:fE!F
·····!····-r····1·····!·····:····1·····i·····:····t····1·····?····-r····:·····:·····:-····:·····!·····:····t····1·····?····-r····i·····!·····:····:-····!·····:····t····:·····!·····:····!·····:·····:····1·····t·····?····1·....
- ................
.
COMP_SYNC
:::::I:::T::T::f:+:::E:f::f:l::+::J::::t::::L:f:l:::L:1::::!::::L+::fJ:::L:l:J::l:::l:::::!:::l::f:::!:::::[::::!:::::!:::l:::L:l:::::!::::L:
COMP_BLANK
CLK....ENABLE
TRIGGER
42800
I
I
I
I
I
r
-r
I
I
42820
42840
42860
42880
42900
42920
42940
42960
42980
43000
Time Bit
......
W
\0
Trigger 1/60 5, 43000
I
I
43050
i
I
I
I
I
:i:t:l~l~tl;tl~11l't::t1:J1-=:I:H:f;!;t='ttl~H;~m::j:l~j~J::ttH~I;~j-:!:
<!>IB
:::::f::::t::::j:::::i:::::t::::j:::::i:::::t::::t::::t:t:t:::LJ:::t:t::t:t::t::J::tJ:::I:::J:::L:L:t::t:t::J::t:t::J::1::t::t::t:t::t:::
!:! -!~!:I!-I:I~ i~r;I:l ~!:~I-I-l rlil l ~I:~[I I~1 1 1:1 1 -l l il l~I I -I I I I ~1
<P2B
<P3B
<P4B
:::::!::::F:F::j:::::f:::l::T::f::FT::f::Fl:::j:::::[:::l::f:l:::Ff:::j:::T::j:::::j::::F::!::::f:::j::::F:F:f:T::F:f:f::F::j::::f::F::
HCLK...START
COMP_SYNC
;ri::FE;~~t;i:;t~l:j:lt:r:~I:~t;:I:~t=~t_-l_;j~1:-:!:~1~l:l;l~~l~r~~'-;!~~-:ll::!~I~~;I=::
·····I·····~····.(··-··I·-···)·-··-\·-···I·····~····.:···"(·"-')'·-'·~'·".(··"'I·-·'·}··'·'(·····I·-···"····"·····~·-···,.·····:-····(··-··I··-··:--···i··-·-I··-··,.··· ·-:·····t·····,.·····:-····I·····}·····:-····,,·····I·····) .... -c .....
COMP_BlANK
CLK...ENABLE
TRIGGER
i
43000
43020
i
43040
i
43060
i
43080
i
i
43100
43120
,
43140
,
43160
i
43180
43200
Time Bit
~
141
APPENDIX B: Software Code
Much of the software written for this camera system is not absolutely required for
proper operation, but makes the whole easier to use. Certain programming techniques
must be used when addressing the Adtron and Data Translation boards, but most modern
computer languages support the necessary commands.
B.1
PTSI.EXE
Written in Turbo C++, the application ptsi. exe is a user-friendly program
(I hope!) that controls the camera system. The screen (see Figure 4.34) has eleven menus
which present the available options to the user. Selections are made with either the mouse
or the keyboard, as to the preference of the user.
B.1.1 MENUSHEL.C
The code menushel. c constitutes the user interface to the program ptsi. exe.
Function main {} is the event-loop for accepting keystrokes, mouse actions, and timeouts.
/0
Menu shell program for High-Speed PtSI Video Camera System
"'rltten lB-B4-91 by Laurence Flath
Latest revision 4-29-93 by Laurence Flath
Source code up to 4-29-93 (C) Copyright 1991, 1992, 1993 by Laurence Flath
0/
Compiled in Turbo C++, large memory model, optimized for size
#Include <stdlo.h>
#Include <dos.h>
#Include <conlo.h>
,. Defines a region on the screen
struct rect
Int
Int
Int
{
left;
top;
right;
tnt bottom;
};
struct ",In {
fnt active;
struct rect
,*/0
I&J
i "_reet;
~~:~ !~~ii~b~~~~~mi;
char bottom.border[2B];
char teMt[2B][2B];
tnt key_pas;
tnt select_pas;
Int hl1 Ite_pos;
tnt mouss_pas;
tnt border_attr;
Int tltle_attr;
int key_attri
tnt tBKt_attr;
int select_attr;
Int hl1 ite_attr;
int inact_attr;
char msg[2B][BB];
Data structure of a window
Active = 1, Inactive = B
,*'* Top
,*'* border char string
Vi ndow boundary
/0
/*
/0
/0
/*
/*
/*
Side border char string
Bottom border char string
\llndo", text
Hotkey used to sel ect windOtlJ
Selected line of "'indo~
Hillted line of wind.,.,
Line mouse cursor is on
Color of border
Color of title's teNt
~: g~~~~ ~~ ~~~:~(~i~d~~e~ext
/* Color of selected line
/0 Color of hil Ited line
/* Color of inactive l1Iindow
/* Descriptive teNt for window
0/
0/
0/
0/
0/
0/
0/
0/
0/
0/
0'0/
0/
0/
0/
0/
0'0/
0'0/
142
};
struct mouse_status {
tnt button;
tnt hertz;
tnt vert;
};
struct
struct
struct
struct
struct
struct
struct
struct
struct
struct
struct
struct
struct
struct
win
win
win
win
"'in
win
win
win
win
win
win
win
win
win
/. Defines position of mouse and
/. the button's state.
0'0'
wind[NUMBER_OF_\lIN];
·win_ptr[NlIMBER_OF_\lIN];
*mode_ptr;
*tri9_ptrj'
·t_ int_ptr;
*bright_ptri
·contrast_ptl"j
*hist_ptrj
*d1sp_buf_ptrj
*seq_ptrj
*avB_ptrj
*LUT_ptrj
*fl1B_ptri
1ast;
.w_
struct mouse_status mouse;
union REGS foregs, outregs;
struct SREGS segregs;
int button_last=e, hilite_last=e, int_status;
extern
extern
e.tern
extern
extern
extern
extern
BKtern
extern
extern
extern
extern
extern
eKtern
eKtern
eKtern
extern
extern
extern
tnt acq_modej
fnt two_fields;
int trig_mode;
long tnt trfg_delay;
fnt t_fnt_posj
fnt matLt_ inti
fnt brito;
fnt contr;
fnt buf;
fnt seq_start;
i nt seq_end;
i nt seq..de 1a y;
int ave..mode;
i nt SPC..mode;
i nt num_buf;
int zoom;
i nt pan;
int scroll;
i nt LUT;
/. Global environment variables
*,
char screen_title[] =
PtSi High-Speed Video Camera System
char logo_msg[] = "University of Arizona, Optical Sciences Center
(C) 1992";
I···················· . ···································. ··.··..........1
~
I·
~
Makes the mouse cursor visiblea
'1
I'
No va lues passeda
'1
I·
No va lues returned a
'1
~
void show_mouseO :
~
~
~
~
~
I·····························································.·.........1
void show..mouseO {
inregsax.aK = 1;
int_status =intSG(ex33,&i nregs ,&outregs);
I····································. ···························........1
~
I'
~
void hidB_mouseO :
I'
/.
I'
~
Hides the mouse cursor.
.1
No values passed.
.,
~
'1
.1
No va lues returned.
~
~
I································ . ········ . ·················.···........·1
void hide_mouseO {
inregs.x.aK = 2;
i nt_status = i ntBG (B~33, & i nregs ,&outregs) ;
I········································································1
~
I.
I.
I.
void message(char 'str) :
'*
~
~
Prints a centered text
'1
string at the bottom of the '1
screen··1
~
char 0str
~
I'
I···· ..................
~
Pointer to teKt string.
0'
No values returned.
'1
* •••••••••••••••••••••••••••••••••••••••••
void message(char ·str) {
hide_mousee) ;
teKtattr(112);
~~~~~m;25);
i f (str) {
~
········1
~
".,
143
gotoxy«BI - strlen(str»
cprintf("%s" ,str);:
»
1,25);
/** ................................. *••••••••••••••••••••••••••••••••••••• ,
~
/*
void beepO :
~
,II'
~
,II'
Produces a 1 KHz tone for SBB ms.
No values passed.
~
*/
*'
~
*,
,.............................................._..........................,
No values returned.
~
~
~
void beepO {
sound(IBBB);
delay(3BB) ;
nosound();
/
........................................................................,
~
~
*'
*'
*'
,.........................................................................,
'*
/*
void init_mouseO :
~
Initializas mouse and tha mousa
cursor.
/*
No valuos passed.
/*
No values returned.
~
~
*/
~
~
~
void init-,"ouseO {
long int addr;:
unsigned char first_byte;
inregsox.ax = 8)(3533;:
int_status = 1ntdosx(&:inregs,&outregs,&sBgiegs) j
addr = «((long)segrags.as) « 16) + (long)outregs.H.bH;
firsLbyte = *Oong far *)addr;
if «addr==B) II (fJrst_byte==BHCF» {
message("Mouse driver not installed !II);
}
inregs.x.ax = B;
lnt_status = intB6(BHS3,&inrags,&outrags);
if (outregs.x •• ><==B) {
messageC'Microsoft Mouse not found");
eHlt(-I);
}
inregs.x .. ax = 18;
1* Set tew:t cursor that inverts
inregs.x .bx = B;
1* foreground and background
inregs.H .eH = B><FFFF;
1* colors.
Inrags.H.dx = Bx77BB;
lnt_status = intB6(BxS3,&lnregs,&outrags);
inregs.x .. ax = 4;
Set mouse pos to top left of
inregs.x .. cx = B;
1* screen.
1nregs.x.dx = B;
int_status = intB6(BxS3,&lnregs,&outregs);
inregs.x.ax = 7;
1* Set mouse horizontal limits.
"nregs.wOocx = 9;
inregs,x .. dx = 639;
lnt_status = intB6(Bx33,&lnrags,&outregs);
1nre9s.)( .. aK = OJ
1* Set mouse vertical limits.
*/
*/
*/
,*
1nregs.H .. cH
inregs,H .. dH
*/
*'
= B;
=
199;
'*
lnt_status = IntB6(BHSS,&lnrags,&outrags);
1nregs.x .. ax = IS;
Set mouse mickey/pixel ratio.
inregs.H .. cH = Ie;
1* i.e. "speed" of mouse.
inregs.H .. dx = IB;
lnt_status = intB6(BxSS,&inregs,&outregs);
show_mouseO j
1* ShOtlJ mouse cursor.
/
..........................................-..............................,
~
/*
/.
void get-,"ouseO :
~
/.
~
/.
*'
~
Gats current mousa position and the *'
button status.
.,
~
No values passed.
.,
No va lues returned.
.,
~
.............._..........................................................,
~
/
*/
*/
~
voi d gat_mouseO {
inregs.x.ax = 3;
lnt_status = IntB6(BHS3,&lnrags,&outregs);
mouse.button = Qutregs.>e.bx;
mouse.horiz = outregs.x.c)(j
mouse.vert = outregs.K.dx;
mouse .. horiz
3;
/. Convert mouse horiz. into column .,
mouse.vert »= 3;
/. Convert mouse vert. into row
.,
»=
/
................................................._......................,
~
/.
/*
,*
~
void get_gmouseO :
Gets current mouse position with
full resolution and the button
status.
~
.,
.,
.,
~
144
1*
No values passed.
/*
No values returned.
~
~
.........................................................................,
~
/
*/
*'
~
void get_gtnouseO (
inregs.x.a)( = 3j
I nt_sta tus : I nta6 (9x33, &Inregs ,&outregs) ;
mouse. button = outregs.x.bxj
mouss.horiz = DutregsoJ<oCMj
mouse.vert = Qutregs .. x.dxj
,.........................................................................,
,*
*'*/
~
struct win *win_boundO :
/*
'*
'*
/*
Finds which window the mouse
cursor is within. Calls
got_mouse so mouse
coordinates and button
status are stored In
structure 'mouse'.
f*
'*
~
No va lues passed..
~
~:
~~~~~~s t~~i~~~~et6u~~~r
is
within, and the nul pointer
if the cursor Isn't within
any window.
f*
f*
~
*'
*/
*,
*f
*'
~
~
:~
*f
*f
'*
*,
,......................................................................../
~
~
struct win *wln_boundO {
register int i;
get_mouseO;
for(I:B;I(NUMBER_OUilIN;i++) {
If «mouse.horlz>=('wln_etr[I)).wfrL.rect.left) &&
(mouse.horlz«*wln_ptr[I]).wln_rect.rlght - 1) &&
(mouse. vert>:( *~ I n..ptr [I)) •wi n_rect. top) &&
(mouse.vert«·wln_ptr[l]) .wln..rect.bottom - 2» {
(·~ln_ptr[I)).mouse_pos = mouse.vert (*~In_ptr[ I]) .~In_rect. top;
return wln_ptr[I];
}
return OJ
/
........................................................................
/
~
/*
void drallJ_lIIinCstruct lIIin .111)
Drallls a lIIindolll on the
./
screen../
struct win .w
Pointer to lIIindow to be ./
drallln../
/.
~
/.
/.
~
/.
~
No values returned.
~
./
......................................................................../
~
/
~
~
void draw_wln(struct win 'wp) {
int i, nj
hlde_mouseO;
n = (·wp).wln..rect.bottom - (·~p).win_rect.top;
wlndow«'wp) .wln_rect. left, ('wp) .wln_rect. top,
(*wp).wln..rect.rlght, (*wp) .wln_rect.bottom);
textaUr( ('wp). act Ive?('wp) .border_aUr: (*wp). Inact_attr);
goto.yO, 1);
cprintf( "S&" ,(*lIIp). top_border);
for(I=2;I(n;I++) {
gotoxy (1, !);
cprintfC "Is II ,C.wp). side_border);
}
gotoxy(l,n);
cpri ntfC "S&" ,(.lIIp) .bottom_border) ;
t.xtattr( C·",p). act Ive?C*..,p) .te.t_attr: ('wp). Inact_at.tr);
for(I:1;I(n;I++) {
gotoxy(2,2+1) ;
cprlntf("ls", (*wp). text[I]);
}
te"tattr«''''p) .actlve?('wp) .hl 1Ite_aUr:(*wp). Inact_attr);
gotoKy(2,2>(*wp) .hi 1 I te_pos);
cprlntf( "Ss", (*wp). text[C*wp) .hll fte_pos]);
textattr( C''''p). act Ive?('wp) .select_aUr: (*wp). I nact_attr);
gotoKy(2,2>(*wp) .select_pos);
cprintf( "Is", (*wp). te.t[ (*wp) .sel ect_pos]);
te"tattr( ('wp). act Ive?C'wp). t It le_attr: (.wp). In.ct_.Ur);
gotoKy(2,2) ;
cprlntf( "Is" ,('wp). text[9));
te"tattr«'wp) .act ive?(*wp) .key_attr: ('wp). In.ct_attr);
gotoxy(2+C·wp). key_pos ,2) •
cprlntf("lc" ,('wp). teKt[9j[(*wp) .key_pos]);
lIIindOllJ(1,1,eO,25} ;
shoL,-mouse() ;
/
........................................................................../
~
/.
/*
~
void select_lIIin(struct lIIin *w) :
~
Makes a lIIindow
./
active.·/
~
145
struct win .w
,.
,.
10
,.
Pointer to window to
make active.
.,
.,
No values returned.
.,
01
,........................................................................,
~
~
void select_win(struct win .w) {
(ow).border_.ttr 1= 8'
(ow).hilite_pos = (Owl.select_pos;
~~~:;;:!(~~~i .msg[a]);
,........................................................................,
~
~
,.
,.
void deselect_win(struct 1.din .w)
Makes a window.'
inactive.
.,
/.
/.
struct win .w
Pointer to window.'
to make inactive.
.,
10
10
01
,.
No values returned . • ,
......................................................................../
~
/
01
~
void deselect_win(struct win ow) {
(ow) .hil ite_pos = 0;
(ow). border _a ttr &= axF7;
draw_win(w) ;
/
............................................................................,
~
10
~
int setupO :
~
Initial iz.tion of software and hardware. 01
~
,.
No valUes passed.
,.
/.
Returns e if no errors in initialization .,
have occurred.
./
~
./
~
..............................................................................01/
10
/
int setupO {
int status=e, i;
init_mouseO;
text.ttr(7) ;
_setcursortype(_NOCURSOR);
clrscrO;
textattr(Sa);
gotoxy(I,I);
cprintf(screen_t itle);
message( logo_msg);
for(i=a;i<NUMBER_OF_~IN;I++)
10 Initialize mouse
01
10 Make text cursor blank 01
win_ptr[i] = &wind[i];
mode_ptr = win_ptr[a);
(Omode_ptr) .active = 1;
(Omode_ptr).wirLrect.left = 1;
(omode_ptr) .win_rect. top = 4;
(Omode_ptr) .win_rect.right = (omode_ptr).win_rect.left + 1a;
(Omode_p'tr).win_rect.bottom = (Omode_ptr).win..rect.top + 7;
strcpy( (omode_ptr). top_border,
••
");
strcpy«·mode_ptr).side_border,
strcpy( (Omode_ptr) .bottom..border. "
");
strcpy«Omode_ptr).text[e),
"Mode
");
strcpy«Omode_ptr).text[I),
"Free Run");
strcpy«Omode_ptr).text[2).
" Trigger ");
strcpy«Omode_ptr).text[Sl.
"Halt
");
strcpy«Omode_ptr).text[4),
"2 Fields");
(omode_ptr) .key_pos = 2;
(·mode_ptr) .select_pos = 1;
(Omode_ptr) .hil1te_pos
a;
(.mode_ptr).mouse_pos = ej
(·mode_ptr).border_attr = 5;
(Omode_ptr).title_.ttr = 12;
(Omode_ptr).key_.ttr = 14;
(Omode_ptr).text_.ttr = 7;
(Omode_ptr).selecLattr = SI;
(Omode_ptr) .hi lite_attr = 41;
(Omode_ptr).inact_attr = 1;
strcpy( (Omode_ptr) .msg[e), "Mode of oper.tion");
strcpy«·mode_ptr).msg[l], "Free-Running Mode; aB Hz frame rate");
strcpy«*mode_ptr).msg(2], "Continuous Trigger Mode; new frame captured every trigger event!!);
strcpy«·mode_ptr).msg(3], "Halt; ignores all trigger events, no images captured'I);
strcpy«Omode_ptr).msg[4), "Display 1 field of ceo (free-run. trig modes) or 2 fields (free-run only)");
draw_win(mode_ptr) ;
"I
I");
=
trig_ptr = win_ptr[1);
(otrig_ptr) .active = 1;
(otrig_ptr).win_rect.left = 1;
(otrlg_ptr) .wirLrect. top = 11;
(otrig_ptr).win_rect.right = (otrig_ptr).win_rect.left + 1e;
(otrig_ptr).win]ect.bottom = (otrlg_ptr).win_rect.top + 12;
strcpy«otris_ptr). top_border.
"");
strcpy«*trig_ptr).side_border,
strcpy«otrig..ptr).bottom..borde •• "
")i
strcpy«otris_ptr).text[e).
" Trigger" J;
strcpy«otrig_ptr).text[1),
"External ");
strcpy«otrig_ptr).text[2).
"Keyboard ");
strcpy«otrig_ptr).text[Sl.
"_ _ _ _");
strcpy«otrig_ptr).text[4],
"Trig Dly");
strcpy«otrig_ptr).text[5).
"");
strcpy« otri s_ptr).text[6).
"
");
"I
I");
146
strcpy( (.trig_ptr). text[71.
strcpy( (.trig_ptr). text[81.
strcpy( (.tri g_ptr). text[gl.
1 IJS
II);
");
");
~:~~:~=~~~l:~:~ii~~~p~s 1~
=
I;
(·trig_ptr).hil it._pos = 9;
(.trig_ptr).mous._pos
9;
(·trig_ptr).bord.r_att ... = 5;
(·trig_ptr). title_attr = 12;
(.trig_ptr).k.y_attr = 14;
(.trig_ptr).t.xt_attr = 7;
(·trig_ptr).s.l.cLatt ... = 31;
(·trig_ptr).hilite_attr = 41;
(·trig_~tr).inact_attr = 1;
strcpy«·trig_ptr).msg[Bl. "Typ. of trigg.r for image capture");
strcpy(C* tri s_ptr).msg[l], IIE2<ternal trigger; image is captured on rising edge of input signal II);
strcpy«·trig_ptr).msg[21. "Keyboard trigg.r; image is captured at k.ypr.ss of (TAB>");
strcpy«·trig_ptr).msg[3). "");
strcpy«·tri9-ptr).msg[41. "Trigg.r d.lay (time from ext trig until image captur.) r.s.t to I ~s.c");
strcpy«·trig_ptr).msg[51. "Rais. d.lay by 1 ~s (I.button)S 19 ~s (r.button). or x19 (both buttons)")'
strcpy«·trig_ptr).msg[6). "Raise delay by IB9~s (1.button • 19B9~s (r.button). or xl99 (both buttonsS,,);
strcpy«.trig_ptr).msg[7). "Keyboard .ntry of trigger d.lay in ~sec");
.
strcpy«·tri9-ptr).msg[B). "Lo.... r delay by lBB~s (I.button). 19BB~s (r.button). or x199 (both buttons)");
strcpy( (·trig_ptr) .msg[S). "Lo.... r delay by IB ~s (I.button). 1 ~s (r.button). or ,,19 (both buttons) ");
dra..._... i n (tri g_ptr) ;
t_int_ptr = &... ind[2];
(.t_ int_ptr) .activ. = 1;
(·t_int_ptr) .... in_r.ct.l.ft = 14;
(·t_ inLptr) .... in_r.ct. top = 4;
(·t_ int_ptr) .... in_r.ct .... ight = (.t_ inLptr) .... in_r.ct.l.ft + 19;
(·t_int_ptr) .... in_r.ct.bottom
(.t_int_ptr) .... in_rect.top + 19;
strcpy( (ot_inLptr). top_border.
"");
strcpy«*t_fnt_ptr).sfde_bcrder,
I");
strcpy«·LinLptr) .bottom..bord.r."
");
strcpy«·t_int_ptr).t."t[9].
"lnt Tim. ");
strcpy«·t_int_ptr).t."t[I].
"33 ms ");
strcpy( (.t_ i nt_ptr). t."t[2].
"_ _ _ _ ");
strcpy«·Lint_ptr).t."t[3].
" 1999 ~s ");
strcpy«·t_int_ptr).t."t[4].
"599 ~s ");
strcpy«·t_int_ptr).t."t[5].
299 ~s ");
strcpy«·Lint_ptr).t."t[6].
"199 ~s ");
strcpy«·Lint_ptr).t."t[7].
59 ~s ");
strcpy«·t_int_ptr).te"t[8].
29 ~s ");
strcpy«.t_int_ptr).t."t[gll
19 ~s ");
strcpy«·LinLptr).te"t[IBJ.
"_ _ _ _");
strcpy«·t_int_ptr).t."t[111.
"Manual ");
strcpy«·t_int_ptr).te"t[12).
"
");
strcpy( (.t_ i nt_ptr). te"t[ 13).
");
strcpy«·Lint_ptr).t."t[141.
" 3B9 ~s ");
strcpy«·t_int_ptr).te"t[151.
"
");
strcpy«·t_int_ptr) .te"t[16).
");
'·LinLptr).key_pos = 9;
(·t_ int_ptr) .sel.cLpos = I;
(·t_ inLptr) .hil it._pos = 1;
(.t_int_ptr).mous._pos = 9;
(·t_inLptr).bord.r_attr = 5;
(·t_inLptr).title_att ... = 12;
(.t_ int_ptr) .k.y_attr = 14;
(·LinLptr).t.xt_attr = 7;
(·t_ int_ptr) .s.lecLattr = 31;
(.t_inLptr).hilit._attr = 41;
(.t_ inLptr). inacLattr = 1;
strcpy«·t_int_ptr).msg[91. "Int.gration Tim. of PtSi d.tectors in CCD array");
strcpy«*t_fnt_ptr).msg[l], "33 msec integration time; free-running mode only");
strcpy( (.t_int_ptr) .msg[2). '''');
strcpy«·t_int_ptr).msg[31. "1 ms.c int.gration tim.");
strcpy«·t_int_ptr).msg[41. "599 ~s.c int.gration tim.");
strcpy«·t_int_ptr).msg[5). "2B9 ~s.c int.gration tim.");
strcpy«·t_inLptr).msg[61. "IB9 ~s.c int.gration tim.");
strcpy«·t_int_ptr).msg[7). "59 ~s.c integration tim.");
strcpy«·t_inLptr).msg[61. "2B ~sec integration time");
strcpy«.t_int_ptr).msg[g)j "19 ~s.c integration time");
strcpy«·LinLptr).msg[19 ."");
strcpy( (·t_int_ptr) .msg[U]. "K.yboard entry of intograt ion tim. in ~s.c");
strcpy«·t_int_ptr).msg[12]."Rais. integration tim. by I ~s (l.button) 16 ~s (r.button)");
strcpy«·t_inLptr).msg[13]."Rais. int.gration tim. by 19 ~s (l.button). IBB ~s (r.button)");
strcpy«·t_int_ptr).msg[14]."Manual int.gration tim. in ~s.c");
strcpy«·t_int_ptr).msg[15]."Lo.... r integration tim. by 19 ~s (I.button). 199 ~s (r.button)");
strcpy«·t_inLptr).msg[16]."Lo.... r int.gration tim. by 1 ~s (I.button). 19 ~s (r.button)");
dra..._... i n (t_ i nt_ptr) ;
=
III
brighLptr = &... ind[31;
(·bright_ptr).activ. = 1;
(·bright_ptr) .... in_rect.left = 27;
('bright_ptr) .... in_rect.top = 4;
('bright_ptr) .... in_rect.right = (·bright_ptr) .... in_r.ct.left + B;
(·bright_ptr),"'in_rect.bottam = (·bright_ptr).,Jin_rect.top + B;
strcpy( ('bri ght_ptr). top_border.
"c=");
strcpy«*brfght_ptr).side_border, "
II);
strcpy( ('bright_ptr) .bottom_border."
");
strcpy«Obright_ptr).text[O].
" Bright");
strcpy«·bright_ptr).text[I).
"
");
strcpy«·bright_ptr).text[2J.
--- ");
strcpy«·bright_ptr).text[3).
126 ");
strcpy«Obright_ptr). text[4).
");
strcpy( ('bri ~ht_ptr). text[5).
");
~:~~:~~~=~i~) :~:~ii~~~p~s 1~ 6;
(.bright_ptr).hilite_pos = 9;
('bright_ptr).mous._pos = B;
('bright_ptr).bord.r_attr = 5;
147
(obrfght_ptr).tltle_attr = 12;
(obrfght_ptr) .key_attr = 14;
(obrfght_ptr).te.t_attr = 7;
(obrfght_ptr) .selecLattr = 7;
(obrfght_ptr) .hfl fte_attr = 14;
(obrfght_ptr). fnact_attr = 1;
strcpy«>brfght_ptr).msg[B], "Scene Brightness (leve])");
strcpy«Obrfght_ptr).msg[l], "Rafse brfghtness by 1 (1.button) IB (r.button)");
strcpy«>brfght_ptr).msg[2], "Rafse brfghtness by IB (l.button), IBB (r.button)");
strcpy«>brfght_ptr).msg[3], "Keyboard entry of brfghtness level");
strcpy«>brfght_ptr).msg[4], "Rafse brfghtness by IB (1.button), IBB (r.button)");
strcpy«obrfght_ptr).msg[5], "Rafse brfghtness by 1 (l.button), IB (r.button)");
dra",_",fn(brfght_ptr) ;
contrast_ptr = &wlnd[4];
(Illcontrast_ptr) .active = 1;
C·contrasCptr).wio_rect.left
36;
(>contrasLptr).wl"-rect.top = 4;
(>contrasLptr) .wln_rect. right = (>contrast_ptr) .wfn_rect. 1eft + 8;
C·contrast_ptr}.win_rect.bottom = (.contrast_ptr).win_rect.top + 8;
strcpy( (>contrast_ptr) • top_border,
"~");
strcpy(C*contrast_ptr).side_border, II
II);
strcpy( (.contrast_ptr). bottom_border, II
") ;
strcpy( (·contrast_ptr). text[e],
IIContrst");
strcpy«ocontrast_ptr). te.t[l],
"
");
strcpy( (>contrast_ptr) • text[2],
--- ");
strcpy«ocontrast_ptr).te.t[3],
"255 ");
strcpy( (>contrast_ptr) • text[ 4],
");
strcpy( (ocontrast_ptr). text[5],
");
(>contrasLptr).key_pos = B;
(.contrast_pt ... ) .select_pas = 6;
(>contrast_ptr) .hl1fte_pos = B;
(.contrast_ptr).mouse_pDs
B;
'.contrast_ptr) .border_attr = 5;
(>contrast_ptr).tltle_attr = 12;
(>contrast_ptr) .key_attr = 14;
(>contrasLptr).te.t_attr = 7;
Clllcontrast_ptr).select_attr = 7;
(>contrast_ptr).hl1fte_attr = 14;
(>contrasLptr) .lnact_attr = 1;
strcpy«ocontrast_ptr) .msg[e], "Scene Contrast (\llndow)");
strcpy«>contrast_ptr).msg[l], "Raise brightness by 1 (1.button) IB (r.button)");
strcpy«ocontrast_ptr).msg[2], "Raise brightness by IB (1.button), IBB (r.button)");
strcpy«Ocontrast_ptr) .msg[3], "Keyboard entry of contrast level ");
strcpy«>contrast_ptr).msg[4], "Raise brightness by IB (1.button), IBB (r.button)");
strcpy«Ocontrast_ptr).msg[5], "Raise brightness by 1 (l.button), IB (r.button)");
=
=
drar..uoIJin(contrast_ptr) ;
hlst_ptr = &wfnd[5];
(>hfst_ptr).actfve = I;
(>hfst_ptr).wfn_rect.left = 27;
(>hist_ptr).wln_rect.top = 12;
(>hfst_ptr).wln_rect.rlght = (·hlst_ptr).wfn_rect.left + 17;
(>hfst_etr).wfn_rect.bottom = (>hfst_ptr).wln_rect.top + 11;
strcpy( (*hist_ptr). top_border,
1111);
strcpy(C*hist_ptr).side_border,
I");
strcpy( (Ohlst_ptr) .bottom_bordor, 00
00);
strcpY«'h1st_ptr). te.t[B],
00
");
strcpY«'hlst_ptr).te.t[I],"
00);
strcpy«·hlst_ptr).te.t[2],
");
strcpy«Ohlst_ptr).te.t[3],
");
strcpy«Ohlst_ptr). te.t[4],
00);
strcpy«Ohlst_ptr). te.t[5],
");
strcpy«ohlst_ptr). te.t[6],
");
strcpy«Ohist_ptr). te.t[7],
00);
strcpy«OhtsLptr).te.t[B],
"lO-Buffer A-HI");
(>hfst_ptr).key_pos = B;
(>hfst_ptr).select_pos = 8;
(>hfst_ptr).hl1fte_pos = B;
(>hf st_ptr) .mouse_pos = B;
(>hfst_ptr).border_attr = 5;
(>hfst_ptr).tltle_attr = 4;
(>hfst_ptr).key_attr = 4;
(>hfst_ptr).te.t_attr = 4;
(>hlst_ptr).select_aUr = 4;
(>hfst_ptr) .hl11te_attr = 4;
(>hfst_etr).fnact_attr = 1;
strcpy«·hlst_ptr).msg[B], "Hfstogram of current display buffer OO );
III
draw_win(ht st_ptr);
dlsp_buLptr = &wlnd[6];
(>dfsp_buLptr) .actfve = 1;
(>dfsp_buf_ptr).wln_rect.left = 47;
(>dfsp_buLptr).wi"-rect.top = 4;
(>dfsp_buLptr).wln_rect.rfght = (>dfsp_buf_ptr).wfn_rect.left + 8;
(>dfsp_buf_ptr).win]ect.bottom = (>disp_buLptr).",I"-rect.top + IS;
strcpy( (odl sp_buf_ptr) • top_border,
00
00);
strcpy«-disp_buf_ptr).side_border, II
");
strcpy( ('dlsp_buf_ptr). bottom..border, 00
00);
strcPy«·dlsp_buf_ptr).text[B],
"Dsp Buf");
strcpy«·dlsp_buLptr).text[l],
"A
");
strcpY«'dfsp_buf_ptr).te.t[2],
BOO);
strcpY«'dlsp_buf_ptr).text[31,
COO);
strcpY«'dlsp_buf_ptr).te.t[4],
0
00);
strcpY«'dlsp_buf_ptr).text[51,
E 00);
strcpY«'dlsp_buLptr).te.t[61,
F 00);
strcpY«'disp_buf_ptr).text[71,
GOO);
strcpY«'dfsp_buf_ptr).text[Bl,
H 00);
strcPY«'dlsp_buf_ptr).text[9]
I
00);
strcpY«'dlsp_buf_ptr).text[IB!,
J
00);
strcpY«'dlsp_buf_ptr).text[l1),
K 00);
strcpY«'dlsp_buLptr).text[12),
l
00);
c:=J
148
strcpy( (odi sp_buf _ptr). teHt[ 13],
M ")
strcpy( (odi sp_buf _ptr). teHt[ 14],
N
")
strcpy( (odi sp_buf_ptr). teHt[ 15],
"Rotate ")
strcpy( (odisp_buf_ptr). teHt[ 16],
"Clr Buf")
(odisp_buLptr).key_pos = 0;
(odisp_buf_ptr).select_pos = 1;
(odisp_buf_ptr) .hiT ite_pos = B;
(odisp_buf_ptr) .mouse_pos = B;
(odisp_buf _ptr).border_attr = 5;
(odisp_buf_ptr).title_attr = 12;
(Odisp_buf_ptr).key_attr = 14;
(Odisp_buf_ptr).teHt_attr = 7;
(odisp_buLptr).select_attr = 31;
(odisp_buf_ptr).hilite_attr = 41;
(Odisp_buf_ptr).inacLattr = 1;
strcpy«odisp_buf_ptr).msg[8], "Video memory buffer into .. hich the neHt captured image is loaded");
strcpy«odisp_buf_ptr).msg[1], "Video Buffer A");
strcpy«Odisp_buf_ptr).msg[2], "Video Buffer B");
strcpy«odisp_buf_ptr).msg[3], "Video Buffer Coo);
strcpy«odisp_buLptr).msg[4], "Video Buffer 0");
strcpy«odisp_buf_ptr).msg[5], "Video Buffer E");
strcpy«Odisp_buf_ptr).msg[6], "Video Buffer F");
strcpy( (od i sp_buf _ptr) .msg[7], "Video Buffer G");
strcpy«Odisp_buf_ptr).msg[8], "Video Buffer H");
strcpy«odisp_buLptr).msg[S] "Video Buffer I");
strcpy«Odisp_buLptr) .msg[ IB], "Video Buffer J");
strcpy«Odisp_buf_ptr) .msg[ 11], "Video Buffer K"),
strcpy«Odisp_buf_ptr).msg[12], "Video Buffer l");
strcpy«odisp_buLptr).msg[13],"Video Buffer M");
strcpy«odisp_buf_ptr).msg[14], "Video Buffer N"),
strcpy( (Odisp_buLptr) .msg[15], "Clear video buffer");
strcpy«Odisp_buf_ptr).msg[16],"Freeze video frame and store in currently selected display buffer");
draw_wined isp_buLptr);
seq_ptr = &wind[7];
(Oseq..ptr) .active = 1,
(Oseq_ptr) .win_rect.left = 58;
(oseq_ptr) .win_rect.top = 4;
(Oseq_ptr) ,"in-rect.right = (oseq_ptr) ... in_rect.left + IB;
(Oseq_ptr) .win_rect.bottom = (oseq_ptr).win_rect.top + 7;
strcpy( ("'seq_ptr). tap_border,
1111);
strcpy«oseq_ptr).side_border,
strcpy( (oseq_ptr). bottom..border, " " ) ;
strcpy«Oseq_ptr).teHt[B],
"Seq Frame");
strcpy«Oseq_ptr).teHt[l],
"Go! ");
strcpy«Oseq_ptr). teHt[2],
"Start = A");
strcpy«Oseq_ptr).teHt[3],
"End = N");
strcpy«Oseq_ptr). teHt[4],
"Oelay=OFF");
(oseq_ptr) .key_pos
8;
(oseq_ptr) .selecLpos = B,
(Oseq_ptr) .hilite_pos = B;
(·seq_ptr) .mouse_pos = B;
(oseq_ptr) .border_attr = 5;
(Oseq_ptr) .title_attr
12;
(oseq_ptr) .key_attr = 14;
(Oseq_ptr) .teHt_attr = 7;
(oseq_ptr) .selecLattr = 31;
(oseq_ptr) .hilUe_attr = 41;
(oseq_ptr). inacLattr = 1;
strcpy«*seq_ptr).msg[9J, "Sequential frame storags; up to 15 frames captured then halt");
strcpy( (·seq_ptr) .msg[l], IIStart sequentia 1 frame acqu1 sit ion and storago") j
strcpy(C*seq_ptr).msg[2], IIManual selection of first frame buffer in sequential store ");
strcpy(C·seq_ptr).msg[3], "Manual selection of last frame buffer in sequential store"};
strcpy«Oseq_ptr).msg[4J, "Trisger delay between subsequent acquisitions (trigger mode only)");
draw_.. in(seq_ptr) ;
"I
I");
=
=
av"-ptr = &.. ind[8J;
(savo_ptr) .. active = 1;
(Oave_ptr) ... in_rect.left = 58;
(oave_ptr) .win-rect.top = 11,
(oave_ptr) ... in-rect.right = (*ave_ptr) ... in_rect.left + IB;
(oave_ptr) ... in-rect.bottom = (*ave_ptr) .win-rect. top + 12;
strcpy( (*a .... o_ptr). top_border,
1110)j
strcpy(*a .... o_ptr).s1de_border,
I")j
strcpy( (Oave_ptr). bottom..border, " " ) ;
strcpy«oave_ptr).teHt[8],
" Goodies ");
strcpy«*ave_ptr). teHt[l],
"Ave = OFF");
strcpy«oave_ptr).teHt[2],
"SPC = OFF");
strcpy«Oave_ptr).teHt[3],
"15 Frames");
strcpy«oave_ptr).teHt[4J,
" Zoan = 1");
strcpy«oave_ptr). teHt[5J,
"PanScroll");
strcpy«o.ve_ptr).teHt[6],
"Get Value");
strcpy«Oave_ptr).teHt[7],
"Fill= ON ");
strcpy«*ave_ptr).teHt[8J,
"Info= ON ");
strcpy«Oave_ptr).teHt[SJ,
"Add Title");
(oave_ptr) .key_pos = 1;
(Oave_ptr) .selecLpas = B;
(Oave_ptr) .hil ite_pos = B;
(.ave_ptr) .mouse_pes = Bj
C·a .... o_ptr} .border_attr = Sj
(oave_ptr) .title_attr = 12;
(Oave_ptr) .key_attr = 14;
(.ave_ptr) .teKt_attr = 7j
(Oave_ptr) .select_attr = 31;
(oave_ptr) .hilite_attr = 41;
(.ave_~tr) .1nacLattr = 1j
strcpy(C*ave_ptr).msg[B], "Perform operations affecting video buffers, display, and acquisition");
strcpy(C*ave_ptr).msg[l], "Average a number of frames before displaylO)j
strcpy( (*ave_ptr) .msg[2], "Singl0 point correct ionj cover lens before enabling");
strcpy(C*ave_ptr}.msg[3], "Number of frames to be for averaged image car.ture and SPC background frame ll ) ;
strcpy(C*ave_ptr).msg[4], "2oom fact«lr; rotates through 1, 2, 4, and e'};
strcpy(*ave_ptr).msg[5], "Use mouse or keyboard to pan and scroll zoomed image");
"I
149
strcpy(C*aV8_ptr).msg[G],
strcpy«oave_ptr).msg[7],
strcpy«oave_ptr) .msg[8],
strcpy«oavo_ptr) .msg[S],
"Use mouse or keyboard to view values of four phcels under cursor");
"Fill-In blank lines of Images (upon halt)");
"Add Image Info and palette to Imago (upon halt)");
"Add tit Ie to Image");
draw_win(avB_ptr) ;
LULptr = &",Ind[g];
CoLULptr).actlve = 1;
COLULptr).",ln_rect.left = 71;
CoLULptr).",ln_rect.top = 4;
COLULptr).",In..rect.rlght = (olULptr).",ln_rect.left + S;
COLULptr).",ln_rect.bottom = (OLULptr).",In..rect.top + 8;
strcpy( (oLULptr). top_border,
strcpy«oLULptr).slde_bordor, "
");
strcpy( (*LUT_ptr) . bottom_border, "
II};
strcpy«oLULptr). text[9],
"LUTs ");
strcpy«oLULptr).toxt[l],
"Grays ");
strcpy«oLUT_ptr). text[2],
" Limits ");
strcpy«oLULptr).toxt[3],
" Psoudo ");
strcpy«oLULptr).toxt[4],
" Custom ");
strcpy«OLULptr).toxt[5],
" Rotate ");
(oLULptr).key_pos = 2;
(oLULptr).select_pos = ,1;
COLULptr).hillte_pos = 9;
CoLULptr).mouse_pos = 9;
COLULptr).border_attr = 5;
COLULptr).tltle_attr = 12;
COLULptr).key_attr = 14;
COLULptr).text_attr = 7;
COLULptr) .select_attr = 31;
COLULptr).hlllte_attr = 41;
"c=J ");
(.lUT_~tr).1nact_attr
= 1;
strcpy«oLULptr).msg[9],
strcpy«oLULptr).msg[l],
strcpy«*LUT_ptr).msg[2],
strcpy(COLULptr).msg[3],
strcpy«OLULptr).msg[4],
strcpy(C*LUT_ptr).msg[SJ,
dra",_",ln(LULptr) ;
"Output look-up table selection");
"Normal grayscale color map");
"Grayscale color map with red saturation and bluB floor");
"Pseudo-color map");
"Custom color map from disk file");
IIRotate current look-up table values");
ffle_ptr = &",lnd[19];
(of I le_ptr) .act Ive = 1;
COfile_ptr).",ln_rect.left = 71;
COfile_ptr) .",In..rect.top = 12;
COflle_ptr).",ln_rect.rlght = COflle_ptr).",ln_rect.left + S;
COffle_ptr) .",In_rect.bottom = (offle_ptr) .,,,In_rect. top + 11;
strcpy«ofile_ptr). top_border,
strcpy«Offle_ptr).slde_border, "
");
strcpy«Offl e..ptr) .bottom_border,"
");
strcpy«offle_ptr).text[9],
" Ffle ");
strcpy«Offle_ptr). text[l],
"Olr ");
strcpy(COffle_ptr).text[2],
" Ch Ok ");
strcpy«Offle_ptr).text[3],
".-Img");
strcpy(COffle_ptr). text[4],
"Load-Seq");
strcpy«offle_ptr).text[5],
"1-!.UT");
strcpy«offle_ptr).text[6],
".-Img");
strcpy(COffle_ptr). text[7],
"Save-Seq");
strcpy(COffle_ptr).text[8],
"Quit ");
COffle_ptr).key_pos = 2;
(offle_ptr).select_pos = 9;
COffle_ptr).hll1te_pos = 9;
COffle_ptr).mouse_pos = 9;
COffle_ptr) .border_attr = 5;
COffle_ptr).tltle_attr = 12;
COffle_ptr).key_attr = 14;
COffle_ptr).text_attr = 7;
(offle_ptr).selecLattr = 31;
COffle_ptr).hll1te_attr = 41;
COffle_ptr).lnact_attr = 1;
strcpy(C*file_ptr).msg[B], "Load and save images, configurations to disk; eKit program");
strcpy( (*fi la_ptr) .msg[ 1], "View current directory's contents ll ) ;
strcpy( ('fi lo_ptr) .msg[2], "Change current directory");
strcpy«Ofl1e_ptr).msg[3], "'Load Image fne from disk (Oat. Translation, run-length encoding, lossless)"');
strcPy«·filo_ptr).msg[4], "Load sequence of images from dtskll);
strcpy(Coffle_ptr).msg[5], "Load lookup table from disk");
strcPy«·file_ptr).msg[6], "Save image file to disk (Data Translation. run-length encoding, 10ssle.5s)");
strcPY«'filo_ptr).msg[7], IISave sequence of images to disk U ) ;
strcpyC(Offle_ptr).msg[8],"Hlt <Return> to quit program, any other key to escape.");
dra",_",ln(ffle_ptr) ;
"c=J ");
",_last = Bj
.elect_",lnC",ln_ptr[B]) ;
",_last = '''In_ptr[B];
status 1= dgs_ha ltCl);
I
;i:i~; ~ ~~s~~~~~~i~,9);
status 1= plo_lnltO;
return status;
,..................................................................................,
~
,...
int shutdownO :
~
,...
Oeactivates software and hardware.
~
...,
No values passed.
*,
RetUrns
if no errors in shutt ing
down have occurred.
.,
./
~
,*
e
,........................................................................,
~
,.
~
Int shutdo",nO {
~
~
150
'Int status=Bi
hide_mouseO;
status 1= dt_shutdownO;
if «acq_mode!=l) II (aveJllode)) status 1= dgs_ha1t();
_setcursortype(_NORMAlCURSOR);
Iff. Make text cursor an underscore
textattr(7)i
clrscrO;
return status;
1* Camera will run in free-running mode
1* even after shutdown if Adtron
1* boards aren't halted.
*'*'
*'*'
,........................................................................,
~
1*
1*
1*
~
1*
1*
int do_functionO :
1*
/0
1*
tnt fen_number
struct win
~
*I.LJ
Pointer to windOtrJ requesting
action.
*,*,
*'
*,*'
Particular function requested,
actually the line of teKt in
call1"g tIIfndow.
0/
*/
Returns B if no errors in called
rout fnes have occurred. Returns
-1 if quit routfnne was called..
.,
Executes routines based on the
window the particular function
requested.
~
~
*'
*'*'
~
,*
'*
I·····················································.·
..................1
ow,
~
1*
~
~
~
int do3unction(struct win
int fcn_number) {
int status=B, i;
for(i=B; i(NUMBER...OF_.... IN; i++) if (w=::wi"-ptr[ i]) break;
switch (I) {
case B:
status = mode(fcn_number)j
breaki
case 1:
status = trigger(fcn_number);
breaki
case 2:
status = int_time(fcn_number);
breaki
case 3:
status = bright(fcn_number);
breaki
case 4:
status = contrast( fcn_number) i
breaki
case 5:
status = hist(fcn_number);
break;
case 6:
status = video_buf(fc"-number)i
break;
case 7:
status = seq_frame(fc"-number);
breaki
case 8:
status = aveC fcn_number) j
break;
case 9:
status = LUTs(fc"-number);
break;
case lB:
status = file(fcn_number);
break;
}
return status;
I························································.··.··..........1
~
I.
1*
int mouse_chackO :
~
~
Polls for mouse evants in windows . • 1
Don't muck with this routine.
*1
~
I·
No values passed..
*1
I·
I·
Returns B if no errors have
occurred.
*1
.1
~
~
~
~
I···························································.............1
int mouse_checkO {
struct win .Id;
int button, status=B;
int ·blOt.tl)"_ptr;
w = wiILboundO;
button = mouse.button;
if (! button) {
if (!button_last) return Hi
if (w==w_last) {
J. Get mouse position, button status *1
I· Mouse button state . • 1
/0 Button up 0/
,. No change => do nothing .,
i f (w) {
if «ow) .act ive) {
if «ow_1ast).hilite_pos!=B) {
message(II't'ork ing ... II);
status = do3unct ion(w_last, (OW_last) .hil ite_pos);
~~:~a~!(~~;;;~i=!~S .msg[(ow_1ast) .hi 1ite_pos]);
hilite_1ast = (ow_1ast).hilite_pos;
button_last = B;
return status;
151
)
i f (w==win_ptr[NUMBER_OF_YIN - 1]) {
button_last = button;
status = do_function(w_last,B)j
button_last = a;
mBssagB«'w_last) .msg[a]);
button_last = Bj
return status;
)
message«'w_last) .msg[a]);
button_last = OJ
return Bj
}
message(IIFunction inactive! ");
sleepO);
message( 1ogo_msg);
laJ_last
}
= Bj
button_last = OJ
return Bj
}
i f (w_ last) {
select_win(w_last) ;
hil ite_last = a;
}
return
Bj
'*
)
if (button_last) {
i f (w==w_last) {
if (w) {
Button down, no change "'/
if «'w_last) .mouse_pos! =hil ito_last) {
(·w_last).hilite_pos = (·w_last).mouse_pos;
draw_win(w_last) .
message( ('w_last) .msg[('w_last).hi I its_pas]);
hflite_last = ('w_last).hflits_pos;
}
return
Bj
)
button_last = button;
if ("'=:w_last) {
if (w) {
ff «'w_last) .mouse_pos! =hfl ite_last) {
(·w_last).hilite_pos = ('w_last).mouse_pos;
draw_wi new_last) •
message«'w_last}.msg[('w_last) .hf I its_pas]);
hf lits_last = ('w_last) .hil ite_pos;
}
return
Bj
}
if (w_last) {
deselect_wfn(w_last);
if (!w) {
w_last = 0;
message (1 090.-0159) i
return OJ
}
w_last =
IIJj
(.w_last) .hi lite_pas = ('w_last) .mouse_pos;
hi lite_last = ('w_last) .hf I fte_pos;
se lect_win(w_last);
(.w_last).hilite_pos = hilite_last;
draw_wfn(w_last) .
message«'w_last) .msg[(*w_last) .hi lite_pas]);
return Bj
I··············· . ···············. ·····················...................,
~
~
*'
'*
*'
e
,....................................................... ,.........................,
,*/.
int key_checkO ;
Polls for keyboard events in wfndows.'/
Don't muck with this routfnBe
~
~
No values passed.
~
/*
Returns
~
int key_checkO {
struct win -Wi
char ch;
int status=Bj
register int i;
if (kbhitO) {
ch = getch ();
i f «ch>96) && (ch<123»
t&J
=
~
if no errors have occurred .•"
ch -= 32;
~
,- Make a 11 upper case .,
Bj
for(i=a; i<NLMBER_OF_YIN; i++)
ff (ch == wind[1].teHt[B][wind[i].key_pos])
if (w) {
/.
if (w == w_last) return Bi
if (w_1ast) deselect_win(w_last)i
if «·w).active) {
/.
",_last = Wi
select_win(w_last) i
return B;
w = win_ptr[i];
a key-letter hit? ./
,*,* Yasnot,
it for the current window? .,
de-select current window .,
Select the chosen window
it's active ./
}
message«·w).msg[B]) ;
Is
If
if
152
til_last = Bj
return Bj
}
if (!w_last) {
if (!ch) {
switch (getchO) {
case 75:
~ei:~t~i~i~=r;~mMBER_OUIIN - 1];
case 77:
return OJ
~ei :~t~f ~i~=r;~m;
return OJ
default:
return OJ
}
}
return OJ
swftch (ch) {
case 13:
'0 <CR> 0'
if «Ow_last) .actfve) {
messageC''-/orking •.. It);
status = do_functfon(w_last, (ow_last) .hfl fte_pos);
draw_wfn(w_last)·
messageC (ow_last) .msg[(ow_last) .select_pos»;
return status;
}
messago(IOFunction inactive !");
sleep( 1);
message (1 ogo_msg) ;
case 27:
w_last = OJ
break;
if
}
deselect_wfnCw_last) ;
",_last
case 8:
= Bj
message(1ogo_msg) ;
break;
*'
switch (getchO) {
case 72:
case
e8:
/* Up Arrow
ff «ow_last).hi lite_pas) (ow_last) .hfl fte_pos--;
draw_wfn(w_last) •
message( (O,Uast) .msg[ (ow_last) .hi lite_pas]) ;
return Bj
,*
*'
Down Arrow
if «ow_last).hflfte_pos != (ow_last).wfn_rect.bottom _
(O'Uast).wfn_rect.top - 3) (Ow_last).hflite_pos++;
draw_wfnCw_last)·
message«Ow_last).msg[COw_last).hi I fte_pos]);
return Bj
case 75:
Left Arrow
if Cw_last ! = wfn_ptr[B» {
desBIBct_wfnCw_last) ;
w_last--j
seIBct_wfnCw_last) ;
}
return
case 77:
Bj
'0
0'
'0
0'
Rfght Arrow
ff (w_last != wfn_ptr[NUMBER..OF_IIIN-1» {
desBlect_wfn(w_last) ;
w_last++j
}
default:
return OJ
return
}
seIBcLwfn(w_last) ;
Bj
'*'0 0'
case 81:
"Q' -,
case 113:
'q'
deselect_wfnCw_1 ast);
select_wfnCfi IB_ptr);
COffle_ptr).hflfte_pos = B;
draw_wfn(ffle_ptr) •
message«ofi IB_ptr) .msg[(ofi le_ptr) .hf I fte_pos»;
w_last = ffle_ptr;
return OJ
case 92:
Backslash
te.tattr(7) ;
clrscrO;
forCf=B;f<NlJ.tBER_OF_IIIN;i++) {
}
draw_wfn(wfn_ptr[f»;
'0
0'
te.tattr(3B) ;
gotoHY (1, 1) ;
cprfntfCscreB"-t ftle);
message(logo_msg) ;
return OJ
case 9:
,*
Tab key used for key trigger
if «acq..mode==2) && Ctris_mode==2» {
dt_acquf re(acct-mode,buf , avo_made, num_buf, SPCJnode);
}
status 1= dt_kBy_srabO;
status 1= dgs_start(5);
return status;
*'
153
default:
if (w_last==win_ptr[NUMBER_DF_"'IN - 1]) {
deselect_win(III_1ast)j
",_last
=
OJ
}
message( 1ego_msg);
break;
}
return status;
I·····················································....................,
*'*,
,*
f*
*,
,*
*'
/ ..........................................................................,
/0
/0
f*
Int time_checkO :
~
Looks at passage of time within
program. Calls routines that need
to be executed on a regular basis.
No values passed.
~
f*
Returns B if no errors have
occurred.
~
0/
0/
~
*/
~
~
i nt time_check () {
int status=Bj
long Int t_diff;
static struct time t, t_lastj
gett ime(&t);
t_diff = (long)(t.tChour - t_last.tChour) ° 3SaBaa
+ (long)(t.ti_min - t_last.tCmin) ° SBaa
+ (long)(t.tLsec - t_last.tLsec) ° IBB
+ (long)(t.tLhund - t_last.ti_hund);
..,itch (acq-",ode) {
case 1:
Free-running */
if (.ve_moda) {
'*
}
breakj
status
1= dt_acqu1re(acq_mode,buf ,avB_mode,num_buf ,SPC_mode) j
casa 2: if «t_diff>5) && (trlg~;O~~~;I~)ilger
0/
status 1= dLacquire(acq_moda,buf ,ave_moda,num_buf ,SPC_mode);
status 1= draw_text(buf,trig_delay);
t_last. t i_hour = t. t Lhour;
t_last.tLmin = t.ti-"'in;
i_last.tLsec = t.tLsec;
t_last.tLhund = t.tLhund;
break;
/0 Halt 0/
case 3:
dafault:
break;
}
return status;
,.........................................................................,
~
/0
int mainO :
'*
~
0/
Main event loop.
*,
~
~
No va lues passed.
,*
Returns B
no errors have occurred.
*,
,int........................................................................
/
mainO {
~
~
if
~
int status=ej
status = satupO;
do {
~
/0 Main event-loop 0/
status 1= mouse_checkO;
status 1= key_chackO;
status 1= time_checkO;
}
..hile (! status);
status = shutdQ.. nO;
return status;
/0 Exit to DOS 0/
154
B.1.2 PTSCFCN.C
The code ptsi_fcn. c constitutes a function library that executes basic control of
the camera system.
/*
Function library for High-Speed PtSi Video Camera System
"'ritten 11-25-91 by Laurence Flath
Latest revision 4-29-93 by Laurence Flath
Source code up to 4-29-93 (Cl Copyright 1991, 1992, 1993 by Laurence Flath
Compiled in Turbo C++, large memory model, optimized for size
*/
#include
#include
#include
#include
#include
<stdio.h>
<dos .h>
<conio.h>
<time.h>
<stdl ib.h>
struct rect
int
int
int
int
{
left;
top;
right;
bottom;
};
struct win {
int active;
struct reet win_recti
char top_border[20]·
char side_border[201;
char bottom_border[20];
char text[20][20];
int key_pas;
lnt select_pas;
int hilite_pos;
int mouse_pes;
int border_Bttr;
int tit1e_attr;
int key_attr;
int text_Bttri
int selecLattr;
int hilite_attr;
int inact_attr;
char msg[20][80];
};
struct mouse_status {
int button;
int horizi
tnt vert;
/- Oata structure of a window
/* Active = I, Inactive = 0
/* "'indow boundary
/* Top border char stri ng
;* Side border char string
Bottom border char string
/* "'indow text
Hotkey used to select window
Selected 1 ine of window
/* Hil ited line of window
Line mouse cursor is on
Co lor of border
/* Color of title's text
Color of window's hotkey
Color of nonnal window text
Color of selected line
/* Color of hilited line
Color of fnactive window
/* Descriptive text for window
'*
'*'*
'*'*
'*'*
'*
'*
'*'*
Defines position of mouse and
the button's state.
'*
Global environment variables
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*/
*'
*,
};
extern
extern
extern
extern
extern
extern
eHter"
extern
eNtern
eNtern
extern
eKtern
extern
struct
struct win
struct win
struct win
struct win
str-uct win
struct ""in
struct win
struct win
struct win
struct win
struct win
struct win
struct win
win -wi
*mode_ptri
*trig_ptr;
-t_ int_ptr;
*bright_ptr;
.contrast_ptr;
*hfsLptr;
*dfsp_buf_ptr;
.seq_ptr;
"ave_ptr;
"lUT_ptr;
"file_ptr;
*w_lastj
*laJin_ptr[l1];
e)(tern union REGS inregs, outregs;
e)(tern struct SREGS segregSj
extern struct mouse_status mouse;
int acq_modo = 1;
int two_fields = 1;
int trig_mode = 1;
long int trig_delay = 1;
int t_ tnt_pas = 1;
int man_ t_ tnt = 3B9;
int brite = 128;
int contr = 255;
;nt buf
B;
jnt seq_start = B;
jnt seq_end = 13;
int seq_delay = 0;
jnt ave_mode = B;
int SPC_mode = B;
jnt nultLbuf = 15;
jnt zoom = 1;
=
*,
155
int
int
int
lnt
lnt
pan = Bj
scroll = 8;
info_mode = 1;
fill_lines = 1;
LUT = 8;
int modo_last=1;
extern int button_last;
char tltle[] = "
lnt mode(lnt function) {
int status=9;
case 1:
*'
,*
..,ltch (function) {
Free-running
acq_mode = 1;
(*modo_ptr).select_pos = acq_modej
if (mode_last! =1) {
(ot_lnLptr).hl11te_pos: t_lnLpos;
status 1= do3unctlon(Llnt_ptr,t_lnLpos);
status 1= dCinit(acq_mode,LUT);
status 1= setup_buf(acq_mode);
}
dt_acqu ire (acq_mode, buf , avB_mode, ntJln_buf ,SPCJJlode) ;
modo_l ast = aeq_mode;
case
2:
*'
,*
break;
Continuous trigger
aeq_mode = 2;
(Omode_ptr).select_pos : acq_mode;
if (mode_last:=1) {
(ot_ inLptr) .h111te_pos = (ot_lnt_ptr) .select_pos;
status I ~t~~u!UI;t ~~~~ ~1! (~:r~TS ~- i nt_pos) ;
if (Info_mode) {
status 1= draw_text(buf,trlg_delay);
status 1= dCdra"'_pal(buf ,43B, 112);
}
if (ave_mode) status 1= dLclear3rame(2,14);
(Omode_ptr).teKt[4][8] = 49;
(Omode_ptr).teKt[4][8] : 32;
two_fields = B;
}
mode_l ast = acq_mode;
break;
/0 Halt 0/
case 3:
1/(~;;'~d~~I~S~~=1)
&& (!ave_mode»
status = dt3reeze();
if «Omode_ptr) .select_pos ! = acq-",ode)
If (fl1Ll1nes) status 1= dt3111_11nes(mode_last,two_flelds,buf);
(*modo_ptr).select_pos = acq_modo;
(ohlst_ptr).select_pos = 1;
status 1= do3unctlon(hlst_ptr,1);
draw_",ln(hl st_ptr);
if (Info_mode) {
status 1= draw_text(buf,trig_del.y);
status 1= dLdra",_p.l(buf ,438,112);
}
break;
case 4:
/0 Field 1 status 0/
(omode_ptr) .hl1 ite_pos = (Omode_ptr). se lect_pos;
if (acq-",ode==1) {
if (!t",o_fields) {
}
else {
/0 1 field
of
(Omode_ptr).teKt[4][B] = 58;
(omode_ptr).teKt[4][8] = 115;
t",o_fields = 1;
/0 2 fields 0/
(Omode_ptr).teKt[4][B] = 49;
(omode_ptr).teKt[4][8] = 32;
two_fields = 0;
}
(ot_lnt_ptr).hllite_pos = LlnLpos;
status 1= dO_functlon(Llnt_ptr,t_lnt_pos);
}
default:
break;
}
return sta tus;
lnt triggerOnt function) {
int status=8, i, l_button, r _button, str_len, first_pos;
unsigned long int countj
Delay = 8.25 JJsec
count
char strln9[lB];
Lbutton = button_last & 5MB1;
r_button = button_last & 9x82;
..,ltch (function) {
case 1:
Externa 1
dgs_haltO;
dgs_start(2);
trig_mode = 1;
(*trig_ptr).select_pos = tri9-mode;
break;
/0 Keyboard 0/
case 2:
dgs_haltO;
trig_mode = 2;
(otrlg_ptr) .select_pos = trl g-",ode;
break;
case 4:
trig_delay = 1;
Title; use as reset *,
break;
'*
'*
'*
*
*,
*'
156
I· Increase delay.'
if (r _button && l_button) trig_delay '= lB;
else if (r_button) trig_delay += lB;
else tri9_delay++;
break;
case 6:
/. Increase delay quickly ./
if (r_button && Lbutton) trig..delay '= lBB;
else if (r_button) trill-delay += lBBa;
else trig_delay += lBB;
break;
case 7:
/- Delay display; enter directly ./
hide_mouseO;
case 5:
messageC"Enter delay in ,",sec
gotoHy(47 ,2S);
cscanf("X 1i" ,&tri9_del ay);
show_mouse () ;
case B:
*'
break;
/- Decrease delay quickly
if (r _button && l_button) trig..delay 1= lBB;
else if (r_button) trig_delay -= lBBB;
else trig_delay -= lBB;
break;
case 9:
/. Decrease delay
if (r _button && Lbutton) trig_delay 1= lB;
else if (r _button) trig_delay -= lB;
else tris_delay--j
break;
default:
break;
*'
}
if (trig_delay<1) trig_delay = 1;
if (trig_delay)99SSS9) trig..delay = 999999;
strcpy«·trig_ptr). teHt[7],"
");
ltoa(tri9_delar"string,IB) ;
strcat(string, IJs")j
str_1 en = strlen(string);
first_pas = «9 - str_len)
1);
forCi=8; i<str_len; i++) (*trig_ptr). text[7][ first_pos+i] = string[i];
count = «unsigned long) trig..delay) « 2;
pio_delay(count) ;
(·tri II-ptr) .hil ite_pos = (.trig_ptr) .select_pos;
return status;
I
»
int int_time(int function) {
~h!r ts~~:~:fl:j~tuS=B, Lbutton, r _button, i, str_len, first_pas;
Lbutton = button_last & BH81;
r _button = button_last & BH82;
switch (function) {
case 3:
/. IBBB ~s */
case 4:
/. S8B ~s *1
case S:
/. 28B ~s */
case 6:
/- 18B ~s ./
case 7:
/.
S8 ~s '1
case B:
/.
28 ~s ./
case g:
/.
18 ~s ./
case 14:
/. Manual intesration time display '1
t_int = (lnt) «1.291S • (float) atoi(.t_int..ptr).teHt[(.t_int_ptr).hilite_pos]»
t_ int_pos = (.t.. int_ptr) .hil ite_pos;
5ta tus 1= dgs_construct( t_ i nt, acq_mode, tlllD_ fields) j
(·t_lnt_ptr) .select_pos = t_lnt..pos;
if (acq_mode==2) status 1= dt_clear_frame(mode_last,buf);
return status;
case 1:
I' 33 ms *1
t_lnt = 8;
t_ int_pos = (.t_lnt_ptr) .hi lite_pos;
status 1= dgs_constructCt_ int, acq_mode, tlllO_ fields);
(·t_lnt_ptr) .select_pos = t_lnt_pos;
return status;
case 11:
Title; use for manual entry
hi de..mouse 0 ;
messageC"Enter integration time in ~sec
II);
gotoHy(47 ,2S);
cscanf("Xi" ,&ma"-t_int);
i f (man..t_lnt<18) man_t_int = 18;
showJnause () ;
break;
case 12:
Increase integration time
i f (r_button) man..t_lnt += 18;
else ma"-t_int++;
break;
case 13:
Increase integration time quickly
if (r _button) man_L lnt += 100;
else i f (Lbutton) man_t_lnt += lB;
else man_t_int += 18i
break;
case 15:
,* Decrease integration time quickly */
if (r_button) man_t_lnt -= 180;
else if (Lbutton) man_t_lnt -= 10;
el se man_t_ int -= 18;
break;
case 16:
,* Decrease integration time */
if (r_button) man_t_lnt -= 18;
else man_t_int--;
break;
default:
. break;
'*
,*
,*
*'
*'
*'
+ 8.5);
157
strc~y((·t_ int_ptr) .text[ Iq]."
");
ftca(man_ t_ int,strfng, 18);
strcat(strfng," Jjs");
str_len = strlen(string);
first_pas = «9 - str_len)
1);
fore i=8; i<str_len; i++) ('L int_ptr) .text[14][ firsLpos+!]
(·t_int_ptr).hi lite_pas = (.t_int_ptr).select_pos;
return status;
»
= string[!];
int bright(int function) {
tnt status=B, Lbutton, I"'_button, str_len, first_pas, fj
char string[e];
r _button = button_last & axa2;
s .. itch (function) {
case 1:
/* Increase brightness */
i f (r_button) brite += 18;
else brito++;
break;
case 2:
/* Increase brightness quickly ./
if (r_button) brite += 18a;
else brito += 19;
break;
case 3:
/. Brightness display; enter directly ./
hideJnouseO;
message("Enter brightness (a - 255) :
");
gotoxy(50.25);
cscanf(lflf" ,Abrfte);
show_mousee) ;
break;
/* Decrease brightness quickly
i f (r_button) brite -= 188;
else brite -= 18;
break;
case 5:
/* Decrease brightness */
i f (r_button) brito -= 19;
brfte--j
case 4:
default:
~f
*'
break;
break;
(brite<8) brite = a;
if (brite)255) brite = 255;
strc~y( (·bright_ptr). teKt[3],"
!i~~~~~f!e ~~;l!~~~t~~ ~g) ;
");
«7 -
firsLpos =
str_len) » 1);
forCi=9; i<str_len; i++) (·bright_ptr). text[3][first_pos+i] = string[!];
status = pio_offset(brite);
('bright_ptr).select_pos = 8;
('bright_ptr).hilite_pos = B;
return status;
int contrast(int function) {
tnt status:B, l_button, I"'_button, stl"'_len, first_pas,
char string[8];
r _button = button_last &: BKB2j
... itch (function) {
case 1:
,*
fj
Increase contrast
i f (r_button) contr += 19;
else contr++j
break;
case 2:
/* Increase contrast
if (r _button) contr += 199;
else contr += IB;
break;
case 3:
/. Contrast display;
hideJnouseO;
messageC'Enter contrast (B - 255) :
gotoxy(58 ,25);
cscanf('tli" ,5contr);
show_mouse() ;
break;
case 4:
,. Decrease contrast
if (r _button) contr -= 198;
else contr -= IB;
break;
case 5:
Decrease contrast
if (r_button) contr -: 19;
contr--;
break;
default:
break;
,*
}
if (contr<a) contr = 8;
if (contr)255) contr = 255;
strcpy( (*contrast_ptr). te)(t[3],"
!l~~~~~n;r~~;l!~~~~~~~g) i
«7 -
»
*/
qUi ck 1Y .,
enter directly 0/
");
quickly *,
*,
");
firsCpos =
str_len)
1);
forCi=8;1<str_len; i++) ('contrast_ptr) .text[3][ first_pos+1] = string[ 1];
status = pio_galn(contr);
(*contrast_ptr) .select_pas = Bj
('contrast_ptr) .hilite_pos = B;
return status;
int hist(int function) {
158
l~~g si~ium56t ;';'a~~:hml~;
float Lhist[16];
if (funct i on==-1) {
fore i=B; 1<9; i++) strcpy( (·hist_ptr). text[ i],"
dra",_win(hi.t_ptr) ;
return OJ
"l;
}
i f (funct i on==-2) {
fore i=B; i<8; i++) strcpy( ('hist_ptr). text[i],"
strcpy( ('hi.t_ptr). texi[8], "LO_8uffer A-HI");
('hisLptr).text[B][l1] = bUf + 65;
dra",_win(hist_ptr) ;
return OJ
.');
}
if «acq_mode==1) II (acq_mode==2» {
('mode_ptr).hil ite_pos = 3;
status 1= do_ funct 1on(modo_ptr ,3);
dra",_win(mode_ptr) ;
return status;
}
status = dt_htst(modo_last,buf ,h)j
fore i=B; i<256; i+=16) {
smal Lh[i116] = B;
for(j=B;j<16;j++ )
small_h[i/16] += h[i+j];
~or( i=l; i< 16; i++)
if (small_h[i])smalLh[max_posJ) max_pas
if (sma l1_h[ma><-posJ)
for(i=B; 1<16; i++)
Lhist[i]
else {
=8
= i;
• «float)small_h[f]/(float)smalLh[max_pos]);
f _hi st[8] = 8;
for(i=8;1<16;i++) Lhist[i] = 8;
~or(i=8; f<8;i++)
for(j=8;j<16;j++ )
('hf.t_ptr). text[7-i ][j] = (f_hist[j]>Cfloat)i )"!( Lhfst[j]>« float) f )+0.5)"1219:228:32;
('hisLptr).text[B][l1] = buf + 65;
return status;
int vfdeo_buf(int function) {
fnt status=B, quit=B;
unsigned fnt count=9j
char chi
switch (function) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
('dfsp_buf_ptr) .select_pos = ('di sp_buLptr) .hil fte_pos;
buf = (·disp_buLptr).select_pos - 1;
status 1= dLset_buffer(buf);
break;
case 15:
hfdeJllouseO;
buf = seq_startj
mess3go("Press e - 9 to control speed, any other key to stop");
if (seq_start!=seq_end) {
do {
(·disp_buf_ptr).hilite_pos = buf + I;
status = d03unct fon(disp_buLptr ,('disp_buLptr) .hil ite_pos);
dra",-win(di sp_buf _ptr);
buf++j
if (buf)seq_end) buf = seq_start;
delay(count) ;
if (kbhftO) {
ch = getchO;
if «ch)47) && (ch<5B» count = 58' (unsigned int)(ch-4B);
01 S8 quit++;
}
get_mouse e) ;
if (mouse. button) {
whf le(mouse.button)
quft++;
}
whfle(!quft);
}
('disp_buLptr).hflite_pos = seq_start + I;
status = d03unction(disp_buLptr, ('dfsp_buLptr) .hi 1 ite_pos);
draw_w in(disp_buf_ptr);
shoUl_mouse ();
break;
case 16:
message("Hit 'V' to clear buffer, any other" key to cancelli);
whfle (!kbhitO);
switch (getchO) {
case 89:
f· V ·f
159
case 121:
f· y ·f
status 1= dLclear_frame(modo_last,buf)i
break;
default:
break;
}
default:
('disp_buf_ptr).hll ite_pos
break;
= (·disp_buf_ptr).select_pos;
break;
}
return status;
}
int seq_frame(int function) {
tnt status=O, i I r _button;
r_button = button_last & BxB2i
switch (function) {
case 1:
if (acqJnode!=1) for(i=s.q_start;i(s.q_end+l;i ..... ) status 1= dLclear_frame(acq_mode,1);
status I = dt_seq (acqJnode, seq_start, seq_end, a vB_mode, nurn_buf ,SPC_mode, seq_dB 1ay, tr t 9_de 1ay) i
for(i=seq_start; i<seq_end+l; i++) {
('disp_buLptr).hll ite_pos = i;
status = do3unction(disp_buf_ptr, ('disp_buf_ptr) .hll ite_pos);
draw_win(disp_buf _ptr);
if (fllLlines) status 1= dt_fill_lines(acq_mode,two_fields,1);
if (info_mode) {
status 1= draw_te.t(i,trig_delay • (i - seq_start»;
status 1= dt_draw_pal( i ,43B, 112);
}
deselect_win(seq_ptr) ;
('disp_buLptr).h;Jite_pos = seq_start + 1;
status 1= do_funct i on(disp_buf_ptr, ('d i sp_buLptr) .hll ite_pos);
draw_w i n (di sp_buf _ptr) ;
acqJl10de = 3;
('mode_ptr) .hll ite_pos = acq_mode;
(*mode_ptr) .select_pas = acq_modej
status 1= do_function(hist_ptr,I);
draw_w i nth i sLptr ) ;
select_win(madB_ptr) i
draw_w i n (mode_ptr) ;
break;
case 2:
if (r_button) {
seq_start-- ;
if (seq_start<B) seq_start
}
else {
}
seq_start++ i
if (seq_start==seq..end+l) seq_start
('seq_ptr).te.t[2][8]
break;
case 3:
= B;
= seq..start +
= seq_end;
B.41;
if (r_button) {
seq_ond--j
i f (seq_end<seq_start) seq_end
}
= seq_start;
else {
seq_end++;
if (seq_end>13) seq_end
}
= 13;
('seq_ptr).te.t[3][8] = seq_end + Bx41;
break;
case 4:
f· Enable delayed trigger ·f
('seq..ptr).text[4][7] = 78;
(.se:t.;ptr).text[4][8] = 32;
j"q_ elay = 1;
if (!seq_delay) {
else {
f· Disable delayed trigger ·f
= 7B;
~:~~:r..~;~);t~~t[4][8] = 7B;
('seq..ptr).text[4][7]
}
default:
break;
}
('seq_ptr).hilite_pos = B;
('seq_ptr) .select_pos = (.seq_ptr) .hi lite_pos;
return status;
int ave(int function) {
tnt status=O, r_button, c_data(4J, M=254, y=254, qu1t=Bj
static int m)Llast, my_lastj
char ch, str(SBJj
r _button = button_last &: BMB2j
switch (function) {
case B:
breakj
case 1:
if (! ave..mode) {
,* Average *,
(·ave_ptr).text[1][7] = 78;
('ave_ptr).te.t[I][8] = 32;
aV9-.mode = 1j
if (acq_mode==2) status 1= dLclear3rame(acq_mode,14);
}
else {
160
('ave_ptr).te.t[1][7] = 70;
(·ave_ptr).te.t[1][8] = 70;
ave..mode :: e;
status t dt_acquire(acq_mods,buf ,ave_mods,num_buf ,SPC_mode);
=
}
if «acq_mode==l) && (! ave_mode)) status 1= dt_acquire(acq_mode,buf ,ave_mode,num_buf ,SPC_mode);
break;
case 2:
,a Single-point correction
if (! SPC-",ode) {
*'
('ave_ptr) .te.t[2][7] " 78;
('ave_ptr).te.t[2][8] = 32;
SPC-",ode = 1;
status 1= dt_SPC(acq_mode,buf, num_bufl;
if (acq_mode==2) {
(·ave_ptr).teHt[1][7] = 78;
('ave_pk) .teHt[1][8] = 32;
ave_mode = 1;
status
1=
dt_cTear_frameCacq_rnode,14)j
1= dt_clear_frame(acq_mode,buf);
status
}
}
else {
(·ave_ptr).teHt[2][7] = 70;
('ave_ptr).teHt[2][8] = 70;
SPC-",ode = 0;
if (acq-",ode==2) {
(·ave_pk).te.t[1][7] = 70;
(·ave_pk).teHt[1][8] = 70;
ave_mode :: B;
}
}
status
1= dt_acqufreCacq_mods,buf ,avB_mode,num_buf ,SPC_mode)j
,*
break;
case 3:
if (r_button) {
Number of buffers to average -,
num_buf--j
if (num_buf(l) num_buf = 39;
}
else {
num_buf++j
if (num_buf>39) num_buf = 1;
}
itoa(num_buf, (.ave_pk). te.t[3], 10)'j
if (num..buf>9) (·ave_ptr). te.t[3][2
olse (·ave_ptr).te.t[3][l] = 32,
dra",_",in(ave_ptr) ,
break;
case 4:
= 32;
, . 200m . ,
~~o~a~~~m~~e==l) status 1= dLfreezeO,
if (zoom>6S zoom = 1,
pan = pan + (256 / zoom)'
if (pan>(51Z-(512/zoom»S pan = 512 - (512 / zoom),
scroll = scroll + (249 / zoom),
if (scroll>(489-(480/zoom))) scroll = 469 - (489 / zoom),
status
dt_zoom(bufjzoom,pan,scrol1);
('ave_ptr).te.t[4][8 = zoom + 48,
('ave_ptr) .hi lite_pas = ('ave_ptr) .selecLpos,
f f (acq_mode==l) dt_acquire(acqJJlode, buf , ave_mode ,nllm.-buf, SPC_mode) j
break;
/. Pan & scroll ./
case 5:
if (acq_mode==l) status 1= dt_freezeO,
if (zoom==l) {
=
messageC'No pan or sera 11 for zoom =
delay(l599) ;
return 0;
}
hide_mouseO,
set_mouse_ type( 1),
message(UUse mouse or cursor keys to move window, any other key to eKit U);
do {
get_gmouse 0 ,
if «(mouse.horiz»2)!=mH_last) II «mouse.vert»2)!=my_last)) {
mK_last = mouse.horiz » 2;
=
my_last
mouse.vert
K
mK-last;
y my_last;
=
=
»
2;
}
if (mouse.button) {
"'hiT e (mouse. but ton)
quit++,
}
if (kbhitO) {
ch = getchO,
if (!ch) {
s",itch (getchO) {
case 71:
)( += 28;
,*
break;
case 72:
case 73:
y -~ 2;
break;
Y
-=
K
-= 2;
/* Up Arrow */
/. Page Up • /
29,
break;
case 75:
Home */
/* Left Arrot:.! -/
break;
case 76:
/- Center ./
• = 256 - (256 / zoom),
y = 249 - (240 / zoom);
break;
161
/0 Right Arrow 0/
casa 77:
casa 79:
)( += 2;
break;
/0 End 0/
)( -: 29;
break;
ae:
case
y += 2;
break;
case 81:
y += 28;
/* Down Arrow
'*
*,
Page Dow" *t
break;
}
else quit++j
}
if (~<B) ~
= 8;
:~ ~~~~~1~-(5~~/zoom») ~
}
= 512-(512/zoom);
if (y>(4BB-(4B8/zoom») y = 4B8-(4B8/zoom);
status 1= dt_zootn(buf ,zDom,H,y);
whila(!quit);
pan = Xi
scroll = Yi
sat..mousa_typa(B) ;
sholllJl1ouse ();
if (acq_mode==l) dt_acqutre(acqJl1ode,buf ,avB_mode,num_buf ,SPC_mode)i
break;
case 6:
/0 Gat
pi~al
valua 0/
if (acq_mode==1) {
(Omode_ptr).hilita_pos = 3;
status 1= do_function(mode_ptr,3);
}
hida..mouseO;
status 1= hlst( -1);
ta~tattr(4);
status 1= dt_cursor(I);
sat..mouse_ type( 1) ;
mess3ge("Use mouse or cursor keys to view pixel values, any other key to Bxftll);
do {
geLgmouseO;
If «(mousa.horiz»2)!=mx_last) II «mousa.vert»2)!:my_last»
mK_last = mouse.heriz » 2;
my_last = mouse. vert » 2;
)C
~f
= mx_lastj
y = my_last;
(mouse.button) {
while(mouse.button)
quit++;
}
if (kbhitO) {
ch = getchO;
i f (!ch) {
switch (getchO) {
case 71:
)( += 2Bj
break;
case 72:
y
casa 73:
Y -= 28;
break;
x -: 2;
/0 Page Up 0/
f* left Arrow
break;
case 76:
break;
Homo */
/0 Up Arrow 0/
-= 2;
break;
case 75:
'*
~ = 254;
Y = 254;
'*
Center
x += 2;
break;
case 79:
case
)( -: 29;
sa:
Y ...
break;
case 81:
else quit++j
i f (x
< B)
x
= B;
:~ ~~ ~ ~11~ = ~;511;
= 2;
y += 29;
break;
}
}
*'
/0 Right Arrow 0/
case 77:
break;
*,
if (y > 479) y = 479;
c_data[B] = buf;
c_data[ I] = x;
c_data[2] = y;
status 1= dt_cursor(2,c_data);
c_data[l] = (x / zoom) + pan;
c_data[2J = (y / zoom) + scroll;
status 1= dt_cursor(3,c_data);
i f (zoom)!) {
c_data[l] = c_data[B];
c_data[2] = c_data[B];
/* End
'*
'*
*'
Down Arrow */
Page DOlJJn
*,
162
}
}
goto.y(31,14);
cprintf("%3i" ,c_data[a));
goto.y(3B,14);
cprintf("%3i" ,c_data[l));
goto.y(31,16);
cprintf("%3i" ,c_data(2));
gotoHy(3B,16);
cprintf("%3i", c_data(3));
goto.y(31,lB);
cprintf("Ave = %3i" ,(c_data[a]+c_data[l]+c_data[2]+c_data[3))»2);
goto.y(2B,2a) ;
cprintf(lIx = l3i",(x I zoom) + pan);
goto.y(37 ,2a);
cprintf("y = %3i",(y / zoom) + scrol!);
",hile(!quit);
set_mouse_ type (a);
status 1= dt_cursor(a);
status 1= hist(-2);
show..mouse() j
break;
case 7:
if (! fill_lines) {
/. Fill lines ./
(·ave_ptr).teHt[7][7] = 7B;
(·ave_ptr).teHt[7][B] = 32;
filLl ines = 1;
~f (acq_mode == 3) status 1= dt_filLlines(mode_last,t",o3iolds,buf);
else {
}
(·ave_ptr). teHt[7][7]
(·ave_ptr). te.t[7](B]
fil Llines = a;
= 7a;
= 7a;
break;
case B:
if (! info_made) {
}
/. Add info ./
(·ave_ptr).te.t[B][7]
(·ave_ptr). teHt[B][B]
info_mode = 1;
= 7B;
= 32;
(·ave_ptr). te.t[B][7]
(·ave_ptr). teHt[B][B]
info_mode = OJ
= 7a;
= 7a;
else {
}
break;
case 9:
}
hideJ11ouseO;
message(tlEnter title for image (32 chars max)
gotoHy(4S,25) ;
_setcursortype<-NORMALCURSOR) ;
title[a]
33;
cgets(title);
strcpy( t it 1e ,&t it le[2]);
s~~!~~~~~g~e (_NO CURSOR ) ;
dra",_teHt(buf, trig_delay);
break;
caSB -4:
'a Get number of frames to average _,
return nlm1-buf;
default:
break;
=
~.ave_ptr).select..pos = a;
(·ave_ptr).hil ite_pos = a;
return status;
int LUTs(int function) {
int status=B, r_button, y=B, y_last=B, my_last, quit=B;
char chi
s",itch (function) {
case 1:
case 2:
case 3:
case 4:
status = dt_set_D lute funct 1on-1);
(·LULptr).select_pos
('LULptr).hilite_pos;
break;
=
case 5:
mess3g0("Use mouse or arrow keys to rotate look-up table");
~1~e"'''::~~~jj~)~e(2) ;
do {
get_smouse() ;
if « (1824-mouse. vert)>>2)! =my_last)
y
}
= (1a24-mouse.vert)>>2;
my_last = Yi
if (mouse. button) {
");
163
wh 11 e (mouse. but ton) get_gmouse 0 ;
quit++;
}
if (kbhitO) {
ch = getchO;
if (!ch) {
sw itch (getch 0)
case 72:
case 73:
y += 1;
break;
Y += 2B;
break;
case 76:
case
eo:
case 81:
'0
,*
y = B;
break;
y -: 1;
break;
y -= lB;
break;
Up Arrow
Page Up
0'
*'
*'
'*
'*
OotlJn Arrow */
,*
Page Down
Center
*'
}
else quft++i
}
if (y < B) y = 255;
if (y > 255) y = B;
if (y != y_last) {
status = dt_rota te_LUT
y_last = y;
«0 LULptr) • se I ecLpos-1, y);
}
whfle(!quit);
show_mousee) ;
set../l1DUSB_ type(B);
(oLULptr) .hi lite_pas =
default:
break;
}
return status;
int ffle(function) {
fnt status=a, buffer, disk, nurn_files string_len f·
char file_name[eB], err_str[4B], pathfeB], stringf2Bl;
buffer = (Odisl'_buf_ptr) .select_pos - 1;
di sk = getdiskO;
strcey(path, "K:\\");
path[9] = disk + 65·
getcurdir(9, path+3);
te~tattr(7)·
gotO~Y(2,23) ;
cprintf(":ls
if (acq_mode==l) status = dt3reezeO;
switch (function) {
II
,path);
case 1:
hide-"ouseO;
clrscrO;
~ia~~~a~u~)siem("dfr") ;
message( "Not enough memory to 1Dad command processor!") i
}
status = OJ
do {} while (!kbhitO);
shollJJI1ouse() ;
ungetch(92) ;
break;
case 2:
hide_mouseO;
");
message("Enter new path
goto~y(45,25);
_setcursortype(_NORMALCURSOR) ;
cscanfCOIls " ,&-path);
_setcursortypeCNOCURSOR) ;
status = chd1r(path);
i f (status) {
d:~~;n~~~)~alid path !");
status=B;
}
ShOI.&l-'1!DUse() ;
status = do_function(ffle_ptr,B);
break;
/* load image .. /
case 3:
hide-"ouseO;
U);
message( "Enter name of image fi 1e to 1Dad :
90to~y(52,25);
_setcursortypeCNORMALCURSOR) ;
cscanf("J,s" ,Afi la_nama);
_setcursort ype(_NOCURSOR);
status
1= dt_ image_load(buffer, file_name);
if (status) {
buffer = sprintfCfi la_name, "Ss Ii Is", "Error", status, "loading file !");
messaae(fi la_name);
delay(QBBB);
status=B;
}
show_mousee);
break;
case 4:
'*
Load image sequence
*,
164
if (acq_mode==1) {
(*mOde_rtr) .hi lite_pos = 3;
)
status
= do_func:tion(mode_ptr,3)i
hide-.mouseO i
.. );
message("Enter name of image sequence to load (8 chars maM.)
gotoMy(61, 25);
_setcursortype(_NORMALCURSOR) ;
cscanf("Ss" ,&fi le_name) i
message(IIEnter number of files in image sequence (1 - 14)
gotoMy(6B,25);
cscanf("Sf II ,&num_ ff 1es);
_setcursortype<-NOCURSOR) ;
strcat(ff lo_nama," .9 1' ) i
string_len = strlen(fi le_name);
for (i=1;H=num_files;i++) {
if (1)9) file_name[string_len) = 49;
else fi1B_name[string_len) = 48;
file_name[string_len+1) = 48 + (i X 1B);
fi le_name[string_len+2) = B;
message( ff le_name);
status 1= dt_image_load(i-1,file_name);
"Error", status, "loading file !");
}
else {
seq_start = B;
(*seq..ptr).teMt[2)[8) = seq_start + BM41;
seq_end = num_ files - 1;
(*seq_ptr).teMt[3)[8) = seq_end + B"41;
draw_win(seq_ptr) ;
}
show-.mouse ();
break;
case 5:
hi de-,"ouse 0;
f* Load LUT *f
message(IIEnter nama of look-up table f11e to load
II);
gotoMy(55,25);
_setcursortype(_NORMALCURSOR) ;
cscanf(IISs" ,&fi lo_name};
_setcursortype<-NOCURSOR) ;
status 1= dt_luLload(file..name);
if (status) {
buffer = sprintf(ftle_name,"ls Ii Is", "Error", status, "loading file !");
massaaa( ff 1B_name);
dalay{4BBB);
}
status=O;
elsa {
}
(*LULptr).hil ita_pas = 4;
status 1= do_function(LULptr ,4);
draw_win(LUT_ptr) ;
showJT1ouse() ;
break;
case 6:
,*
Save image .,
status = dLsat_window(1);
hi da-,"ouse 0 ;
message(UEnter name of image fi le to save
gotoMy(52,25) ;
_setcursortypa<-NORMALCURSOR) ;
cscanf("ls'l ,&fi la_name);
_setcursortypa(_NOCURSOR) ;
status 1= dt_imaga_save(buffer,fila_name);
if (status) {
buffar = sprintf(i'i la_name, "Xs It ls lO , IIError", status, IIsaving fi la ! 10);
messaae( fi 1e_name);
delay(4BBB) ;
st:atus=B;
}
showJnouse ();
status = dt_set_window(acct-mode);
break;
case 7:
,*
*,
Save image sequence
hide_mouseO;
message(IIEnter name of image sequence to save (8 chars maKa)
gotoMy(61,25);
_setcursortypa(_NORMALCURSOR) ;
cscanf( 1115 11 ,&ft la_name);
_satcursortype(_NOCURSOR) ;
num..files = seq_end - se'l-start + 1;
strcat(fi la_name, II .9 10 ) j
string_len = strlen(fi la_name);
for (j=1; i<=num3iles; i++) {
if (1)9) fila_nama[string_len) = 49;
alsB file_narne[strin9_lenJ = 48;
file_nama[string_lan+1) = 48 + (i X 1B);
file_name[string_len+2) = B;
message(fi lB_name);
status 1= dt_ image_save(seq_start+i-l,fi le_name);
}
if (status) {
}
buffer = sprintf(file_name,uXs Xi 1sll, IIError", status, IIloading file !II);
message(fi la_name);
delay(2BBB);
status=B;
show_mouse ();
165
break;
case 8:
default:
status = -1;
/0 Quit 0/
break j
}
if (acq_mode==l) {
(omode_ptr).hilite_pos = 1;
status J= do_function(mode_ptr,l);
dr aw_wi n (mode_ptr) ;
}
(ofile_ptr) .select_pos = B;
(Ofile_ptr).hilite_pos = B;
return status;
int setup_bufOnt buffer) {
int status=B;
switch (acq_mode) {
case 1:
/* Free-running */
break;
case 2:
status 1= dt_seLwindow(l);
status 1= dt_clear-frame(buffer);
status sf~t~t!~t~!i~~:(n! (buf ,45B ,112);
break;
default:
break;
}
return status;
int draw_text(int buffer, long int delay)
tnt status=B, length, wr_mode=B;
char string[4B];
time_t t;
struct tm .gmt;
status : = dt_write(title,buffer,256-(Bostrlen(t itle» ,2B,2,wr_mode);
lenth = sprintf(string," Integration Time = Xi us .. ,atoj(ot_int_ptr). text[ (ot_ int_ptr) .selecLpos));
!iat~;tT! n~t~~~l i:(!:~~;;~~~~~:~r ~~5~~~~~ r~~:~h~ ~ B~, ~~~;_mode);
if (acq_mode!=3) {
t = time(B);
gmt = gmtime(&t);
~!~~~~(~t~~~~~~(~i~~~~~t» ;
string[--length] = B;
status 1= dt_wrlte(string,buffer, 256-(4°1ength) ,44B, 1, 1);
}
if (ave..mode) (
status 1= dt_writeC'Averagingll ,buffer ,,21, 14B,l,l.Ilr_mode);
length = sprintf(string,"l.i Frames",num_buf)j
status 1= dt_wrlte(string,buffer,57-(4°1ength), 16B, l,wr..mode);
}
if (SPC..mode) {
status 1= dt_writu("1-Point ll ,buffer,29,39S,l,l.Ilr_mode);
status 1= dt_write("Corrocted" ,buffer ,21,32S,l,l.Ilr_mode);
}
status 1= dt_write("255" ,buffer,4S8,lB7, 1,wr_mode);
status 1= dt_write(" e",buffer,4SB,363,1,lIJr_mcde)j
return status;
int set-1~~s:t;~~:~~~t type) {
switch (type) {
case B:
= 7;
= 0;
inregs.x.dM = 639;
inregs~x~aM
,. Text cursor
,. Set mouse horiZontal limits.
0/
0/
inregs~M.cX
'*
status 1= intB6(Bx33,&inregs,&outregs);
0/
inregs.M.ax = 8;
Set mouse vertical limits.
inregs.M.cX = OJ
inregs.x.dx = 199;
status 1= intB6(eK33,&inregs,&outregs);
inregs.x.aM = 15;
,. Set mouse mickey/pixel ratio. ./
inregs.M.cM = 10;
/. i.e. "speed" of mouse.
./
inregs.x.dM = 10i
status = intB6(BK33,&inregs,&outregs);
break;
/0 DT Video screen i.e. 512 K 4BB 0/
case 1:
/* Set mouse horizontal limits.
*/
inregs.M.ax = 7;
inregs.M.cX = B;
inregs.x.dx = 2048;
status 1= intB6(eK33,&inregs,&outregs);
0/
inregs.x.ax = 8;
/. Set mouse vertical limits.
inregs.M.cM = B;
inregs.x.dx = 1929;
status 1= 1ntB6(ex~3,&inregs,&Dutregs);
inregs.x.ax = 15;
/* Set mouse mickey/pixel ratio . • /
inregs.M.C)( = 5;
/* i.e. "speed" of mouse.
*/
inregs.x.dM = 5;
status = int86(Ox33,&inregs,&outregs);
break;
166
*'*'
*'
,*,*
,*
,*,*
case 2:
Binary selection
inregs.x.ax = 7;
Set mouse horizontal limits.
fnregs.x.cK = B;
inregs.x.dx = IB24;
status 1= int86(~)(33,&inregs,&outregs);
;nregs.x.ax = Bi
Set mouse vertical limits.
fnregs.x.ex = B;
inregs ••• d. = 1824;
status 1= intB6(B.33,&inregs,&outregs);
fnregs.x.aM = lSi
Set mouse mickoy/pbel ratio. */
fnregs.x.cH = 5;
i.e. "speed" of mouse.
fnregs.x.dx = 5;
status = fnt86(BH33,&fnregs,&outregs);
break;
default:
break;
*'
}
return Bj
B.1.3 ADTRON.C
The code adtron. c constitutes a function library that executes control of the Adtron
DGS-2 and DGS-16 data generators.
/0
Function library for accessing Adtron DGS-2 and DGS-16 cards
'<Iritten 1-9-92 by Laurence Flath
Latest Revision 4-13-93 by Laurence Flath
Source code up to 4-13-93 (C) Copyright 1992, 1993 by Laurence Flath
Compiled in Turbo C++, large memory model, optimized for size
0/
typedef unsigned char byte;
#def i ne
#def i ne
#define
#define
#def i ne
#def i ne
DGS2
DGS 16
HALT
GO
GO_SSC
LENGTH
int DGS2_ALB
int DGS2_ALI
int DGS2_LCLK
int DGS16_ALB
int DGS16_ALI
int DGS16_LCLK
int
int
int
int
int
int
RAM
CTRO
CTR1
MUX
BIT
MISC
int RAMa
int CHAN
byte
byte
byte
byte
B.218
B.2Ba
8.B6
a.A6
0.E5
43050
/* Halt, cont. mode, int., Out3 = Ext. elk
1* Run, conL mode, into disabled, Out3 = Ext. elk
= DGS2;
= DGS2 + 1;
= DGS2 + 13;
= OGS16;
= OGS16 + 1;
= DGS16 + 13;
= DGS2 + 2;
= OGS2 + 3;
= OGS2 + 4;
= OGS2 + 5;
= OGS2 + 6;
= OGS2 + 7;
= OGS16 + 2;
= DGS16 + 6;
bit_set[B]
bit_mask[B]
dibble_set[4]
dibble_mask[4]
byte pattern[21552];
I·········· .................................................. _.. ·······_·1
~
to
int dgs_halt(int mode)
I.
I.
int mode
~
~
I.
I.
~
Stops Adtron boards.
0/
Acquisition mode (l=freerun,
2=slowscan, etc.).
.1
·1
Returns e if no errors in
stopping have occurred.
·1
·1
~
~
I······"·· .................-.................... -.-.................... ··1
~
int dgs_halt(int mode) {
int status=ej
if (mode) outportb(BIT ,HALT);
return status;
*,*,
1* Run, sing. mode, into disabled, Dut3 = Int. elk .1
to
~
Halt generators 0/
167
,..........................................................................,
~
;*
int dgs_startOnt mode)
/*
/*
fnt mode
~
~
*;
Starts Adtron boards.
Acquisition mode (l=freerun,
2=slowscan, etc.).
*,*,
~
*,*,
I·····················································...................,
~
'*
Returns a if no errors in
starting have occurred.
/*
~
~
~
int dgs_start(int mode) {
int status:Bj
outportb(OGS16_AL1, (byte)«LENGTH-l)
8»;
f* MSB of OGS-16 address register *f
outportb(OGS16_ALB, (byte)«LENGTH-l) & BHBBFF»;
f* LSB of OGS-16 address register *f
outportb(OGS16_LCLK,B) ;
outportb(OGS16_LCLK,B) ;
outportb(OGS16_LCLK,B) ;
B»;
outportb(OGS2_ALl, (byte)( (LENGTH-l)
f* MSB of OGS-2 address register *f
outportb(OGS2_ALB, (byte)( (LENGTH-i) & eHBBFF»;
f* LSB of OGS-2 address register *f
outportb(OGS2..ALB, (byte)( (LENGTH-l) & eHBBFF»;
;* LSB of OGS-2 address register *f
outportb(OGS2..LCLK,e) ;
outportb(OGS2..LCLK,e) ;
switch (mode) {
case 1:
f* Free-running
outportb(MUX,Bx7B) ;
outportb(BIT, GO);
RUn generators
outportb(MUX,BxFB) ;
outportb(MUX,Bx7B) ;
outportb(MUX,BxFB) ;
break;
case 2:
f* Continuous trigger *f
outportb(MUX, Bx5B);
outportb(BIT ,GO_SSC);
RUn generators
outportb (MUX, BxOB) ;
outportb(MUX,Bx5e) ;
outportb(MUX,BxDB) ;
break;
case 5:
f* Test trigger *f
outportb(MUX,ex7e) ;
outportb(BIT ,GO_SSC);
RUn generators
outportb(MUX,exFB) ;
outportb (MUX, ex7B) ;
default:
break;
»
»
,*
*'
*'
,*
*'
'*
*'
}
}
return status;
,........................................................................,
*;
,*f*
~
void make_pat(int data, unsigned int len):
,.
~
;*
int data
;*
,.
f*
;*
;.
~
,.
,.
,.
,.
,.
unsigned int len
~
,.
,.
~
Builds up bit
pattern to send .,
to Adtron board . • ,
Bit value (1 or
e) or -1 to
reset the write
address to the
beginning of
the pattern.
~
*f
*f
.,
*f
*f
*f
~
Number of
.,
consecutive
.,
bits of value
.,
'data' to write . ,
to pattern.
.,
No values
returned.
~
.,
.,
,.................................................................................... /
~
~
void make_pat{int data, unsigned int len) {
~!:~~~e:n!n~~~~~~' i~~t~~os,
TB, T1;
switch (data) {
case -1:
switch (len»2){
case B:
TB = 7;
break;
case 1:
Te = 3;
break;
case 2:
Te = 5;
break;
case 3:
Te = 1;
break;
default:
break;
I" Reset ·1
}
T1 = Te - 1;
bitpos = TB;
bytepos = (LENGTHf2) - 1;
break;
case B:
f* LOll *f
168
for(i=B;i<len;i++) {
pattern[bytepos] = pattern[bytepos]
&
bit_set[bitpos];
bft~os--i
i f (bitpos(T1) {
bitpos = TB;
bytepas--j
}
break;
case 1:
f. HIGH .f
for(i=B;i<lenji++) {
pattern[bytepos] = pattern[bytepos] I bitJl1ask[bitpos];
bitpos--;
if (bitpas<T1) {
bitpos = TB;
bytepas--;
}
break;
default:
break;
,.**.................................•...................................,
~
f.
~
/*
/*
~
Constructs a generator waveform based
on the system's operating modea
*'*'
.f
f.
int data
Generator number on DGS-16 (B-15).
f·
int mode
Acquitition mode
~
,*
~
,*/./.
~
,.
/.
lnt Lint
int dump_3
~
~
(1=fre.run,2=sla~scan)
•• /
~
~
B for 1 field, 1 for 2 fields (freerun
mode only).
,*
./
./
*'
*'
*'
~
No values returned.
~
~
~
Integration time in number of Adtron
./
clock cycles (B. 774 ~sec each). A
.,
t_int=B represents 33 ms integration'll,
time.
./
~
/*
~
.f
void build_gen (int gen,int mode,int t_int, int dump_3) :
~
Note procedure for filling a generator with a pattern
~
,.
1. Reset pattern counter by calling:
,.
2. "'rite bit pattern using make_pat; use for-loops for
constructing comple_, repetitive pattens.
.,
,*
~
,*/.
make_pat(-l,B)
./
~
*,
~
~
3. Be absolutely sure the number of bits I.IJritten to the
pattern is e_actly the length of the pattern (for
.f
this application, 43B5B bits) to avoid certain
./
memory crash.
.t.
'*
*'
,.........................................................................,
~
~
void build..gen(int gen, lnt mode, int t_int, int dump_3) {
int i;
s~itch
(mode) {
case B:
case 1:
'*
return;
switch (gen) {
case B:
case 1:
Free-running
*'
make_pat(-l,B);
make_pat(B,43B5B) ;
break;
make_pat(-l,l);
make_pat(B, 1479);
for(i=B;i(122;i++) {
make_pat(B,5) ;
make_patel, 159);
}
make_pat(B,4l);
if (! Lint) make_pat(l, 1517);
else {
make_pat(l, 1B);
make_pates, t_ int-1S);
make_patel, 1517-t_int);
}
for(i=B;i<121;i++) {
make_pat(B,5) ;
make_pat(l, 159);
}
case 2:
make_pat(B,5);
make_pat(1,77);
make_pat(B,79);
break;
/. PH_28 ./
make_pat(-1,2);
if (!Lint) make_p.t(1,148l);
else {
make_pat(1,5);
make_pateS, t_ int-5);
make_pat(1,1481-t_int);
}
for(i=B;i(121;i++) {
make_pat(B,5);
169
}
make_pat(B,5);
make_pat(1,157);
make_pat(B 41);
If (!t_Inti make_pat(1,1519);
else {
make_pat(1,5) ;
make_pat(B, t_ Int-5);
make_pate 1, 1519-t_ Int);
}
fore I=B; 1<121; 1++) {
make_pat(B,5) ;
make_pate 1, 159);
}
make_pat(B,5);
make_pat(l, 75);
make_pat(B, 79);
break;
case 3:
f* PH_3B *f
make_pat(-1,3);
if (!t_Int) make_pat(1,148B);
else {
make_pat(l, 10);
make_pat(B, t_ Int-1B);
make_pate 1,148B-t_ Int);
}
for(I=B; 1<122; 1++) {
make_pat(1,3);
make_pat(B,161);
}
make_pat(B, 1558);
for(j=B; 1<121; 1++) {
make_pat(1,3) ;
make_pat(B, 161);
}
make_pat(1,3) ;
make_pat(B, 157);
breakj
case 4:
make_pat(-1,4);
make_pat(B, 1482);
for(I=B;I<122;1++) {
mako_pat(1,3) ;
make_pat(B, 161);
}
make_pat(B, 1558);
for(j=B; 1<121;1++) {
make_pat(1,3) ;
make_pat(B, 161);
}
make_pat(1,3);
make_pat(B,155);
break;
case 5:
make_pat(-1,5) ;
make_pat(l, 147B);
for(I=B; 1<122;1++) {
make_pat(l, 12);
make_pat(B, 7B);
make_pat(1,B2) ;
}
make_pat(l, 155B);
for(I=B; 1<121;1++) {
make_pate 1, 12);
make_pat(B, 7B);
make_pate 1,82);
}
make_patel, 12);
make_pat(B, 7B);
make_pat(1,8B) ;
break;
case S:
make_pat(-1,6) ;
make_pat(B,21529) ;
make..pat(dump_3, 1);
if (!t..lnt) make_pat(0,2152B);
else {
}
break;
case 7:
make_pat(-l, 7);
make_pat(B,4);
make_patel 1);
if (!t_Int) make_pat(B,43B45);
else {
make_pat(B, t_ Int);
make_pat(1,I);
make_pat(B,43B44-t.. Int);
}
break;
,- VT */
make_pat(-l,B);
if (t_ Int) make_pat(B 43B50);
else make_pat(1,43B5B ;
break;
case 9:
f* COMP_SYNC *f
make_pat(-1,9);
for(I=B; 1<6;1++) {
case B:
i
170
}
for(i=e;i<6;i++) {
make_pat(e,35);
make_pat(1,6);
}
for(i=e;i<6;i++) {
make_pat(e,3)}
make~pat(1,38) ;
for(j=e;i<25S;i++) {
make_pat(e,6) ;
make_pat(l, 76);
}
make_patte,S) ;
make_pate 1,35);
for(i=e;i<S;i++) {
make_pat(e,S)make_pat(1,38) ;
}
for(i=9;i<S;i++) {
make_pat(e,S5) ;
make_pat(l,S);
}
for(i=e;i<5;i++) {
make_patte,S);
make_pat(1,38);
}
make_patte,S) ;
make_pat(1, 79);
for(j=e;i<25S;i++) {
make_pat(e,6) ;
make_pat(1,7S);
}
break;
case 19:
make_pat(-1,19)make_patte, 1487);
for(i=e;i<122;i++) {
make_pat(1,69);
make_pat(e,95);
}
make_patte, 1556);
for(i=9;i<121;i++) {
make_pat(dump_S ,69);
make_pat(B,95);
}
make_patCl,S9);
make_pat(B,B4);
break;
case 11:
make_pat(-l,l1);
make_pat(B,4S95e) ;
break;
case 12:
make_pat(-l, 12);
make_pat(B,43BS9) ;
break;
case 13:
make_pat(-1,13);
make_pat(e,43B5e) ;
break;
,*
TRIG'
*'
case 14:
make_pat(-1,14);
make_pat(e,43B5e) ;
break;
case 15:
make_pat(-l, 15);
make_pat(e,43B5e) ;
break;
default:
break;
}
,*
break;
case 2:
switch (gen) {
case 9:
make_pate -l,e);
make_pat(9,43B59) ;
break;
Continuous-Trigger -,
'*
Clock Mode
case 1:
make_pate -1,1);
make_pat(e,23B42) ;
for(i=B;1<122;i++) {
make_pat(e,5) ;
make_pat(1, 159);
}
break;
case 2:
,*
PH_2S
make_pate -1,2);
if (!t_lnt) make_pat(1,23e42);
else {
make_pat(1,5);
make_patte, t_lnt-5);
make_pate 1, 23e42-t_l nt) ;
}
for(1=e;1<122;i++) {
make_pat(1,2);
make_pat(e,5);
make_pate 1, 157);
*,
*,
171
break;
,* PH_3S
maka_et (-l,3);
~~s~! 1nt ) maka_pat(l,23B42);
casa 3:
*/
r
maka_patCl,lB) ;
maka_pat(B, t_ lnt-1B);
maka_pat(l,23B42-t_lnt) ;
}
for(I=B;I<122;1++) {
maka_pat(B,l);
maka_patCl,3);
maka_pat(B,16B) ;
}
break;
case 4:
maka_pat(-l,4);
maka_pat(0,23042) ;
for(I=0;1<122;1++) {
maka_pat(0,3);
maka_pat(l,3);
maka_pat(B,lSB) ;
}
break;
case 5:
make_pat(-l,S);
make_pate 1,23042);
for(1=0;1<122;1++) {
make_patCl,12) ;
maka_pat(B ,lS2);
}
break;
caSe 6:
case 7:
maka_pat(-l,6) ;
maka_pat(0,43BSB) ;
break;
maka_pat(-l,7);
make_pat(B,1) ;
make_patel 1);
if (!t_lnt) maka_pat(B,43B4B);
else {
make_pat(B,L lnt);
maka_pat(l,l);
maka_pat(B,43B47-t_ lnt);
}
breakj
case 8:
make_pat(-l,B);
if (t_lnt) maka_pat(B 43BSB);
l
else maka_patCl,43BSBJ;
break;
case 9:
make_pat(-l,9);
maka_pat(l,43BSB) ;
break;
case lB:
make_pat(-l,lB) •
make_pat(B,l4B7) ;
for(I=B;I<122;1++) {
make_patCl,67) ;
make_pat(B,97);
}
make_pat(B,lSSB) ;
for(I=B;I<121;1++) {
make_patCl, 67);
make_pat(B,97);
}
make_pat(l,66);
make_pat(B,S7);
break;
case 11:
make_pat(-l,ll) ;
make_pat(B,43BSB) ;
break;
case 12:
make_pat(-l,12) ;
make_pate 1, 23B42};
for(I=B;I<244;1++) {
make_patCl,l4) ;
make_pat(B,64) ;
ma ke_pat(l,4);
}
break;
case 13:
make_pat(-l,13) ;
make_pate 1, 2BBBB);
make_pat(B,23BSB) ;
break;
case 14:
make_pat(-l,14) ;
make_pat(B,43BSB) ;
break;
case 15:
make_pat(-l,lS) ;
make_pat(B,43BSB) ;
break;
default:
)
default:
break;
break;
/* TRIG' *;
172
,.........................................................................,
~
,.
,.
,.
~
void download_gen(int gen) :
~
Loads bit pattern
./
previously bui 1t up into ./
a generator on the OGS-16.'/
~
,*
*'
,*
*,
,.........................................................................,
,.
int gen
OGS-16 generator (B - IS) ./
to download pattern into.
~
~
No values returned.
~
~
void download_gen(int gen) {
. unsigned int port = RAMB;
register int count, pat_byte=O;
byte data, addr_MSB=B, addr_LSB=B;
count = LENGTH12;
port += gen , 4;
while (count--) {
outportb(OGSI6_ALl, addr-MSB);
outportb(OGSI6_ALB ,addr_LSB);
outportb(port, pattern [pat_byte]);
pat_byte++;
t~d(T;~~r:~s~S
{
addr_MSB++;
}
,.........................................................................,
,*
~
int dgs_clearall0 :
,.
Loads B into all pattern RAM or
OGS-16.
~
./
./
'*
*'
,*
*,
*'
,........................................................................,
~
~
No values passed.
~
~
Returns B if no errors have
occurred.
j*
~
~
lnt dgs_clear.ll0 {
int status=B, i;
register 1nt count;
unsigned lnt port
RAMB;
~~~(i~~~l<~~~~S {ddr_MSS=B;
count
LENGTH/2;
whi 1. (count--) {
outportb(OGSI6_ALI,addr-MSB);
out portb(OGSI6_ALB addr_LSB);
outportb(port,B"BB S;
addr_LSS +=2;
if (!addr_LSS) {
addr-MSS++;
=
=
}
port++;
}
return status;
,..........................................................................,
*'*,
*,
/*
e
*'
/ .........................................................................,
~
/.
1*
int dgs_ inHO :
j*
~
sets-up DGS-2 & DGS-16 for
free-running, 33 ms integration time
operation.
Ja
No values passed.
~
Returns
~
download_gen(gen) ;
}
~
~
if no errors have occurred.
lnt dgs_inltO {
int 1, j, gen, status=Bj
status= dgs_ha 1t( I);
outportb(MUX, B"5B);
outportb(MISC,2) ;
outportb(CHAN,e) ;
for(i=B;i<4;1++) {
for(j=B;j(4;j++) {
gen = i + (4'j);
bul1<Lgen(gen,I,B,I) ;
}
~
./
I- Nonnal,
pOSe
~
edge trig., ext. elk
/. OGS-16: si"teen 64k channels ./
1* Construct waveforms
'*
*'
Download waveforms a'
status = dgs_start(I);
return status;
I·····················································...................,
~
j*
~
int dgs_constructCint t_int,int mode,int dllnp_3) :
*,
~
~
*,
173
f*
1*
1*
Constructs all generator waveforms
based on the system's operating modo,
and starts the Adtron boards.
,*
int mode
/*
int t_int
~
~
,*
jo
jo
~
Acquitition mode (1=freerun,2=slolllscan).*'
jo
j.
~
*'*'
*,
int dump_3
'*
*,
*,
~
Integration time in number of Adtron
clock cycles (B.774 ~sec each). A
t_ int=B represents 33 ms integration
time.
.j
.j
B for 1 field, 1 for 2 fields (freerun
mod. only).
.j
.j
~
*,
/ .........................................................................,
~
~
Returns B if no errors have occurred.
~
int dgs_constructOnt t_int, int mode, int dump_3) {
fnt i 1 j, gan, status:9;
.
status = dgs_halt(l);
for(i=B;i<4;i++) {
for(j=B;j<4;j++) {
gen = i + (4'j);
bui I d_gen(gen,mode, t_ int, dump_3);
}
do",n I oad_gen (gen) ;
'*
'*
~
Construct tlJaveforms
Download waveforms
*,
*,
;tatus = dgs_start(mode);
return status;
B.1.4 DT.C
The code dt. c constitutes a function library that executes basic control of the Data
Translation DT2861 8-bit frame grabber/processor and the DT2868 16-bit frame processor.
Note that the DT-IRIS calls require that the DT-IRIS C library be linked into the final
application. Also note that two versions of the device driver, idrv61. sys must be
installed; see the routine set_driver for more details.
jo Function library for accessing Data Translation DT-2B61 and DT-2B6B cards
Yritten 1-9-92 by Laurence Flath
Latest Revision 4-29-93 by Laurence Flath
Source code up to 4-29-93 (C) Copyright 1992, 1993 by Laurence Flath
oj
Campi led in Turbo C++, large memory madel, optimized for size
lIincludB "c:\vidBO\dt\ irisl ib\ isBrrs.h"
lIinclude "c:\ptsi\code\iscdefs.h"
IIi nclude <stdio.h>
#dafina
IIdef i ne
IIdefine
IIdefine
IIdefine
IIdafine
BASE
I NCSR 1
INCSR2
OUTCSR
START
END
23B
BASE
BASE+2
BASE+4
BASE+BKBC
BASE+BKBE
I·····················································...................,
~
j.
~
int build_lutsO :
Constructs lookup tables.
I.
No va lues passed.
,.
,.
Returns e if no errors in
downloading lookup tables have
oc:urod.
~
j.
~
~
.j
~
*'
~
·1
.,
.j
~
I·····················································...................,
int build_lutsO {
tnt status=B, i;
int rlut[512], rod[256], green[256], blue[256];
long int j;
forO=B;i(256;i++) {
j. Resultant oj
rlut[l] = B;
rlut[ i+256] = i;
174
,*
status 1= fs_10.d_r1ut(2,r1ut);
for(f=8;~~mif;~; {
green[i] = f;
b1ue[f] = f;
}
status = is_load_oTut(B,red,green,blue);
b1ue[B]=255; b1ue[255]=B; green[255]=8;
status = is_load_olut(l,red,green,blue);
for(f=1;f(64;f++) {
red[f] = 255 - (4 0 I);
green[f] = 8;
b1ue[f] = 255;
OLUT 1: normal grayscale at
/0 OLUT 2: grayscale wfth 1fmits
fo
OLUT 3: pseudo-color of
fO
ILUT e: of 2868
}
for(i=64;f(128;i++) {
red[f] = 8;
green[f] = 255 - (4 0 (127 - f);
b1ue[i] = 4 0 (127 - I);
}
for(f=128;f(192;f++) {
red[f] = 255 - (4 0 (191 - 0);
green[f] = 4 0 (192 - i) - 1;
b1ue[i] = 8;
~or(f=192; f(256; i++)
{
red[f] = 255;
green[i] = 255 - (4
b1ue[i] = green[i];
0
(255 - ill;
of
,..........................................................................,
~
fa
'*
fo
,*
,*1*
,a
fa
~
~
fO
,*/0
tnt dt_acquire(int mode, fnt buffer, int ave_mode,
fnt num_buf, int SPCJlode) :
Acquires a frame, set of
frames, or a 110lils cont fnuous
acquisition based on mode of
operation.
fnt mode:
Acquisition mode (l=freerun,
2=sTowscan, etc.).
int buffer :
Frame buffer (8 - 13) into
which acquisition should
occur.
~
/*
at
~
of
of
at
~
'Int num_buf
Number of frames to average
*1
before display (only
of
meaningful when ave_mode fs
*1
nonzero··1
~
/*
I.
~
fO
~
*,*,
fO
I·
1*
at
a,
1 if a number of frames
*t
should be averaged before
display, or B if no averaging
should occur.
*1
'*
~
*,*,
*,
tnt avo_mode
fa
'a
1*
~
*/
0/
int SPC_mode
1 i f single-point correction
is to occur.. The background
fr-ame is assumed to be in
buffer 15)
fo
~
0
RetUrns e if no er-r-ors in
acquisitfon have occurred.
1*
I·
~
~
of
.1
.1
of
~
.1
.1
~
I·····································. ·. . ·· . ·· . ·. ···. ··················.1
!~~t~~a~~~~:S ~'
,*
.1
int dt_acquire(int mode, int buffer, int ave_mode, int num_buf, int SPC_mode) {
ilut[256];
case 1:
Free-running
if (! aveJlode) {
status 1= is_seLsync_source(1);
sta tus 1 i s_se lecL i nput_frame (buff er) ;
i f (!SPCJlode) status = is_passthruO;
else status 1= h_a1u_passthru(38,15,2);
=
}
else {
}
break;
case 2:
status 1= is_acquire(14,num_buf);
status 1= is-frame_copy(14,buffer);
if (SPC_mode) status 1= fs_subtract(buffer,15,buffer)j
,*
if (! .veJlode) {
}
Slo~-scan
"I
status 1= is_slow_scan(buffer, 1) j
status 1= is_wait_acqu1re_completeO;
else {
status 1= dt_set_window(l);
for(f=Sroi(256;i++) ilut[i] = ionum_buf;
status = is_1oaLS8_i1ut(1,ilut);
status 1= is_selecLS8_ilut(8);
status 1= is_2858_function(3S,14);
for(f=e;i(nulILbuf;i++) {
status 1= dt_set_w1ndow(2) j
of
175
}
status
status
status
status
is_sTotIJ_scan(14, 1);
i s_",a i Lacquire_comp I ete{);
dt_set_", indo", (1) ;
is_2858_function{25,14) ;
status 1= is_select_58_ilut(1);
status 1= is_2858_normalize();
status 1= is_2858_read{B,14);
if (SPC_mode) status 1= t s_subtract(14,15,l4);
status 1= ts_frame_copy(14,buffer);
status 1= dt_set_"'tndo"'(2);
}
default:
break;
}
return status;
}
,........................................................................,
tnt dt_clear_frame(tnt acq_mode, tnt buffer) :
*/
,*'*/*
*,*'
~
~
Clears a buffer over an area dependent
on the acquisition mode.
'*
0*'
'II
*'
,*'*
e
*'
,........................................................................,
~
tnt acq_mode :
~
tnt buffer:
~
Acquisition mode (1=freerun,2=slowscan)
Frame buffer to clear.
Returns
if no errors in clearing
buffer have occurad.
~
~
~
~
*1
~
tnt dt_clear3rame{tnt acq-",ode, tnt buffer) {
tnt status=B;
status 1= dt_set_"'tndD"'(1);
status 1= tS3rame_clear{buffer)S·
status 1= dt_set_window(acq_mode j
return status;
}
,..........................................................................,
,*
~
tnt dt_cursor(tnt functton, tnt dat[4]) :
Controls DT cursor.
/.
~
fnt functfon :
B=h1de cursor, l=show cursor, 2 = move
cursor and return the va lues of the
four piHels the cursor covers.
tnt dat[4]
/*
The buffer to get values from ts passed
tn dat[B] (functtons 2 and 3) and the
coordinates to draw the cursor are in
(x,y) =(dat[1],dat[2]) (functton 2,
position to get piHel values from in
fUnctton 3) and the four ptxel values
are returned (functton 3) tn dat tn the
order: (x,y), (><+l,y), (x,y+1),
x+1,y+1).
/.
/.
Returns e if no errors in cursor
control have occur-ed.
/.
/.
/.
,*'*
,*,*
,*
~
/.
/*
/.
*'
*'
*'
*'
*'
*'*'
~
.,
~
.,
.,
~
*/
.,
.,
*/
*,
I·······························. ·····················...................1
~
~
~
*/
~
tnt dt_cursor{tnt function, tnt dat[4]) {
fnt status=B, row, column, bufferj
s",ttch{functton) {
case 9:
I. Hide cursor .1
status 1= ts_cursor{B);
break;
case 1:
I. Show cursor .1
status 1= ts_cursor(1);
break;
case 2:
I. Set cursor position .1
buffer = dat[B];
column = dat[l];
rD'" = dat[2];
status 1= is_set_cursor_pos1tion(row,column)j
break;
case 3:
I· Return values of piHels under cursor .1
buffer = dat[B];
column = dat[l];
ra.. = dat[2];
status 1= 1s_get_piHe1(buffer ,rotIJ,column,2,dat);
status 1= ts_get_ptxel(buffer,ro",+l,column,2,&dat[2]);
default:
break;
}
return status;
}
I·····················································..·................1
'*
*,
~
I·
1*
~
1*
~
tnt dt_draw_pal(tnt buffer,tnt x,tnt y) :
Clears a buffer over an area dependent
on the acquisition mode.
int buffer
Frame buffer to draw palette on.
~
.,
.1
~
.,
~
176
1*
iot x :
~
f*
Horizontal position to draw palette.
int y :
~
Vertical position to dra", palette.
*'
*'*,
~
*f
~
,*
,........................................................................,
,-
Returns B 1f no errors in drawing
palette have occured.
~
~
int dt_dra"'_pal(int buffer, int x, int y) {
int status=8, bar[18j, i, j;
Y += 256;
for(i=8;1<256;i++) {
for(j=8;j<18;j++) bar[j] = i;
status = is_put_pixe1(buffer,y-i,x,19,bar)i
}
for( i=8,' 1<256; i+=64) status 1= is_put_pixel(buffer,y-i ,x+1B,5,bar);
status = is_put_ph,e1(buffer,y-255,x+18,5,bar);
return status;
,..........................................................................,
~
f*
f*
f*
int dt-filLHnes(int acqJnode, int t",o3ie1ds, int buffer)
Fills-in blank Hnes of image
due to CCD's Hmited vertical
resolution.
'*
~
f*
,*
iot acq_mode
f*
f*
f*
int t",o_fie1ds
f*
f*
int buffer
~
~
Acquisition mode (1=freerun,
2=slowscan).
~
*f
*f
*f
*'
*'*'
~
~
1 if wo fields "'ere in image, *f
8 if only 1 field (free-running *f
mode only).
*f
~
f*
f*
~
Frame buffer in ",hich to fi 11
1ines.
*f
*f
RetUrns a if no errors in
fi 11 ing 1ines have occured.
*f
*'
~
,........................................................................,
~
~
int dLfilLHnes(int acq_mode~ int wo_fie1ds, int buffer) {
int status=8, Hne[512J, bit[lj, i;
status 1= dt_set_",ind.,.,(ac'!-mode);
.,.,itch (acqJnode) {
case 1:
/* Free-running a'
if (wo3ie1ds) {
for(i=8;i(489;i+=4) {
status = is_geCpixel(buffer, i+2,8,512, 1ine);
status = is_put_pixel(buffer, i ,8,512, Hne);
status = is_put_pi.el(buffer, i+1,8,512, 1ine);
status = is_get_pixel(buffer, i+3,9,512, 1ine);
status = is_put_pixe1 (buffer, 1+2,8,512, 1ine);
}
}
else {
for(i=8;i(488;i+=4) {
status = is_geLpi.el(buffer, i+2,8,512, 1ine);
status = is_puLpixel(buffer,i,8,512, line);
status = is_puLpixel(buffer, 1+1,8,512, 1ine);
status = is_puCpi.el(buffer, i+3,8,512, 1ine);
}
}
case 2:
,*
break;
Slow-scan
*f
for(i=l1B; i<362; i+=2) {
status = is_get_pixel(buffer,i,96,328, Hne);
status = is_put_pixe1(buffer, i+1,96,328, line);
}
default:
break;
}
return status;
,......................................................................../
~
f*
int dLfreezeO:
Stops free-running mode of acquisition.
~
*f
,*
*'
,*
*'*'
I························ . ····························.....................,
~
No values passed.
~
Returns B if no errors in freezing have
occurad.
f*
~
~
~
~
int dLfreezeO {
int status=Bj
status = is_freeZB_frameOi
return status;
I··················································. ··...................,
~
f*
int dt_key_grab(int buffer)
Acquires a slow-scan image.
~
f*
~
f*
f*
~
*t
~
1nt buffer
Frame buffer to acquire 1nto.*'
Returns B if no errors in
acquisition have occurad.
~
*'
*t
177
I·····················································...................,
~
~
int dt_key_grab(int buffer) {
1nt status=B;
status = is_slow_scan(buffer,l)j
return sta tus;
I·····················································.........
~
/*
'*
'*
11 • • • • • • • • • ,
int dt_hist(int acq_mode, int buffer, lang int h[256]) :
~
Performs histogram on a buffer
int acq_mode
,*
int buffer
f*
lang int h[256]
Acquisition mode (1=freerun,
2=slollJscan).
~
~
*,
*'*,
~
~
/*
~
*f
~
*'
*'*,
~
Frame buffer to do histogram on.
Histogram data (returned).
~
~
*f
~
,*/*
Returns 9 if no errors in
forming histogram have occurad.
,..........................................................................,
~
~
int dt_hist(int acq_mode, int buffer, lang int h[256]) {
1nt status=9;
status 1= dt_set_windaw(acqJl1ode);
status = is_histogram(buffer,h);
return status;
,........................................................................,
~
f*
f*
f*
~
int dt_image_load(int buffer, char *filename) :
Loads DT image file (256k, no
compression) from disk.
f*
int buffer
f*
char *filename
~
~
/.
/.
Frame buffer to load image into.
Returns B if no errors in
loading file have occured.
~
~
.,
.,
........................................................................,
~
int dLimage_load(int buffer, char *fHename) {
fnt status=B;
status = fs_restore(buffer,B,B,fl1ename)i
return statusi
/
~
*f
Filename string (can include path). *f
~
/
~
*f
*f
*f
,. start at phcel (B,B) .,
........................................................................,
~
/.
f*
f*
~
,.
~
/.
int dt_fmage_save(fnt buffer, char .filename) :
Saves DT image file (256k, no
compression) onto disk.
int buffer
char .fi lename
~
,.
/.
Frame buffer to save image from.
~
.,
*f
*f
~
.,
~
filename string (can include path) . • ,
Returns B if no errors in
saving fi le have occured.
~
.,
.,
,f*.........................................................................·f,
int dt_image_save(int buffer, char .filename) {
fnt status=e;
status = fs_save(buffer,B,l,B,fi1ename)i
return status;
,. Run-length encoded, lossless .,
,f*..........................................................................*f,
f*
f*
,.
f*
,.f*
int dt_init(int acq_mode, int lut) :
Initializes DT boards and DT-IRIS
routines for a given acquisition mode.
,.
int acq_mode
,.,.
int lut
,.
*f
*f
.,
*f
.,
Acquisition mode (1=freerun,2=slowscan) .• ,
Current output lookup table (0 - 3).
*f
Returns B if no errors in
initial ization have occured.
.,
.,
.,
,int............................................................................
,
dt_init(int aCll-mode, int lut) {
~
~
'Int status=B;
register int 'I i
switch (acq_mode) {
case 8:
status
status
status
status
status
status
status
set_driver(1);
is_ inlt ia 1izeO;
is_error_messages( 1);
is_ inlt_lutsO;
build_lutsO;
i s_select_ol ute lut);
is_select_5B_ i lut(0);
/* Startup • f
178
status = is_select_Dutput_frame(8)j
status = i s_set_ccnstant(9, 127) ;
status = dt_acquire(i / B,B,l,B);
break;
case 1:
Free-run
status = is_endO;
status = set_driver(!);
status = is_initialize();
status = build..luts();
'*
*'
~i:i~~ ~ :~=~:1:~i::5tH~~{~j;
~i:i~~ ~ ~t~:i=~1~~~~(i~~sition(0,B);
break;
case 2:
status
status
status
status
status
status
status
status
status
1=
1=
1=
1=
1=
1=
1=
1=
1=
/* Continuous trigger *t
is_endO;
set_driver(2);
is_initializeO;
bUild_lutsO;
is_select_olut(lut);
is_select_58_ilut(0)·
is_set_sync_sourceCB;;
dt_set_window(2);
is_display(l);
default:
break;
}
return status;
,........................................................................,
~
~
Loads look-up table
into olut 3.
*/
*/
/-
Name of look-up table
file (string).
*t
*/
f*
/f*
Returns B if no errors
in loading olut 3 have
occurred.
*J
//-
int dt_lut_load(char -file_name)
,*
~
char ·ff1ename :
~
~
*,
*,
~
I·····················································...................,
~
~
int dL lut_load(char *file_name) {
int status=B, red[256], green[256], blue[256];
int str_len=B, i=B, j, value=ej
FILE *fp;
char ch, num_str[B];
if «fp=fopen(file_name,OOrOO»==NULL) {
status = 111;
return status;
}
while «ch = getc(fp» != EOF) {
if «ch)47) && (ch<58» {
num_str[str_len] = chi
str_len++;
}
else {
if (str_len) {
num_str[str_len+1] = B;
value = atoi(num_str,le);
if «value<B) II (value)255»
status = 112;
fclose(fp) ;
return status;
{
}
if (t>511) blue[i-512] = value;
else if (t>255) green[i-256] = value;
else red[i] = value;
i++;
for(j=9;j<8;j++) num_str[j] = 9;
str_len = Hj
}
fclose(fp);
status 1= is_load_olut(3,red,green,blue);
return status;
,.........-_. _......... _....._...-......................... _............... _.....,
~
/*
,.
/*
~
/~
/-
~
,.
,.
int dt_rotate_LUT( int olut, int rotation) :
Rotates va lues in current
output look-up table.
int olut
int rotation
Output lookup table (9 - 3).
~
*J
.,
*J
~
*J
~
Amount of rotation (9 - 255)
*J
Returns B if no errors in LUT
rotation have occurred.
.,
.,
~
,........................................................................,
~
int dLrotate_LUT(int olut, int rotation) {
int status=B, red[512], green[512], blue[512], i;
if (!rotation) status = is_select_olut(olut);
else {
status = is_read_olut(olut,red,green,blue)j
for(j=255;t>=9;i--) {
~
179
r.d[i + rotation] = r.d[i],
gr •• n[i + rotation) = gr •• n[i],
blu.[i + rotation] = blu.[i];
}
for(i=B;i<=rotation,i++) {
r.d[i] = r.d[i + 256),
gr •• n[i) = gr •• n[i + 256);
blu.[i] = blu.[i + 256);
}
status = is_laad_oTut(4,red,graon,blue) i
status = is_s.lect_olut(4);
}
return status;
/** .......................................................................,
y
~
'*
f*
,*'*
/*
~
int dLs.q( int acq_mod., int start_buf, int end_buf,
fnt ave_mode, fnt num_buf I fnt SPC_mode, fnt seq_delay,
long int trig_delay) :
Acquires sequential frames
basad on system configuration.
/*
f*
'Int acq_mode
/*
int start_buf
/*
/*
int .nd_buf
~
~
,*'*1*
~
'Int ave_mode
/*
/*
1*
'Int num_buf
,*
int SPC..mod.
~
~:
'*
int s.q_d.lay
f*
~
f*
*/
*/
1 if a number of frames should
*'y
Number of frames to average
b.for. display (only meaningful
f*
f*
Y
Y
Last buffer in s.qu.nce
(start_buf - 13).
when avo_mode is nonzero.
~
*/
First buffer in s.qu.nc. (B-13). */
averaged before display, or B
no averaging should occur.
~
f*
Acquisition mode (l=freerun,
2=slowscan).
*,
*,*'
*,y
*/
*/
*,Y*'
*,
*,y
*/
*'
*/
1 if Single-point corr.ction
is to occur. The background
frame is assum.d to be in
buffer 15).
*f
each successive trigger, 9 for
a constant trigg.r d.lay.
*f
*/
Y
~e::y"~~~~de~:i~~!~r~:~g=~t.r:~
1*
f*
1*
Numb.r of ~s.c to delay each
successive acquisition from the
the trigg.r (only valid if
seq_delay is nonzero.
1*
1*
Returns 9 if no errors in
sequential aquire have occur-ed.
long int trig_delay
~
*'
Y
*'
*'y
*'*'
*/
*/
I·············.,·······················.,···············........, ...........y,
~
int dt_seq(int acq-",od., int start_buf, int end_buf, int av._mode, int num_buf,
l~~g si~ius=B, buf!r~~1i~H~5~],
switch (acq..mod.) {
fa Free-running .f
case 1:
if (ave_mod.) {
if (start_buf! =.nd_buf)
for(buf=start_buf;buf<end_buf+l,buf++ )
status 1= is_acquire(buf, num_buf),
else status 1= is_acquire(start_buf, num_buf);
}
else {
if (start_buf! =.nd_buf) status I = i s_s.quent i a Lacqu i r. (B, start_buf ,end_buf) ,
.15. status 1= is_acquir.(start_buf, I),
}
if (SPC..mod.) for(buf=start_buf,buf<end_buf+l;buf++) status 1= is_subtract(buf ,15,buf),
break;
case 2:
f· Sl<X&1-scan .,
if (av._mod.) {
status 1= dt_s.t_",indow(1),
for(i=B,i<256;i++) ilut[i) = i * nUllLbuf,
status 1= is_load_58_ilut(I,i1ut),
for(buf=start_buf ,buf<end_buf+l;buf++) {
status 1= is_s.lect_5B_ il ut(B),
status 1= is_28583uncti on(35 ,buf) ;
forO=B,i<num_buf,i++) {
status 1= dLs.t_",indow(2);
status 1= is_slow_scan(buf,1);
i
:i:i~: ~ ~~:~:~~;~~d~!(~)~omplete();
status 1= is_2858_function(25,buf);
}
status
status
status
status
1= is_s.l.ct_58_ilut(I),
= is_2BSe_normalizeO;
1= is_s.l.ct_5B_ilut(B),
1= is_2858_r.ad(B,buf),
J
:~ g~~~~~:) s~!~;;~·gY\~~~~bi~~~~(~~~:~5~~~~~;delay
}tatus 1= is_s.l.ct_outpuLfram.(buf);
}
.15. {
for(buf=start_buf,buf<end_buf+ l,buf++) {
*
(buf-start_buf»)
«
2),
180
status J= is_slow_scan(buf,l);
status J= is_wait_acquire_complete();
if (seq_delay) status J= pio_delay(((unsigned long) (trig_delay' (buf-start_buf»)
status 1= 1s_select_output_frame(buf);
if (SPC_mode) status J= is_subtract(buf ,15,buf);
}
break;
default:
break;
}
status J= pio_delay((unsigned long) trig_delay
return status;
«
2);
}
,................ .........................................................,
,..
~
f·
fo
~
fo
~
int dLseLbuffer(int buffer) :
int buffer :
~
Sets frame buffer for
of
acquisition and display. of
Frame buffer to use (0 - 13).
'*
/*
Returns B if no errors 1n
switching buffers have occured.
~
~
of
~
*'*'
~
, • • • • • • • • • • • • • 111 • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • ,
int dt_set_buffer(int buffer) {
i nt sta tus=9 i
status J= i s_select_ i npuLframe(buffer);
status 1= 1s_select_Dutput_ frame(buffer) j
return status;
}
I·····················································....
~
fo
~
f.
~
,*'*
int dt_set_olut(int olut)
int olut :
11 • • • • • • • • • • • • • • ,
Sets output lookup table.
Output lookup table (9 - 3).
Returns e if no errors in
switching the olut have occured.
~
of
~
of
~
*'
*/
,int........
"..........................................................................."·····1
dt_set_olut(int olut) {
~
~
int status=O;
status = is_select_olut(olut);
return status;
}
1··················· . ······ . _··· ....... _.......... ············ . ···· . ··· . . ·· . 1
~
f*
I.
I-
int dLseL",indow(int acqJllode):
~
Sets the DT window size *f
for the given
·1
acquisition mode.
·1
f*
of
I.
int acq..mode
I.
~
I.
mode
·1
(l=freerun, 2=sloll.lscan) . • ,
Acqu~sition
Returns 0 if no errors
in setting the ",indow
size have occured.
fO
I.
~
.,
Of
"I
...............................................................................,
int dt_seLwindow(int acq_mode) {
~
/
~
int status=O;
if (acq_mode==2) status J= is_set_act ioe_region(118,96,244,329);
else status 1= is_set_active_region(O,U,S12,S12);
return status;
/ ••• a •• a .................................................................... ,
~
~
/.
int dt_shutdownO:
~
/.
~
/.
/.
Closes
do~n
DT hardware and
soft~ar8..
.,
~
No va lues passed.
..,
Returns U if no errors shutt fng-down
have occured.
./
..,
~
........................................................................,
~
~
/
int dt_shutdownO {
tnt status;
status = is_freez8_frame();
status = is_set_sync_scurce(9);
status = is_end 0 ;
return status;
}
/a ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• ,
f*
f*
/.
I.
/.
I.
'*
~
int dt_SPC(int acq_mode, int buffer, int nurn_buf) :
Takes the average of nurn_buf frames in
the same manner as the current
acquisttition mode and places the
result in buffer 15.
tnt acq_mode
Of
·f
.,
.,
.,
.,
~
Acquisition mode (1=freerun,2=slowscan) . • ,
«
2);
181
~
/*
/*
int buffer
/*
Int num_buf
~
~
*1
Frame buffer into which the system was
acquiring before this operation (8-13).
*/
Number of frames to average (8 - 255).
*/
~
*,*/
,..............................................."........................./
~
/*
f*
Returns B if no errors in this
operation have Clccured.
~
~
~
Int dt_SPC(lnt acq_mode, Int buffer, Int num_buf) {
Int status=8, SPC_buf=15, I, ilut[256)i
status 1= I s_selecL I nput_ frame(SPC_buf);
switch (acq_mode) {
case 1:
Free-running
status 1= Is_acqulre(SPC_buf ,nurn_buf);
break;
case 2:
status 1= dt_seLw Indow( 1);
status 1= Is3rame_clear(!5);
for(i=e;i<255;1++) flut[i) = I * num_buf;
status 1= Is_load_58_ llut(I, ilut);
status 1= Is_selecC5B_llut(8);
status 1= Is_28583unctlon(35,SPC_buf);
for(l=e;l<num_buf;I++) (
status 1= dt_set_",lndow(2);
status 1= Is_slow_scan(SPC_buf,I);
*'
,*
~~:i~~ I~ ~t~:~~wi~d~!(~)~ompleteO;
status 1= Is_285B_ funct I on(25, SPC_buf) ;
}
status
status
status
status
status
default:
1=
1=
1=
1=
1=
is_selecC5B_llut(I);
IS_285B_normallzeO;
is_select_5B_llut(8);
Is_2858_read(B,SPC_buf);
dCseClillndow(2);
break;
}
status 1= Is_selecLlnput3rame(buffer);
return status;
I······························ . ··················. ···...................,
*'*'*'
,*
~
/*
/*
~
,.
fnt dt_write(char *str, int buffer, int
int mode) :
Controls DT cursor.
X,
int y, fnt size,
~
~
char .str
Address of the tel<t string to lIIrite.
.,
Int buffer
Frame buffer onto which to write the
text (B - 13).
.,
,*
int )(
Horizontal posftion to draw text.
.,
Int y
Vertical position to draw text.
/*
Int size
SIZe of square to plxellze text (1 - B).
/*
Int mode
e=overlay, l=opaque.
*'
*'
RetUrns e if no errers in text lIIriting
have occured.
./
./
,*
~
/*
~
f.
~
~
~
~
~
*'
~
~
~
f·
,.
~
.,
~
~
~
,........................................................................
,
y,
~
~
int dt_lIIrite(char ·str, int buffer, int )(, int
fnt size, int mode) {
Int status=B, length, I, strlng[B8);
status 1= Is_seCmode(mode);
status 1= is_set_character_size(size)'
status 1= Is_.et_graphlc_posltlon(y,x);
length = strlen(str);
for(i=B1·1<length;I++) strlng[!) = (Int) str[!);
status = is_draw_text(buffer, length,st.rtng);
return status;
,........................................................................,
,*
~
,.
~
'*
f.
Int dt_zoom(lnt buffer, Int factor, Int pan, Int scroll):
Controls DT cursor.
~
,*,*
,*'*
~
~
~
I·
I.
~
*/
~
tnt buffer:
Current frame buffer to zoom-in on, but
zoom !lIilT remain in effect until this
routine is called again.
*/
*/
./
int factor
Amount of zoom (1, 2, 4, or B).
./
I·
I.
*'
~
*'*'
*'
~
lnt pan
Amount of pan (left-right) In pixels
(-512 - +512).
lnt scroll
Amount of scroll (up-down) In pixels
(-512 - +512).
.,
Returns e if no errers in zooming
have occurad.
*/
./
~
~
I·····················································...................../
~
int dt_zoomCint buffer, int factor, int pan, tnt scroll) {
~
182
iot status;
status = is_zoom_and_pan(buffer,factor ,scroll ,pan);
return status;
,........................................................................,
f*
*f
*,*,
/*
f*
*f
r*
*'*,
f*
f*
*f
*,
f*
*f
f*
*,
f*
*'
~
tnt set_driver(int .cq_mode) :
Switches DT device drivers in memory
between normal and slow-scan modes.
lIorks by swapping first char of dev1ce
drivers" names; when OT-IRIS routines
search device driver chain, only one is
recognized (the correct one, hopefully).
Depends on the normal driver being the
first in the cha1n (after the NUL
dellice, of course), followed by the
slow-scan device driver (which has its
name's first char modified to XDRV61
vs. the normal IDRV61, where X is any
char bes1de 'I'. Th1s meanS 1DRV61.vid
must be the last dev1ce loaded in
CONF1G.SYS, and 1DRV61.ssc must be the
second to last.
fa
fa
f*
f*
f*
f*
f*
fa
~
f*
'lot acq_mode
~
*f
*f
*f
*f
*f
*'
Acquisition mode (1=freerun,2=slowscan).
*,
Returns a if no errors in switching
drivers have occured.
.1
~
*,
I········································································1
~
f*
fa
~
~
~
int seLdrlver(jnt mode) {
int status=9, found_nul=9, i=9;
uns1gned nuLseg=B, nuLDff=BxB4BB;
unsigned vid_seg=B, vld_off=8x84B8;
unsi gned ssc_seg=9, ssc_off=91o«9490;
char ·nuldev=uNUL
";
"'hile (!found_nul) {
f* F1nd NUL dev1ce driver *f
i f (peekb(nuLseg,nuLoff)! =nuldev[l]) 1=8;
else i++;
nuLoff++;
if (1==8) found_nul = 1;
}
nul_off -= 18;
v1d_seg = (peekb(nuLseg,nuLoff+3) « 8) + (peekb(nuLseg,nuLoff+2) & 8xFF);
v1d_off = (peekb(nuLseg,nuLoff+1) « 8) + (peekb(nul_seg,nul_off) & 8HFF);
ssc_seg = (peekb(ssc_seg,ssc_off+3) « 8) + (peekb(vid_seg,vid_off+2) & 8HFF);
ssc_off = (peekb(ssc_seg,ssc_off+1) « 8) + (peekb(vid_seg,v1d_off) & 8HFF);
sw;tch (mode) {
I. Norma 1 video: free-running ./
case 1:
pokeb(v1d_seg ,vi d_off+lB ,8.44);
pokeb (ssc_sag, ssc_of f+ 18,810«58);
break;
case 2:
1* Slow-scan operation ./
pokeb (ssc_seg, ssc_off+ 18,8)(44);
pokeb (v 1d_seg, vi d_off+ 18, BH58);
break;
default:
break;
}
return status;
B.l.S PIO.C
The code pio. c constitutes a function library that executes control of the parallel
port driven digital delay generator and the computer controlled gain and offset DACs.
I.
Function library for accessing parallel port input output
IIritten 5-18-92 by Laurence Flath
Latest Revision 6-24-92 by Laurence Flath
Source code up to 6-24-92 (C) Copyr1ght 1992 by Laurence Flath
Compiled in Turbo C++, large memory modal, optimized for speed
*f
lIinclude <dos.h>
typedef unsi gned char byte;
IIdeflne DATA
IIdeHne OUT_BIT
BxB378
B.837A
1* Data 1ines
f* Output lines
*,
*1
183
#define IN_BIT
exe379
j* Input 11nes
*j
,.........................................................................,
*'
~
/*
~
~
Procedure for using parallel-port interface board:
~
j*
1.
"'rite inverted data to port exe37B.
*j
j*
j*
2.
"'rite register number (bits 1-3) into port e.e:l7A
with bit e cleared.
*j
*j
j*
j*
3.
"'rite register number (bits 1-3) into port e_e:l7A
with bit e set.
*j
*j
~
~
~
~
ja
Register
j*
j*
j*
j*
j*
j*
j*
j*
e
1
2
3
4
5
6
7
~
~
~
/*
~
Port ex37A Addr.
exee
exe2
exe4
exe6
exeB
exeA
exec
exeE
-
exel
exe3
exe5
exe7
axe9
axeB
axeD
exeF
~
~
~
~
Description
Gain DjA.
Offset DjA.
Spare.
Control bits (see below).
Trigger delay count, bits
Trigger delay count, bits
Trigger delay count, bits
Trigger delay count, bits
*j
~
e Be e -
7
7
7
7
*j
*j
*j
*j
*j
*j
*j
*j
~
~
*'
Control Register :
~
/*
*,
,.........................................................................,
bit e:
bit 1:
j*
~
/
Enable trigger delay circuitry.
Manual loadfng of trigger delay counters.
*j
~
........................................................................,
~
j*
int pio_initO:
Initializes parallel interface board.
~
*j
*'
'*'*
e
*,*'
,...................................................... ···················1
~
,*
No va lues passed.
~
Returns
if no errors in startup have
occurred.
~
~
~
~
int pio_initO {
int status = Bj
unsigned long int delay=4;
byte gain=255, offset=12B;
status 1= pio_gain(gain);
status 1= pio_offset(offset);
status 1= pio_delay(delay);
return status;
I·········· ..........................·.· ....·......·····.··.·.............·1
~
j*
~
int pio_gain(int level)
int level
j*
~
I·
I·
~
~
Sends B-bit value to gain DjA.
*j
Level of gain (a - 255).
*j
Returns e if no errors have
occurred.
.1
.1
~
~
~
I··················································. ······.·..............1
int pio_gain(int leve1) {
i nt sta tus=B;
byte dat;
dat
(byte) (255-1eve1);
outportb(DATA, dat);
outportb (DUT _BIT, exaa);
outportb(DULBIT ,exa1);
return status;
=
j* Byte a
-
Gain DfA oj
I······································. ··············...... ·.........·..1
'*
~
j*
~
int pio_offset(int level):
int level:
~
I·
I·
~
~
Sends B-bit value to offset DjA.
*j
Level of offset (a - 255).
*j
Returns e if no errors have
occurred.
.1
.1
~
~
~
I··························································. ·..·....·....1
int pio_offset(1nt level) {
int status=B;
byte dat;
dat = (byte) (255-1eve1);
outportb(DATA, dat " e_FF);
outportb(DULBIT ,a_e2);
outportb(OULBIT ,a_a3);
j* Byte 1
-
Offset DjA *j
return status;
I····· . . ···················. ·······················. ······· ..·.......·.... ·1
~
~
184
/.
f*
int pio_delay(unsigned long int count)
f*
unsigned long fnt count
~
Sends 32-bit count
to delay generator.
Delay count.
./
*/
*,VV
,*f*
e
*/
I·················· . ··································...................V,
~
Returns
if no
errors have occurred.·'
~
int pio_delay(unsigned long int count) (
int status=Bj
~¥t(c~~~t~!) ~~~n~3~
DB
01
02
03
= (byte)
= (byte)
= (byte)
= (byte)
4;
(count & B~BBBBBBFF)·
«count & exBaBBFFBB)
«count & exBBFFeBBB)
«count & exFFBBeaBB)
»
»
»
8);
16);
24);
outportb(oATA, De • exFF);
outportb(OULBIT ,exB8);
outportb(OULBIT ,BxB9);
/. Byte 4
outportb(DATA, 01 • BxFF);
outportb(OULBIT ,BxBA);
outportb(OULBIT ,BxBB);
delay(1Be);
/. Byte 5 -
Trigger Delay Counter, bits 8 - 15 ./
outportb(OATA, 02 • BxFF);
outportb(OUT_BIT ,BxBC);
outportb(OUT_BIT, 9x90);
/. Byte 6 -
Trigger Delay Counter, bits 16 - 23 ./
outportb(OATA, 03 • BxFF);
outportb(OUT_8IT ,9xBE);
outportb(OUL8IT ,9xBF);
/* Byte 7
Trigger Delay Counter, bfts 24 - 31
-
-
Trigger Delay Counter, bits 9 - 7 ./
outportb(DATA, 9x92 • exFF);
outportb(OUT_BIT ,BxB6);
outportb(OUT_BIT ,9~97);
f* Load Trigger Counters
outportb(OATA, a~a1 • exFF);
outportb(OUT_BIT, 9xe6);
outportb(OUL8IT ,9xe7);
f·
Go
*'
*,
·f
de I ay(2ge);
return status;
B.2
Horizontal Clock PLD Program
This program was written by Steve Bell at the University of Arizona's LunarPlanetary Laboratories to create the state sequencer for the CCO horizontal output
multiplexer'S clocks (see Section 4.1.2.3 for more details).
Name
Partno
Date
Revision
Designer
Company
Assembly
Location
Device
HCLK_PT;
HCLK_PT;
MAY 31 91;
BELL
UA LUNAR LAB;
None;
None;
P22V10;
1****************************************************/
/*
/* HORIZONTAL CLOCK SEQUENCER FOR RCA PTSI CCD USE
/*
DERIVED FROM "COUNT1 0 . PLD"
/*
/* This is a 5-bit
/*
STATE MACHINE
*/
*f
*/
*/
*/
*/
1****************************************************1
/* Allowable target Device Types: P22VIO
*/
1****************************************************/
/**
Inputs
**/
185
pin 1
CLK;
pin
CLR;
/**
/* Clock
*/
/* Counter clear input
*/
/* HOR CLKS (4 REQD)
*/
/* RESET
*/
**/
Outputs
pin
pin
pin
pin
pin
23
22
21
20
19
!PHOlC;
!PH02C;
!PH03C;
!PH04C;
!G5C;
pin
pin
pin
pin
pin
18
17
16
15
14
PH1C;
PH2C;
PH3C;
PH4C;
RESET;
/** Declarations and Intermediate Variable Definitions **/
field count
$define
$define
$define
$define
$define
$define
SO
Sl
S2
S3
S4
S5
=
[PH01C,PH02C,PH03C,PH04C,G5C];
/* Declare counter bit field
'b'l1001
'b'OllOO
'b'00111
'b'l0010
'b'11000
'b'OOOOO
field pffiode = [CLR];
GO = pmode:O;
clear = pmode: 1;
*/
/* Define counter states
*/
/* Declare mode control field
/* Define count up mode
/* Define count clear mode
*/
*/
*/
/** Logic Equations **/
/*----------------------*/
sequence count
/* Free running SEQUENCER
{
present SO
present Sl
present S2
present S3
present S4
present S5
if
if
if
if
if
if
if
if
if
if
if
if
GO
clear
GO
clear
GO
clear
GO
clear
GO
clear
GO
clear
}
/* LOGIC EQUATIONS: */
PH1C
PHOlC;
PH2C
PH02C;
PH3C = PH03C;
PH4C = PH04C;
RESET = G5C;
/*-------- end --------*/
next
next
next
next
next
next
next
next
next
next
next
next
Sl;
SO;
S2;
SO;
S3;
SO;
S4;
SO;
Sl;
SO;
Sl;
SO;
*/
186
B.3
Thermal Aliasing Simulation
The following MathCAD code lists the procedure used to generate the plots in
section 3.3.3. Memory limitations forced a maximum N = 1024.
1'1 := lli
sinc(x) ._ iffx
Gaus(x) := exp(-n·x·x)
10.11 :=
a
e :=
i := 1 .. lZ
L
za
f a.
sin
(B'X).l]
B'x
WZ := 1.5
fHx) : = sine
rx - a,s'lI]
l
Z
Z
x - a,s'lI]
fZ(x) := sine
WZ
Wl
r
Tl := 1
saPtpHx) := Gaus
f11s(x)
f1Zs(x)
J
J
.J
.-
(x
.-
[:1]
+
5)
f11s(c:l) = a.573
fl(Y)'sampl(y - x) dy
(x - 5)
(x
.as)
+
fl(y)'saPtpZ(y - x) dy
f12s(a) = a.OOG
(x - .05)
fZls(x)
(x
+
5)
fZ(y)·sampl(y - x) dy
fZls(a) =
a .OOZ
fZZs(O) =
a
(x - 5)
fZZs(x) :=
fX
.05)
+
fZ(y)·saPtpZ(y - x) dy
(x - .05)
t :=
a .. (1'1
Cl1
:= Cl1s(t)
- 1)
+
n(fl1s(t»
t
+
n(flZs(t»
t
t
flZ
t
rZl
:= rZ1sCt)
+
lIU'Zls(t))
:= fZZs(t)
+
n(fZZs(t»
:= if rCZl
< a.O.CZl
fZZ
t
:= if rC11
C11
a ., (0.5·1'1)
t
:= f1Zs(t)
f12
u :=
L
t
:= if [flZ
t
< a.O.f11
]
t
< O.O.flZ ]
t
fZl
t
fZZ
t
L
t
:= if rfZZ
< a.G.fZZ
t
t
L
F11s := fftCf11)
FZls : = fftCfZ1)
FlZs := fftCf12)
FZZs := fftCfZZ)
]
t
]
187
REFERENCES
R. Aguilera, "256 x 256 hybrid Schottky focal plane arrays," Proceedings of the
SPIE, no. 782, pp. 108-113, Orlando, Florida, May 19-21, 1987.
H. H. Barrett and W. Swindell, Radiological Imaging - The Theory of Image
Formation, Detection, and Processing, voL 1, pp. 54-58, 95-116, Academic Press, New
York, 1981.
H. H, Barrett and W. Swindell, Radiological Imaging - The Theory of Image
Formation, Detection, and Processing, voL 2, pp. 414-417, Academic Press, New York,
1981.
J. S. Bendat and A. G, Piersol, Random Data: Analysis and Measurement
Procedures, pp. 299-328, John Wiley & Sons, New York, 1971.
K. B. Benson and J. Whitaker, Television Engineering Handbook, Revised
Edition, pp. 12.38-12.47, McGraw Hill, New York, 1992.
W. B. Birtley, "Proposed figures of merit for staring focal planes," Proceedings of
the SPIE, no. 344, pp. 43-48, Arlington, Virginia, May 4-5, 1982.
R. M. Bracewell, The Fourier Transform and Its Awlications, pp. 201-202,
McGraw Hill, New York, 1965.
W. Cabanski and M. Schultz, "Barrier height of thin-fIlm (25-200A) PtSi-Si
Schottky diodes," Proceedings of the SPIE, no. 659, pp. 93-98, Innsbruck, Austria, April
15-17, 1986.
B. R. Capone, R. W. Taylor, and W. F. Kosonocky, "Design and characterization
of a Schottky infrared charge-coupled device (IRCCD) focal plane array," Proceedings of
the SPIE, no. 267, pp. 39-45, Los Angeles, California, February 12-13, 1981.
B. Capone, L. Skolnik, R. Taylor, F. Shepherd, S. Roosild, W. Ewing, W.
Kosonocky, and E. Kohn, "Evaluation of a Schottky infrared charge-coupled device
(IRCCD) staring mosaic focal plane," Optical Engineering, voL 18, no. 5, pp. 535-541,
September-October 1979.
M. T. Daigle, D. Colvin, E. T. Nelson, S. Brickman, K. Wong, S. Yoshizumi, M.
Elzinga, P. Sorlie, D. Rockafellow, P. Travers, and R. Avel, "High-resolution 2048 x 16
TDI PtSi IR Imaging CCD," Proceedings of the SPIE, no. 1308, pp. 88-98, Orlando,
Florida, April 18-19, 1990.
188
REFERENCES - Continued
M. Denda, M. Kimata, S. Iwade, N. Yutani, T. Kondo, and N. Tsuboucbi,
"Multispectral band Schottky-barrier !RCCD for remote-sensing applications," Proceedings
of the SPIE, no. 1308, pp. 157-168, Orlando, Florida, April 18-19, 1990.
E. L. Dereniak and D. G. Crowe. Optical Radiation Detectors, pp. 233-242, John
Wiley & Sons, New York, 1984.
J. Edwards, J. Gates, H. Alting-Mees, W. Connelly, and A. Thompson, "244 x
400 element hybrid platinum silicide Schottky focal plane array," Proceedings of the SPIE,
no. 1308, pp. 99-110, Orlando, Florida, April 18-19, 1990.
W. S. Ewing, "Silicide mosaic array compensation," Proceedings of the SPIE, no.
409, pp. 102-106, Arlington, Virginia, April 5-6, 1983.
L. M. Flath, E. L. Dereniak and S. M. Shepard, "Performance of a high-speed PtSi
IRCCD camera system," Proceedings of the SPIE, no. 1900, San Jose, California,
February 2-3, 1993.
L. M. Flath, E. L. Dereniak and S. M. Shepard, "Development of a high-speed
PtSi !RCCD camera system," Proceedings of the SPIE, no. 1685, pp. 72-78, Orlando,
Florida, Apri123-24, 1992.
A. M. Fowler and Ian Gatley, "Noise reduction strategy for hybrid IR focal plane
arrays," Proceedings of the SPIE, no. 1541, pp. 127-133, San Diego, California, July 2426, 1991.
A. Fowler, R. Joyce, I. Gatley, J. Gates, and J. Herring, "Evaluation of a 256 x
256 PtSi array for infrared ground-based astronomy," Proceedings of the SPIE, no. 1107,
pp. 22-30, Orlando, Florida, March 30-31, 1989.
J. P. Garcia, E. L. Dereniak, and S. M. Shepard, "High-speed infrared camera,"
Review of Scientific Instruments, 63 (7), pp. 3662-3665, July 1992.
J. D. Gaskill, Linear Systems, Fourier Transforms, and Optics, pp. 111-113, John
Wiley & Sons, New York, 1978.
T. Graeve, Characterization and modeling of high-speed. high resolution focal
plane arrays, Ph.D. Thesis, University of Arizona, 1993.
H. J. Hartnett, N. R. Butler, 1. A. Strobie, and S. Iwasa, "Compensation
electronics for staring focal plane arrays," Proceedings of the SPIE, no. 267, pp. 48-55,
Los Angeles, California, February 12-13, 1981.
189
REFERENCES - Continued
L. R. Hudson and W. L. Wang, "512 x 512 PtSi 1R camera head," Proceedings of
the SPIE, no. 1308, pp. 45-57, Orlando, Florida, April 18-19, 1990.
K. Ishikawa, M. Hamasaki, T. Susuki, H. Kanabe, Y. Kagawa, K. Miyata, and
K. Yonemoto, "IT CCD imaging sensor with variable speed electronic shutter,"
Proceedings of the SPIE, no. 1107, pp. 66-76, Orlando, Florida, March 30-31, 1989.
J. F. Johnson and T. S. Lomheim, "Hybrid infrared focal plane signal and noise
modeling," Proceedings of the SPIE, no. 1541, pp. 110-126, San Diego, California, July
24-26, 1991.
H. V. Kennedy, "Modeling second generation thermal imaging systems,"
Proceedings of the SPIE, no. 1309, pp. 2-16, Orlando, Florida, April 16-18, 1990.
W. F. Kosonocky, "State-of-the-art in Schottky-barrier IR image sensors,"
Proceedings of the SPIE, no. 1685, pp. 2-19, Orlando Florida, April 23-24, 1992.
W. F. Kosonocky, "Review of Schottky-barrier imager technology," Proceedings
of the SPIE, no. 1308, pp. 2-26, Orlando Florida, April 18-19, 1990.
W. F. Kosonocky, T. S. Villani, F. V. Shallcross, G. M. Meray, and J. J.
O'Neill, ill, "A Schottky-barrier image sensor with 100% fill factor," Proceedings of the
SPIE, no. 1308, pp. 70-80, Orlando, Florida, April 18-19, 1990.
W. F. Kosonocky and G. W. Hughes, "High fill factor silicide monolithic arrays,"
Proceedings of the SPIE, no. 782, pp. 114-120, Orlando, Florida, May 19-21, 1987.
W. F. Kosonocky and H. Elabd, "Schottky-barrier infrared charge-coupled device
focal plane arrays," Proceedings of the SPIE, no. 443, pp. 167-188, San Diego,
California, August 25-26, 1983.
W. F. Kosonocky, H. Elabd, H. G. Erhardt, F. V. Shallcross, G. M. Meray, T.
S. Villani, J. V. Groppe, R. Miller, V. L. Frantz, M. J. Cantella, J. Klein, and N.
Roberts, "Design and performance of 64 x 128 element PtSi Schottky-barrier infrared
charge-coupled device (IRCCD) focal plane array," Proceedings of the SPIE, no. 344, pp.
66-77, Arlington, Virginia, May 4-5, 1982.
J. Kurianski, J. VanDamme, 1. Vermeiren, K. Maex, and C. Claeys, "Nickel
silicide Schottky barrier detectors for short wavelength infrared applications," Proceedings
of the SPIE, no. 1308, pp. 27-35, Orlando, Florida, April 18-19, 1990.
B. J. Lechner, "HDTV Status and Prospects," Society for Information Display
Seminar Lecture Notes, vol. I, Seminar M-6, Seattle, Washington, May 17, 1993.
190
REFERENCES - Continued
B. Maddoux and S. Burt, "High performance PtSi linear and area focal plane
arrays," Proceedings of the SPIE, no. 1308, pp. 111-119, Orlando, Florida, April 18-19,
1990.
R. J. Marks, n, Advanced Topics in Shannon Sampling and Interpolation Theory,
Springer-Verlag, New York, 1993.
M. J. McNutt, "Monolithic Schottky barrier focal plane arrays with high fill
factors," Proceedings of the SPIE, no. 1308, pp. 133-144, Orlando, Florida, April 18-19,
1990.
J. M. Mooney, "lIfnoise measurements on PtSi focal plane arrays," Proceedings
of the SPIE, no. 1308, pp. 122-132, Orlando, Florida, April 18-19, 1990.
J. M. Mooney, "Silicide sensor overview," Proceedings of the SPIE, no. 1107,
pp. 2-8, Orlando Florida, March 30-31, 1989.
J. M. Mooney, J. Silverman, and M. M. Weeks, "PtSi internal photoemission;
theory and experiment," Proceedings of the SPIE, no. 782, pp. 99-107, Orlando, Florida,
May 19-21, 1987.
S. Morozumi, "Active matrix LCDs," Society for Information Display Seminar
Lecture Notes, vol. I, Seminar M-8, Seattle, Washington, May 17, 1993.
J. E. Murguia and W. S. Ewing, "Statistical characterization of a large PtSi focal
plane array," Proceedings of the SPIE, no. 782, pp. 121-128, Orlando, Florida, May 1921, 1987.
E. T. Nelson, K. Y. Wong, S. Yoshizumi, D. Rockafellow, W. Desjardin, M.
Elzinga, J. P. Lavine, T. J. Tredwell, R. P. Khosla, P. Sorlie, B. Howe, S. Brickman,
and S. Refermat, "Wide field of view PtSi infrared focal plane array," Proceedings of the
SPIE, no. 1308, pp. 36-44, Orlando, Florida, April 18-19, 1990.
P. W. Pellegrini, A. Golubovic, and C. E. Ludington, "A comparison of iridium
silicide and platinum silicide photodiodes," Proceedings of the SPIE, no. 782, pp. 93-98,
Orlando, Florida, May 19-21, 1987.
P. W. Pellegrini and F. D. Shepherd, "The evolution of metal silicide Schottky
barrier infrared focal plane detectors," Proceedings of the SPIE, no. 409, pp. 66-68,
Arlington, Virginia, April 5-6, 1983.
191
REFERENCES - Continued
D. L. Perry and E. L. Dereniak, "Proposed testing of spectral nonuniformity in
PtSi area arrays," Proceedings of the SPIE, no. 1071, pp. 2-11, Orlando, Florida, January
16-18, 1989.
A. Rose and P. K. Weimer, "Physical limits to the performance of imaging
systems," Physics Today, vol. 42, no. 9, pp. 24-32, September 1989.
B. Rosner, M. Stegall, T. Henricks, and T. Wilson, Design and performance of the
ImageIRTM, a commercial infrared camera system with 128 x 128 InSb focal plane array,
Santa Barbara Focal Plane and Westinghouse Electric Corporation publication.
D. L. Sato, W. A. Terre, W. S. Ewing, and J. L. Gates, "High performance PtSi
MWIR Camera," Proceedings of the SPIE, no. 1308, pp. 145-156, Orlando, Florida,
April 18-19, 1990.
D. J. Sauer, F. L. Hsueh, F. V. Shallcross, G. M. Meray, and T. S. Villani, "A
640 x 480-element PtSi IR sensor with low-noise MOS x-y addressable multiplexer,"
Proceedings of the SPIE, no. 1308, pp. 81-87, Orlando, Florida, Apri118-19, 1990.
D. A. Scribner, M. R. Kruer, and J. M. Killiany, "Infrared focal plane array
technology," Proceedings of the IEEE, vol. 79, no. 1, pp. 66-85, January, 1991.
D. A. Scribner, K. A. Sarkady, J. T. Caulfield, M. R. Kruer, G. Katz, C. J.
Gridley, and C. Herman, "Nonuniformity correction for staring IR focal plane arrays using
scene-based techniques," Proceedings of the SPIE, no. 1308, pp. 224-233, Orlando,
Florida, April 18-19, 1990.
S. M. Shepard, D. T. Sass, "Thermal imaging of repetitive events at above-framerate frequencies," Optical Engineering, vol. 29 no. 2, pp. 97-104, February 1990.
S. M. Shepard, D. T. Sass, T. Imirowicz, "Enhanced temporal resolution with a
scanning imaging radiometer," Optical Engineering, vol. 30 no. 11, pp. 1716-1719,
November 1991.
F. D. Shepherd, Jr., "Schottky diode based infrared sensors," Proceedings of the
SPIE, no. 443, pp. 42-49, San Diego, California, August 25-26, 1983.
U. Theden, M. A. Green, J. W. V. Storey, J. M. Kurianski, "The fully integrated
Schottky array - a new generation of metal silicide infrared detectors," Proceedings of the
SPIE, no. 1308, pp. 58-67, Orlando, Florida, April 18-19, 1990.
R. L. Thomas, L. D. Favro, P. Kuo, and R. Bruno, "Using thermal wave imaging
to see below the surface," Photonics Spectra, pp. 148-150, January, 1993.
192
REFERENCES - Continued
T. S. Villani, W. F. Kosonocky, F. V. Shallcross, J. V. Groppe, G. M. Meray, J.
J. O'Neill, ill, and B. J. Esposito, "Construction and performance of a 320 x 244-element
IR-CCD imager with PtSi Schottky-barrier detectors," Proceedings of the SPIE, no. 1107,
pp. 9-21, Orlando, Florida, March 30-31, 1989.
T. E. Wilson, T. F. Henricks, J. Halvis, B. D. Rosner, and R. R. Shiskowski,
Versatile multi mode 320x2401256x256 hybrid InSb infraredfocal plane array with
selectable snapshot or rolling integration, Santa Barbara Focal Plane and Westinghouse
Electric Corporation publication.
R. A. Wood, "Uncooled thermal imaging with monolithic silicon focal planes,"
Proceedings of the SPIE, no. 2020, San Diego, California, July 15-16, 1993.
R. A. Wood and N. A. Foss, "Micromachined bolometer arrays achieve low-cost
imaging," Laser Focus World, pp. 101-106, June, 1993.
A. I. Zayed, Advances in Shannon's Sampling Theory, pp. 1-36, CRC Press,
Boca Raton, 1993.
H. Zogg, C. Maissen, J. Masek, S. Blunier, and T. Hoshino, "Monolithic IR
sensor arrays in heteroepitaxial narrow gap lead chalcogenides on Si for the SWIR,
MWIR, and LWIR range," Proceedings of the SPIE, no. 1308, pp. 169-177, Orlando,
Florida, April 18-19, 1990.
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement