Construction of the Caltech Ch 6 CP-FTMW Spectrometer

Similar documents
89BSD CALCULATION METHOD APPLICATION NOTE

Digital Design through Arduino

LME series digital low differential pressure sensors

ISSP User Guide CY3207ISSP. Revision C

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

Howto make an Arduino fast enough to... Willem Maes

MS4525HRD (High Resolution Digital) Integrated Digital Pressure Sensor (24-bit Σ ADC) Fast Conversion Down to 1 ms Low Power, 1 µa (standby < 0.15 µa)

MS4525HRD (High Resolution Digital)

NTE74HC299 Integrated Circuit TTL High Speed CMOS, 8 Bit Universal Shift Register with 3 State Output

Assembly Programming through Arduino

SERIALLY PROGRAMMABLE CLOCK SOURCE. Features

MS BA01 Variometer Module, with LCP cap

MS BA Micro Altimeter Module

,- # (%& ( = 0,% % <,( #, $ <<,( > 0,% #% ( - + % ,'3-% & '% #% <,( #, $ <<,(,9 (% +('$ %(- $'$ & " ( (- +' $%(& 2,#. = '%% ($ (- +' $ '%("

PART TEMP RANGE PIN-PACKAGE

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

Differential Pressure Sensor

Grabber. Technical Manual

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

PC100 Memory Driver Competitive Comparisons

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

Spurious-Tone Suppression Techniques Applied to a Wide-Bandwidth 2.4GHz Fractional-N PLL. University of California at San Diego, La Jolla, CA

MS BA Miniature 14 bar Module

ADVANCED INFORMATION MS4525HRD (High Resolution Digital)

RT9403. I 2 C Programmable High Precision Reference Voltage Generator. Features. General Description. Ordering Information.

74LVC823A 9-bit D-type flip-flop with 5-volt tolerant inputs/outputs; positive-edge trigger (3-State)

Digital Design through Pi


6.111 Final Report. Olek Peraire. 12 December 2018

80386DX. 32-Bit Microprocessor FEATURES: DESCRIPTION: Logic Diagram

Motors Automation Energy Transmission & Distribution Coatings. Servo Drive SCA06 V1.5X. Addendum to the Programming Manual SCA06 V1.

GR16. Technical Manual. 10 M SPS, 16-bit Analog Signal Digitizer up to 8MB FIFO

In data sheets and application notes which still contain NXP or Philips Semiconductors references, use the references to Nexperia, as shown below.

3. Complete the following table of equivalent values. Use binary numbers with a sign bit and 7 bits for the value

Experiment 9 Sequential Circuits

Community College of Allegheny County Unit 9 Page #1. Thermocouples R1 = 1K

AMP DISPLAY INC. SPECIFICATIONS AMP DISPLAY INC 9856 SIXTH STREET RANCHO CUCAMONGA CA TEL: FAX:

S Sapling INSTALLATION MANUAL FOR FIELD SELECTABLE ANALOG CLOCKS SAA SERIES SPECIFICATIONS. advanced time and control systems

64K x 18 Synchronous Burst RAM Pipelined Output

POINTS OF CAUTION BEFORE USE...

74LCX16374 Low Voltage 16-Bit D-Type Flip-Flop with 5V Tolerant Inputs and Outputs

Experiment A11 Chaotic Double Pendulum Procedure

ICS reserves the right to make changes in the device data identified in

74LVC823A-Q General description. 2. Features and benefits

Using a Microcontroller to Study the Time Distribution of Counts From a Radioactive Source

arxiv: v1 [nlin.cd] 25 Dec 2011

S P E C I F I C A T I O N

CMSC 313 Lecture 25 Registers Memory Organization DRAM

74LVC574A Octal D-type flip-flop with 5-volt tolerant inputs/outputs; positive edge-trigger (3-State)

SC125MS. Data Sheet and Instruction Manual. ! Warning! Salem Controls Inc. Stepper Motor Driver. Last Updated 12/14/2004

TONE CONTROL AND SURROUND DIGITALLY CONTROLLED AUDIO PROCESSOR WITH AGC PS1 AGC LP L-IN1 R-IN1 L-IN2 R-IN2 L-IN3 R-IN3 L-IN4 R-IN4 L-IN5 R-IN5 L-MUX

UNISONIC TECHNOLOGIES CO., LTD L16B45 Preliminary CMOS IC

MAHARASHTRA STATE BOARD OF TECHNICAL EDUCATION (Autonomous) (ISO/IEC Certified)

on candidate s understanding. 7) For programming language papers, credit may be given to any other program based on equivalent concept.

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

3.3 V 16-bit edge-triggered D-type flip-flop with 30 Ω termination resistors; 3-state

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

HN58C256 Series word 8-bit Electrically Erasable and Programmable CMOS ROM

2-Mbit (128K x 16)Static RAM

74LCX16374 Low Voltage 16-Bit D-Type Flip-Flop with 5V Tolerant Inputs and Outputs

LV5217GP. Specifications. Bi-CMOS IC 3ch LED Driver. Absolute Maximum Ratings at Ta = 25 C. Ordering number : ENA0833A.

Full Integration of GPS System on Arduino

Menu. Excitation Tables (Bonus Slide) EEL3701 EEL3701. Registers, RALU, Asynch, Synch

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

MS BA Altimeter and diving pressure sensor

1-to-64 bit variable length shift register

MS BA01. PHT Combination Sensor SPECIFICATIONS

Recording Voice Modules

King Fahd University of Petroleum and Minerals College of Computer Science and Engineering Computer Engineering Department

ESE 570: Digital Integrated Circuits and VLSI Fundamentals

5-stage Johnson decade counter

74F393 Dual 4-bit binary ripple counter

Cosmic Ray Detector Software

HN58C65 Series word 8-bit Electrically Erasable and Programmable CMOS ROM

74F194 4-Bit Bidirectional Universal Shift Register

NJU BIT PARALLEL TO SERIAL CONVERTER PRELIMINARY PACKAGE OUTLINE GENERAL DESCRIPTION PIN CONFIGURATION FEATURES BLOCK DIAGRAM

MS BA01 PTH Fusion Sensor

Data Logger V2. Instruction Manual

74LCXH Low Voltage 16-Bit D-Type Flip-Flop with Bushold and 26Ω Series Resistors in Outputs

CHV Series Vector Control Inverter Options. Operating Instructions for Tension Control Card

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

INTEGRATED CIRCUITS. For a complete data sheet, please also download:

CD54/74HC164, CD54/74HCT164

DATA SHEET. Thermocouple module with digital I²C-Interface - THMOD-I²C. Characteristic features. Areas of application. Features.

MOSIS REPORT. Spring MOSIS Report 1. MOSIS Report 2. MOSIS Report 3

CD74HC195. High Speed CMOS Logic 4-Bit Parallel Access Register. Features. Description. Ordering Information. PInout. [ /Title (CD74 HC195 ) /Subject

ECE20B Final Exam, 200 Point Exam Closed Book, Closed Notes, Calculators Not Allowed June 12th, Name

MICROCIRCUITS, DIGITAL, TTL, FLIP-FLOPS, MONOLITHIC SILICON. Inactive for new design after 7 September 1995

Digital Signal 2 N Most Significant Bit (MSB) Least. Bit (LSB)

74ACT Bit D-Type Flip-Flop with 3-STATE Outputs

Name: Answers. Mean: 83, Standard Deviation: 12 Q1 Q2 Q3 Q4 Q5 Q6 Total. ESE370 Fall 2015

MASSACHUSETTS INSTITUTE OF TECHNOLOGY Department of Electrical Engineering and Computer Sciences

MS BA Miniature 30 bar Module

P8X32A-Q44 SchmartBoard (#27150)

Up/down binary counter with separate up/down clocks

In-System Serial Programming (ISSP) Guide

74HC574; 74HCT574. Octal D-type flip-flop; positive edge-trigger; 3-state

Overview. Multiplexor. cs281: Introduction to Computer Systems Lab02 Basic Combinational Circuits: The Mux and the Adder

HCE Series Miniature amplified pressure sensors

74LVQ174 Low Voltage Hex D-Type Flip-Flop with Master Reset

Transcription:

Construction of the Caltech Ch 6 CP-FTMW Spectrometer P. Brandon Carroll Abstract This is meant to be a guide to the construction and implementation of Arduino control of an AD 9914 DDS evaluation board for generation of linear frequency sweeps. This is version 1.0 and will be incorporated into a larger guide as the full chirped pulse FTMW instrument that utilizes this chirp system is completed. Further information regarding the use of the 9914 can be found in Review of Scientific Instruments (2013) 083104, 84. Throughout this guide, several pins/jumpers are referenced, these are generally referenced in the AD9914 evaluation board guide/schematic. The board is generally well labeled, but the board schematic should be consulted if there is any confusion. Important: Several critical steps in using the DDS has been omitted from this guide. We found it necessary to remove a single 0 Ω resistor from the evaluation board in order to enable the necessary external triggering of the board. The DDS should also be externally clocked, so a 4 GHz clock is required. A simple PLL is available to handle this. Please see the supplemental section of the RSI paper above for details and instructions. This was initially omitted as it does not directly involve the Arduino control, and will be added in later versions. Updated: December 7, 2015 Figure 1: An overview of the AD9914. Green - USB control circuits and pins, Blue - Serial control pins, Red- External trigger and power down control pins, Yellow - DDS clock input and DAC (Chirp) output, Light Blue - AD9914 chip, Purple - USB adapter and power suppler input 1. Short Version This is the quick-start version of the materiel below. It is recommended that anyone setting up Arduino control of an AD9914 read the entire guide. Preprint submitted to Elsevier December 7, 2015

1. Setup the AD9914 evaluation board including external clock, as outlined in Rev. Sci. Intsr., (2013),083104, 84 2. Wire the SDIO/SCLK/IO UPDATE/RESET outputs to the Arduino as shown in Figure 5 3. Connect these wires to their counterparts on the AD9914 shown in Figure 4 4. Compile/Load the Arduino code given below onto the Arduino 5. Set pints P204 and P203 to disable, P205 to enable, shown in Figure 2 6. Short the signal of EXTPDCTL and DRHOLD to ground using a jumper, shown in Figure 3 7. Power on the AD9914 and press the reset button on the Arduino 8. Supply a trigger as outlined in the RSI supplement and monitor the chirp output 2. AD9914 DDS To do this we chose an Arduino Uno micro controller board (http://arduino.cc/en/main/arduinoboarduno). The board is cheap, effective, open source, its software is available on virtually any platform, it has an immense support community, and there are Python libraries for external control. 3. Construction 3.1. Microcontroller Control of the AD9914 Unlike the PLL synthesizers that can be set and then ignored, or changed fairly rarely, the DDS requires constant attention. While developing the system, we noticed that the phase of the chirps coming from the DDS would slowly drift (This drift is a function of the number of chirps generated, not time), causing our time domain signal to average to something very low. The solution to this is to recalibrate the DDS s digital to analog converter (DAC) approximately every second (Because this is dependent on the number of chirps, not time, this number may need to be lower, 1-100ms for very high acquisition rates). This requires sending a DAC calibrate command to the DDS very frequently, something that is not practical with the AD (Analog Devices) DDS control software. The solution is to use a micro controller to send serial commands to the DDS to recalibrate the DAC on a regular basis. A second benefit of this is that the micro controller can be programmed to handle the initial setup of the DDS, which simplifies its use. The first step is to disable USB control/enable serial control of the DDS. This is done by changing jumpers P203-204 to disable. Oddly P205 should remain enabled. This is because the digital ramp status pins, DRSTART and DROVER, the trigger signal to start the chirp and the output that the chirp has completed (which should be used as the digitizer trigger to minimize phase jitter) respectively, are buffered through the IC associated with P205, and disabling it disables these as well. When this is done, the USB control lines are set to high impedance to prevent the USB controller accidentally sending commands to the AD9914. The side effect of this is that several pins that were being controlled are now floating. Specifically the reset, SYNCIO, external power down, and chip select are floating, setting them to enable, which makes the board unusable. To fix this, the signal line on following pins should shorted to ground with a jumper to disable them: SYNCIO (Figure 4), and EXTPDDNCTL (Figure 3), highlighted in red. Once this is done, the Arduino can be used to control the 9914. An overview of the Arduino SPI protocol is given (http://arduino.cc/en/reference/spi). Briefly, SPI is a simple serial communication protocol supported by the Arduino. When using SPI, several Arduino pins are automatically controlled. Pin 13 is set as the serial clock, and should be linked to the CLK/MIO1 pin on the 9914. Similarly, Pin 12 and Pin 11 are the Master In Slave Out (MISO, essentially data transfer from the 9914 to the Arduino, this feature is not currently used, but could be added to read the state of the 9914 if desired) and Master Out Slave In (MOSI, essentially the pin used to write commands to the 9914) respectively. Pin 12 is not used, but Pin 11 is, and should be connected to the signal line of MPI02. Aside from these mandatory pins, two additional pins are needed to send reset and IO UPDATE commands to the board. For this project, pins 7 and 4 have been arbitrarily chosen, but any digital pin on the Arduino not already in use is acceptable. The first pin, the reset pin, can be connected to either of the RESET pins on the 9914. Pin 4 is used to send IO UPDATE commands to the 9914, and should be connected to the IO UPDATE BUF pin on the 9914. A full pinout is given 2

Figure 2: USB micro controller pins. P204 and P203 should be disabled, P205 should remain enabled to allow external chirp triggering. Figure 3: EXTPDCTL, RESET, DROVR, DRHOLD, DRCTL control pins. EXTPDCTL must have the signal shorted to ground. in Figure 5. Finally, the ground pin of the reset, MISO/SDIO, SNYC CLK, and IO UPDATE on the AD9914 should be connected to ground on the Arduino. 3

Once the Arduino is connected, the board can be controlled. The complete code is given below, but a brief explanation is also warranted. The AD9914 is controlled by a set of registers that determine its behavior. Serial commands can be sent to control these register values. Serial control of the 9914 is default most significant bit (MSB) first. This is also default for the Arduino. The serial commands are sent in two phases. First a register address is sent, followed by a series of four bytes. A helpful diagram is given in the 9914 chip guide. Once the 9914 is powered the first command should be a reset command. This is not spelled out in the documentation, but the reset command seems to be necessary to ensure good communication between the boards. Once this is done, the initial register commands can be sent and the registers can be set. The DAC calibration is then sent every second until the Arduino is powered off. One final note is the IO UPDATE command. The IO UPDATE command is used to set registers once the command bytes are written. To set registers that control the function of the 9914 the bytes are first written to the 9914, this is the SPI Transfer command. Once the register information is set, it is held in a buffer, but the registers will not be changed until an IO UPDATE command is sent. Figure 4: MIO buffers, CS (red box top), SYNC CLK (Green box top), Serial Clock in (Blue box top) and SYNC IO (red box bottom), IO UPDATE (Yellow box bottom), and RESET (White box bottom) The register values can be worked out from the AD9914 chip documentation, but the 9914 eval board software s debug page is infinitely simpler for accomplishing this. It can also be helpful for testing the board in case of a suspected malfunction. 4

Figure 5: Wiring diagram for the Arduino Uno. The individual grounding wires (green) for the SYNC CLK and SDIO are essential to proper function. The IO UPDATE and RESET pins can use a common ground with no disruption. 5

3.2. Arduino Code #i n c l u d e <SPI. h> / A program f o r c o n t r o l o f AD9914 DDS using the 9914 s s e r i a l i n t e r f a c e and an Arduino Written by Brandon C a r r o l l Creadted 1/ 9/ 14 / / See http : / / arduino. cc /en/ Reference /SPI f o r an e x p l a n a t i o n o f the SPI p r o t o c o l used here The AD9914 chip documentation i s a l s o immensely h e l p f u l http : / /www. analog. com/ s t a t i c / imported f i l e s / d a t a s h e e t s /AD9914. pdf Code i s based on : http : / / arduino. cc /en/ T u t o r i a l / BarometricPressureSensor Pin l a b e l s are given f o r the AD9914 chip, f o l l o w e d by t h e i r EVAL board counterpart, i e Pin 20 on the AD9914 chip i s l a b e l e d as D2, and i s a c c e s s e d by connecting to MIO1 on t h e EVAL board Assuming an Arduino Uno i s i n use, i n SPI Mode : Pin 13 i s the SCLK Data from the Arduino to the AD9914 i s pin 11 ( Arduino :MOSI or AD9914 : SDIO/ Pin 20/D2/MIO1 on t h e 9914 EVAL) Data from the AD9914 to the Arduino ( not c u r r e n t l y used ) i s pin 12 ( Arduino : MISO o r AD9914 : SDO/ Pin 19/D3/MIO3 on t h e 9914EVAL) Pin 10 i s in use by SPI to s e l e c t which d e v i c e i s in use, not needed here, but s t i l l r e s e r v e d by the Arduino, MIO0 on the 9914EVAL Pin 7 i s c u r r e n t l y used to send the IO\ UPDATE commands to AD9914 Pin 86 Pin 4 i s used to send an i n i t i a l r e s e t command to the 9914 Of Note : The 9914 used most s i g n i f c a n t b i t f i r s t (MSB) mode by d e f a u l t. This can be changed, but t h i s code assumes MSB o p e r a t i o n / / ======S e r i a l Communication parameters====== / const i n t IOUpdatePin = 7 ; //The pin used to t r i g g e r IO\ UPDATE events const i n t ResetPin = 4 ; //The pin used to send r e s e t commands const i n t CSPin = 1 0 ; //The pin used to handle chip s e l e c t ( Not c u r r e n t l y used ) / ======R e g i s t e r Addresses====== / // Control f u n c t i o n r e g i s t e r a d d r e s s e s const byte CFRAddress [ ] = 0x00, //CFR1 0x01, //CFR2 0x02, //CFR3 0x03 };//CFR4 // D i g i t a l ramp a d d r e s s e s const byte DigitalRampAddress [ ] = 0x04, // D i g i t a l Ramp Lower Limit (MHz) 0 x05, //DR Upper Limit (MHz) 6

0x06, //DR Rising Step (MHz) 0x07, //DR F a l l i n g Step (MHz) 0x08 };//DR Step Rate ( us ) // Address f o r CW frequency tuning word, c u r r e n t l y using p r o f i l e 0 ( Test purposes ) // Test code f o r CW o p e r a t i o n c o n s t byte CWToneAddress = 0x0B ; c o n s t byte USR0Address = 0x1B ; / ======Startup r e g i s t e r v a l u e s====== / const byte CFR1Start [ ] = 0x00, 0x01, 0x60, 0x08 } ; const byte CFR2Start [ ] = 0x00, 0x0C, 0x29, 0x00 } ; const byte CFR3Start [ ] = 0x00, 0x00, 0x19, 0x1C } ; const byte CFR4Start [ ] = 0x00, 0x05, 0x01, 0x20 } ; const byte DRGStart [ ] = 0x00, 0x00, 0x00, 0x00 } ; // Chirp S t a r t const byte DRGStop [ ] = 0x00, 0xA3, 0xD7, 0x0A } ; // Chirp stop const byte DRGStepRise [ ] = 0x00, 0x00, 0xD7, 0x17 } ; const byte DRGStepFall [ ] = 0x00, 0x72, 0x38, 0x4A } ; const byte DRGRate [ ] = 0x00, 0x01, 0x00, 0x01 } ; const byte ZeroByte = 0x00 ; //Command to enable the DAC Cal, // should be 0x01XXXXXX, where X i s the l a s t 6 d i g i t s o f CFR4Start const byte DACCalEnable [ ] = 0x01, 0x05, 0x01, 0x20 } ; / ======V a r i a b l e s f o r c o n t r o l l i n g the 9914====== / //Not c u r r e n t l y in use, but may be u s e f u l i f adjustments to the c h i r p are d e s i r e d const i n t ClockFreq = 4000; //DDS c l o c k frequency in MHz const f l o a t ChirpBandwidth = 2 0 0 0. 0 ; // In MHz, a 2 GHz c h i r p const f l o a t ChirpTimeStep = 0. 0 0 0 6 ; //Time between c h i r p s t e p s in us // t h i s i s used f o r both the r i s e and f a l l times const f l o a t ChirpFrequencyStepRise = 9. 9 9 9 9 9 9 7 6 ; // Rising sweep step s i z e in MHz const f l o a t ChirpFrequencyStepFall = 6. 9 7 1 4 2 8 1 7 1 ; // F a l l i n g sweep step in MHz const f l o a t DACCalDelay = 100; //Time in ms between DAC C a l i b r a t i o n s / ======Test Tuning Words====== / // These can be used to enable a CW tone output f o r s i m p l e r t e s t i n g const byte TenMHz [ ] = 0x00, 0xA3, 0xD7, 0x0A } ; const byte FiftyMHz [ ] = 0x03, 0x33, 0x33, 0x33 } ; const byte CFR2Test [ ] = 0x00, 0x84, 0x29, 0x00 } ; void setup ( ) pinmode ( IOUpdatePin, OUTPUT) ; / / S e t t h e IO\ UPDATE Pin t o output pinmode ( ResetPin, OUTPUT) ; // Set the Reset pin to output pinmode ( CSPin, OUTPUT) ; // Set the Chip s e l e c t pin to output ( Not c u r r e n t l y used ) d i g i t a l W r i t e ( CSPin, HIGH ) ; // Set the chip s e l e c t pin to high, ( Not c u r r e n t l y used ) SPI. begin ( ) ; // S t a r t SPI mode on the Arduino SPI. s e t C l o c k D i v i d e r (SPI CLOCK DIV2 ) ; / / Set the SPI c l o c k d i v i d e r to 2, //The d e f a u l t i s 4, however the DDS/ Arduino // can handle 2, and i t speeds up data t r a n s f e r SPI. setbitorder (MSBFIRST ) ; // Set the SPI to MSB f i r s t, t h i s i s the d e f a u l t SPI. setdatamode (SPI MODE0 ) ; // Set the SPI to use c l o c k p o l a r i t y and c l o c k phase 0. 7

Send Reset ( ) ; // This i s s u p r i s i n g l y very imporant. Even a f t e r power c y c l i n g, //a r e s e t command i s needed I n i t i a l i z e D D S ( ) ; Calibrate DAC ( ) ; //Do an i n i t i a l DAC c a l i b r a t i o n / Test code to check the f u n c t i o n a l i t y o f the the DDS. I t should s e t the DDS to output a 10 MHz tone W r i t e R e g i s t e r ( CWToneAddress, TenMHz [ 0 ], TenMHz [ 1 ], TenMHz [ 2 ], TenMHz [ 3 ] ) ; W r i t e R e g i s t e r (0x1A, 0xC0, 0x00, 0x00, 0x00 ) ; // Set the phase /amp Send IO Update ( ) ; / } void loop ( ) delay ( DACCalDelay ) ; //Wait f o r some amount o f time between DAC // c a l s so we don t spam the DDS and l o c k i t up Calibrate DAC ( ) ; // Send a DAC c a l } // R e g i s t e r w r i t i n g f u n c t i o n void W r i t e R e g i s t e r ( byte Register, byte Value1, byte Value2, byte Value3, byte Value4 ) d i g i t a l W r i t e ( CSPin, LOW) ; // Set the chip s e l e c t to low, // to t e l l the DDS we want to send commands SPI. t r a n s f e r ( R e g i s t e r ) ; //The 9914 expects a r e g i s t e r address f i r s t SPI. t r a n s f e r ( Value1 ) ; // Followed by the r e g i s t e r value SPI. t r a n s f e r ( Value2 ) ; // R e g i s t e r s are 4 bytes, but we can only send 1 at a time SPI. t r a n s f e r ( Value3 ) ; SPI. t r a n s f e r ( Value4 ) ; d i g i t a l W r i t e ( CSPin, HIGH) ; / / Set the CS pin high, so the DDS w i l l now // i g n o r e anything on the l i n e } //Command f o r sending the IO Update needed to s e t the r e g i s t e r // v a l u e s that have been w r i t t e n void Send IO Update ( ) d i g i t a l W r i t e ( IOUpdatePin, HIGH ) ; //The IO\ UPDATE i s a c t i v e on l o g i c high // so we send the pin high f o r an update d i g i t a l W r i t e ( IOUpdatePin, LOW) ; //Then low to end i t. //The delay between r i s e and f a l l i s many c l o c k c y c l e s, // so no delay between the high and low commands i s needed } //Command to send a r e s e t void Send Reset ( ) d i g i t a l W r i t e ( ResetPin, HIGH ) ; //The r e s e t i s a c t i v e on l o g i c high, // so we send the pin high f o r an update d i g i t a l W r i t e ( ResetPin, LOW) ; //Then low to end i t. //The delay between r i s e and f a l l i s many c l o c k c y c l e s, // so no delay between the high and low commands i s needed 8

} //Command to send a DAC c a l i b r a t i o n void Calibrate DAC ( ) //The DAC c a l i s a two step proccess, f i r s t we must s e t the DAC // c a l b i t to 1 in CFR3, then send the IO\ UPDATE to i n i t i a t e i t W r i t e R e g i s t e r ( CFRAddress [ 3 ], DACCalEnable [ 0 ], DACCalEnable [ 1 ], DACCalEnable [ 2 ], DACCalEnable [ 3 ] ) ; Send IO Update ( ) ; //Then we s e t the DAC c a l b i t back to low, to prevent the board // from r e p e a t e d l y c a l i b r a t i n g. F i n a l l y an IO UPDATE to s e t the b i t W r i t e R e g i s t e r ( CFRAddress [ 3 ], CFR3Start [ 0 ], CFR3Start [ 1 ], CFR3Start [ 2 ], CFR3Start [ 3 ] ) ; Send IO Update ( ) ; } void I n i t i a l i z e D D S ( ) Send Reset ( ) ; // Write the i n i t a l c o n t r o l r e g i s t e r s W r i t e R e g i s t e r ( CFRAddress [ 0 ], CFR1Start [ 0 ], CFR1Start [ 1 ], CFR1Start [ 2 ], CFR1Start [ 3 ] ) ; W r i t e R e g i s t e r ( CFRAddress [ 1 ], CFR2Start [ 0 ], CFR2Start [ 1 ], CFR2Start [ 2 ], CFR2Start [ 3 ] ) ; W r i t e R e g i s t e r ( CFRAddress [ 2 ], CFR3Start [ 0 ], CFR3Start [ 1 ], CFR3Start [ 2 ], CFR3Start [ 3 ] ) ; W r i t e R e g i s t e r ( CFRAddress [ 3 ], CFR4Start [ 0 ], CFR4Start [ 1 ], CFR4Start [ 2 ], CFR4Start [ 3 ] ) ; // Write the USR r e g i s t e r, not sure i f t h i s i s needed W r i t e R e g i s t e r ( USR0Address, 0xE2, 0x00, 0x08, 0x00 ) ; // Set the the s t a r t frequency f o r the DRG W r i t e R e g i s t e r ( DigitalRampAddress [ 0 ], DRGStart [ 0 ], 9

} DRGStart [ 1 ], DRGStart [ 2 ], DRGStart [ 3 ] ) ; // Set the the stop frequency f o r the DRG W r i t e R e g i s t e r ( DigitalRampAddress [ 1 ], DRGStop [ 0 ], DRGStop [ 1 ], DRGStop [ 2 ], DRGStop [ 3 ] ) ; // Set the the DRG r i s i n g step s i z e W r i t e R e g i s t e r ( DigitalRampAddress [ 2 ], DRGStepRise [ 0 ], DRGStepRise [ 1 ], DRGStepRise [ 2 ], DRGStepRise [ 3 ] ) ; // Set the the DRG f a l l i n g step s i z e W r i t e R e g i s t e r ( DigitalRampAddress [ 3 ], DRGStepFall [ 0 ], DRGStepFall [ 1 ], DRGStepFall [ 2 ], DRGStepFall [ 3 ] ) ; // Set the the DRG step r a t e W r i t e R e g i s t e r ( DigitalRampAddress [ 4 ], DRGRate [ 0 ], DRGRate [ 1 ], DRGRate [ 2 ], DRGRate [ 3 ] ) ; //Send the update to s e t the c o n t r o l r e g i s t e r s Send IO Update ( ) ; 10