diff --git a/AD9912_sketch/AD9912_sketch.ino b/AD9912_sketch/AD9912_sketch.ino index f145496..4ff03f0 100644 --- a/AD9912_sketch/AD9912_sketch.ino +++ b/AD9912_sketch/AD9912_sketch.ino @@ -180,22 +180,22 @@ void loop() else if (demoState == demo_freq_1_c) { userFreq = 195 * pow(10 , 6); // userDAC = findBestDACMatch(userFreq , demo_DBM_match); - userDAC = 180; + userDAC = 155; } else if (demoState == demo_freq_2_c) { userFreq = 362 * pow(10 , 6); // userDAC = findBestDACMatch(userFreq , demo_DBM_match); - userDAC = 820; + userDAC = 858; } else if (demoState == demo_freq_3_c) { userFreq = 385 * pow(10 , 6); // userDAC = findBestDACMatch(userFreq , demo_DBM_match); - userDAC = 590; + userDAC = 605; } else if (demoState == demo_freq_4_c) { userFreq = 400 * pow(10 , 6); // userDAC = findBestDACMatch(userFreq , demo_DBM_match); - userDAC = 511; + userDAC = 596; } // Constant display stuff here ad9912.setFrequency(userFreq); diff --git a/AmplitudeCalibrationData.csv b/AmplitudeCalibrationData.csv index e7b08d9..16ff46a 100644 --- a/AmplitudeCalibrationData.csv +++ b/AmplitudeCalibrationData.csv @@ -134,7 +134,7 @@ Frequency,Min,Max 192,-2.61,6.5 193,-4.81,6.5 194,-6.3,7.49 -195,-2.0,7.52 +195,-0.8,7.9 196,-3.69,7.02 197,-1.5,7.5 198,-0.3966,7.78 @@ -301,7 +301,7 @@ Frequency,Min,Max 359,-4.25,7.97 360,-4.53,6.86 361,-4.88,5.6 -362,-5.27,0.7763 +362,-5.27,0.78 363,-5.06,8 364,-5.8,5.682 365,-4.33,4.65 diff --git a/LCD/LCD.ino b/LCD/LCD.ino deleted file mode 100644 index 67dc5c2..0000000 --- a/LCD/LCD.ino +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include -#include "LiquidCrystal_I2C.h" - - -#define I2C2SLA PE5 -#define I2C2SCL PE4 - -#define PE5 6 -#define PE4 5 - -LiquidCrystal_I2C lcd(0x3F,20,4,3); - -void setup() -{ - Serial.begin(9600); - // put your setup code here, to run once: - pinMode(RED_LED, OUTPUT); - pinMode(BLUE_LED, OUTPUT); - pinMode(GREEN_LED, OUTPUT); - pinMode(PD_1, INPUT_PULLUP); - pinMode(PD_0, INPUT_PULLUP); - pinMode(PD_1, INPUT_PULLUP); - Serial.print(PD_0, HEX); - Serial.print(" "); - Serial.print(PD_1, HEX); - Serial.println(); - Wire.begin(); - Wire.setModule(3); - lcd.init(); - lcd.backlight(); - lcd.print("01234567890123456789"); - lcd.setCursor(0,1); - lcd.print("Line 2"); - lcd.setCursor(0,2); - lcd.print("Line 3"); - lcd.setCursor(0,3); - lcd.print("Line 4"); -} - -void loop() -{ - // put your main code here, to run repeatedly: - if(digitalRead(I2C2SLA) == LOW) - flash_blue(); - if(digitalRead(I2C2SCL) == LOW) - flash_red(); - delay(10); - Serial.print(PE_4, HEX); - Serial.print(" "); - Serial.print(PE_5, HEX); - Serial.println(); -} - -void flash_blue() { - digitalWrite(BLUE_LED, LOW); - delay(20); - digitalWrite(BLUE_LED, HIGH); - delay(20); - digitalWrite(BLUE_LED, LOW); -} - -void flash_red() { - digitalWrite(RED_LED, LOW); - delay(20); - digitalWrite(RED_LED, HIGH); - delay(20); - digitalWrite(RED_LED, LOW); -} - -void flash_green() { - digitalWrite(GREEN_LED, LOW); - delay(20); - digitalWrite(GREEN_LED, HIGH); - delay(20); - digitalWrite(GREEN_LED, LOW); -} diff --git a/LCD/LiquidCrystal_I2C.cpp b/LCD/LiquidCrystal_I2C.cpp deleted file mode 100644 index 31ca53e..0000000 --- a/LCD/LiquidCrystal_I2C.cpp +++ /dev/null @@ -1,305 +0,0 @@ -// LiquidCrystal_I2C V2.0 - -#include "LiquidCrystal_I2C.h" -#include -#if defined(__AVR_ATtiny85__) || (__AVR_ATtiny2313__) -#include "TinyWireM.h" // include this if ATtiny85 or ATtiny2313 -#else -#include // original lib include -#endif -#include "Arduino.h" - - -// When the display powers up, it is configured as follows: -// -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that its in that state when a sketch starts (and the -// LiquidCrystal constructor is called). - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows, uint8_t i2c_module) -{ - _Addr = lcd_Addr; - _cols = lcd_cols; - _rows = lcd_rows; - _backlightval = LCD_NOBACKLIGHT; -} - -void LiquidCrystal_I2C::init(){ - init_priv(); -} - -void LiquidCrystal_I2C::init_priv() -{ -#if defined (__AVR_ATtiny85__) || (__AVR_ATtiny2313__) - TinyWireM.begin(); // initialize I2C lib -#else // original call - Wire.begin(); -#endif - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - begin(_cols, _rows); -} - -void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { - if (lines > 1) { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - - // for some 1 line displays you can select a 10 pixel high font - if ((dotsize != 0) && (lines == 1)) { - _displayfunction |= LCD_5x10DOTS; - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 - delay(50); - - // Now we pull both RS and R/W low to begin commands - expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1) - delay(1000); - - //put the LCD into 4 bit mode - // this is according to the hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - write4bits(0x03 << 4); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - write4bits(0x03 << 4); - delayMicroseconds(4500); // wait min 4.1ms - - // third go! - write4bits(0x03 << 4); - delayMicroseconds(150); - - // finally, set to 4-bit interface - write4bits(0x02 << 4); - - - - // set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear it off - clear(); - - // Initialize to default text direction (for roman languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - - home(); - -} - - - -/********** high level commands, for the user! */ -void LiquidCrystal_I2C::clear(){ - command(LCD_CLEARDISPLAY);// clear display, set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal_I2C::home(){ - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal_I2C::setCursor(uint8_t col, uint8_t row){ - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if ( row > _numlines ) { - row = _numlines-1; // we count rows starting w/0 - } - command(LCD_SETDDRAMADDR | (col + row_offsets[row])); -} - -// Turn the display on/off (quickly) -void LiquidCrystal_I2C::noDisplay() { - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::display() { - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LiquidCrystal_I2C::noCursor() { - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::cursor() { - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turn on and off the blinking cursor -void LiquidCrystal_I2C::noBlink() { - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal_I2C::blink() { - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LiquidCrystal_I2C::scrollDisplayLeft(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} -void LiquidCrystal_I2C::scrollDisplayRight(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LiquidCrystal_I2C::leftToRight(void) { - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LiquidCrystal_I2C::rightToLeft(void) { - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'right justify' text from the cursor -void LiquidCrystal_I2C::autoscroll(void) { - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LiquidCrystal_I2C::noAutoscroll(void) { - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Allows us to fill the first 8 CGRAM locations -// with custom characters -void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i=0; i<8; i++) { - write(charmap[i]); - } -} - -// Turn the (optional) backlight off/on -void LiquidCrystal_I2C::noBacklight(void) { - _backlightval=LCD_NOBACKLIGHT; - expanderWrite(0); -} - -void LiquidCrystal_I2C::backlight(void) { - _backlightval=LCD_BACKLIGHT; - expanderWrite(0); -} - -/*********** mid level commands, for sending data/cmds */ - -inline void LiquidCrystal_I2C::command(uint8_t value) { - send(value, 0); -} - -inline size_t LiquidCrystal_I2C::write(uint8_t value) { - send(value, Rs); - return 0; -} - - - - - -/************ low level data pushing commands **********/ - -// write either command or data -void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) { - uint8_t highnib=value&0xf0; - uint8_t lownib=(value<<4)&0xf0; - write4bits((highnib)|mode); - write4bits((lownib)|mode); -} - -void LiquidCrystal_I2C::write4bits(uint8_t value) { - expanderWrite(value); - pulseEnable(value); -} - -void LiquidCrystal_I2C::expanderWrite(uint8_t _data){ -#if defined(__AVR_ATtiny85__) || (__AVR_ATtiny2313__) // Replaced Wire calls with ATtiny TWI calls - TinyWireM.beginTransmission(_Addr); - TinyWireM.send(((int)(_data) | _backlightval)); - TinyWireM.endTransmission(); -#else // original lib function - Wire.beginTransmission(_Addr); - Wire.write((int)(_data) | _backlightval); - Wire.endTransmission(); -#endif - } - -void LiquidCrystal_I2C::pulseEnable(uint8_t _data){ - expanderWrite(_data | En); // En high - delayMicroseconds(1); // enable pulse must be >450ns - - expanderWrite(_data & ~En); // En low - delayMicroseconds(50); // commands need > 37us to settle -} - - -// Alias functions - -void LiquidCrystal_I2C::cursor_on(){ - cursor(); -} - -void LiquidCrystal_I2C::cursor_off(){ - noCursor(); -} - -void LiquidCrystal_I2C::blink_on(){ - blink(); -} - -void LiquidCrystal_I2C::blink_off(){ - noBlink(); -} - -void LiquidCrystal_I2C::load_custom_character(uint8_t char_num, uint8_t *rows){ - createChar(char_num, rows); -} - -void LiquidCrystal_I2C::setBacklight(uint8_t new_val){ - if(new_val){ - backlight(); // turn backlight on - }else{ - noBacklight(); // turn backlight off - } -} - -void LiquidCrystal_I2C::printstr(const char c[]){ - //This function is not identical to the function used for "real" I2C displays - //it's here so the user sketch doesn't have to be changed - print(c); -} diff --git a/LCD/LiquidCrystal_I2C.h b/LCD/LiquidCrystal_I2C.h deleted file mode 100644 index 9d397b9..0000000 --- a/LCD/LiquidCrystal_I2C.h +++ /dev/null @@ -1,126 +0,0 @@ -// LiquidCrystal_I2C V2.0 -// Note: The original libe file has beem modified to support the ATtiny85 1/20/11 by "BroHogan" -// All changes can be located by searching for "__AVR_ATtiny85__". - -#ifndef LiquidCrystal_I2C_h -#define LiquidCrystal_I2C_h - -#include -#include "Print.h" - -#if defined(__AVR_ATtiny85__) || (__AVR_ATtiny2313__) -#include "TinyWireM.h" // include this if ATtiny85 or ATtiny2313 -#else -#include // original lib include -#endif - - -// commands -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off control -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - -// flags for backlight control -#define LCD_BACKLIGHT 0x08 -#define LCD_NOBACKLIGHT 0x00 - -#define En B00000100 // Enable bit -#define Rw B00000010 // Read/Write bit -#define Rs B00000001 // Register select bit - -class LiquidCrystal_I2C : public Print { -public: - LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows, uint8_t i2c_module); - void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS ); - void clearRow(uint8_t row); - void clear(); - void home(); - void noDisplay(); - void display(); - void noBlink(); - void blink(); - void noCursor(); - void cursor(); - void scrollDisplayLeft(); - void scrollDisplayRight(); - void printLeft(); - void printRight(); - void leftToRight(); - void rightToLeft(); - void shiftIncrement(); - void shiftDecrement(); - void noBacklight(); - void backlight(); - void autoscroll(); - void noAutoscroll(); - void createChar(uint8_t, uint8_t[]); - void setCursor(uint8_t, uint8_t); -#if defined(ARDUINO) && ARDUINO >= 100 - virtual size_t write(uint8_t); -#else - virtual void write(uint8_t); -#endif - void command(uint8_t); - void init(); - -////compatibility API function aliases -void blink_on(); // alias for blink() -void blink_off(); // alias for noBlink() -void cursor_on(); // alias for cursor() -void cursor_off(); // alias for noCursor() -void setBacklight(uint8_t new_val); // alias for backlight() and nobacklight() -void load_custom_character(uint8_t char_num, uint8_t *rows); // alias for createChar() -void printstr(const char[]); - -private: - void init_priv(); - void send(uint8_t, uint8_t); - void write4bits(uint8_t); - void expanderWrite(uint8_t); - void pulseEnable(uint8_t); - uint8_t _Addr; - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - uint8_t _numlines; - uint8_t _cols; - uint8_t _rows; - uint8_t _backlightval; - uint8_t _i2c_module; - TwoWire _i2c; -}; - -#endif diff --git a/SPI/SPI.ino b/SPI/SPI.ino deleted file mode 100644 index 18cd620..0000000 --- a/SPI/SPI.ino +++ /dev/null @@ -1,206 +0,0 @@ -#include -#include -#include - -#define PartID 0x1902 - -#define PB4 0x7 -#define SPISCK PB4 - -#define PB6 23 -#define SPIMISO PB6 - -#define PB7 24 -#define SPIMOSI PB7 - -#define PB5 0x2 -#define SPICS PB5 - -#define PF3 GREEN_LED -#define IO_update PF3 - -//DDS Register Addresses -//LSB -#define FTW0_1 0x01A6 -#define FTW0_2 0x01A7 -#define FTW0_3 0x01A8 -#define FTW0_4 0x01A9 -//MSB -#define FTW0_start_1 0x01AA -#define FTW0_start_2 0x01AB -#define DAC_fsc_1 0x040B -#define DAC_fsc_2 0x040C - -//DDS Default values and maxes -#define DAC_fcs_default 0x01FF -#define DAC_fcs_max 0x03FF - -//test pin -#define curr_test_pin 4 - -// global type variables -unsigned char spi_data[4]; -unsigned int freqWordArray[2]; -unsigned int DAC_fsc; -unsigned int readFreqDAC[3]; -unsigned int instruction; - -// setup and loop here -void setup() -{ - // put your setup code here, to run once: - //setup DDS registers - DAC_fsc = DAC_fcs_default; - pinMode(BLUE_LED, OUTPUT); - pinMode(GREEN_LED, OUTPUT); - pinMode(RED_LED, OUTPUT); - Serial.begin(9600); - // Initialize other DDS pins - pinMode(IO_update, OUTPUT); - // set pins for SPI bus here - pinMode(SPISCK, OUTPUT); - pinMode(SPIMISO, INPUT); - pinMode(SPIMOSI, OUTPUT); - pinMode(SPICS, OUTPUT); - //Initialize SPI bus - SPI.begin(); - SPI.setModule(2); - SPI.setClockDivider(32); // 500 kHz - SPI.setDataMode(SPI_MODE0); - SPI.setBitOrder(MSBFIRST); - //other pin testing - pinMode(curr_test_pin, INPUT); - pinMode(PUSH1, INPUT_PULLUP); // PUSH1 is for reset on DDS - pinMode(PUSH2, INPUT_PULLUP); - //DDS init function - DDS_spi_init(); - //All done - flash_green(); -} - -void loop() -{ - // put your main code here, to run repeatedly: - if(digitalRead(PUSH2) == LOW) { - DDS_spi_read(); - Serial.println("Current Status"); - Serial.print("DAC Read: "); - Serial.print(readFreqDAC[2], HEX); - Serial.println(); - delay(20); - } - else { - Serial.print("Part ID: "); - Serial.print(get_part_id(), HEX); - Serial.println(""); - get_part_id(); - delay(20); - } -} - -//Custom functions here -void DDS_spi_init() { - //4 wire command for SPIMISO - instruction = 0x000099; - SPI.transfer(instruction >> 16); - SPI.transfer(instruction >> 8); - SPI.transfer(instruction); -} - -void DDS_spi_read() { - //use the global readFreqDAC - instruction &= 0x0; - instruction |= 0x5 << 29; - instruction |= DAC_fsc_2 << 16; - /* Serial.print("Instruction DAC read: "); - Serial.print(instruction >> 16, BIN); - Serial.println(""); - */ - SPI.transfer(instruction >> 24); - SPI.transfer(instruction >> 16); - readFreqDAC[2] = SPI.transfer(0x00) << 8; - readFreqDAC[2] |= SPI.transfer(0x00); -} - -unsigned int get_part_id() { - //Using a 1-byte transfer - unsigned int id; - instruction &= 0x0; - instruction |= 0x4 << 29; - instruction |= 0x0003 << 16; - SPI.transfer(instruction >> 24); - SPI.transfer(instruction >> 16); - id = SPI.transfer(0x00) << 8; - instruction &= 0x0; - instruction |= 0x8002 << 16; - SPI.transfer(instruction >> 24); - SPI.transfer(instruction >> 16); - id |= SPI.transfer(0x00); - return id; -} - -void DDS_spi_write_freq() { - -} - -void DDS_spi_write_DAC(int DAC_out) { - -} - -void flash_blue() { - digitalWrite(BLUE_LED, LOW); - delay(20); - digitalWrite(BLUE_LED, HIGH); - delay(20); - digitalWrite(BLUE_LED, LOW); -} - -void flash_red() { - digitalWrite(RED_LED, LOW); - delay(20); - digitalWrite(RED_LED, HIGH); - delay(20); - digitalWrite(RED_LED, LOW); -} - -void flash_green() { - digitalWrite(GREEN_LED, LOW); - delay(20); - digitalWrite(GREEN_LED, HIGH); - delay(20); - digitalWrite(GREEN_LED, LOW); -} - -void maxInt() { - unsigned int maxInt = 0; - Serial.println("\nMax Int: "); - delay(20); - maxInt = 0; - maxInt -= 1; - Serial.print(maxInt, HEX); - Serial.println(""); - delay(10); -} - -void maxShort() { - unsigned short maxShort; - Serial.print("\nMax Short: "); - delay(20); - maxShort = 0; - maxShort -= 1; - Serial.print(maxShort, HEX); - Serial.println(""); - delay(10); -} - -unsigned int PartID_shift() { - unsigned int id = 0x00; - instruction = 0x8003; - digitalWrite(SPICS, HIGH); - digitalWrite(SPICS, LOW); - shiftOut(SPIMOSI, SPISCK, MSBFIRST, instruction); // might work - id |= shiftIn(SPIMISO, SPISCK, MSBFIRST); - id |= shiftIn(SPIMISO, SPISCK, MSBFIRST); - digitalWrite(SPICS, HIGH); - return id; -} diff --git a/Shift/Shift.ino b/Shift/Shift.ino deleted file mode 100644 index 8907421..0000000 --- a/Shift/Shift.ino +++ /dev/null @@ -1,113 +0,0 @@ -#include -#include -#include - -#define PartID 0x1902 - -#define PB4 0x7 -#define SPISCK PB4 - -#define PB6 23 -#define SPIMISO PB6 - -#define PB7 24 -#define SPIMOSI PB7 - -#define PB5 0x2 -#define SPICS PB5 - -#define PF3 GREEN_LED -#define IO_update PF3 - -//DDS Register Addresses -//LSB -#define FTW0_1 0x01A6 -#define FTW0_2 0x01A7 -#define FTW0_3 0x01A8 -#define FTW0_4 0x01A9 -//MSB -#define FTW0_start_1 0x01AA -#define FTW0_start_2 0x01AB -#define DAC_fsc_1 0x040B -#define DAC_fsc_2 0x040C - -//DDS Default values and maxes -#define DAC_fcs_default 0x01FF -#define DAC_fcs_max 0x03FF - -// global type variables -unsigned char spi_data[4]; -unsigned int freqWordArray[2]; -unsigned int DAC_fsc; -unsigned int readFreqDAC[3]; -unsigned int instruction; - -void setup() -{ - // put your setup code here, to run once: - pinMode(BLUE_LED, OUTPUT); - pinMode(GREEN_LED, OUTPUT); - pinMode(RED_LED, OUTPUT); - Serial.begin(9600); - //Initialize other DDS pins - pinMode(IO_update, OUTPUT); - pinMode(SPISCK, OUTPUT); - pinMode(SPIMISO, INPUT); - pinMode(SPIMOSI, OUTPUT); - pinMode(SPICS, OUTPUT); - digitalWrite(SPICS, HIGH); - digitalWrite(SPISCK, LOW); - digitalWrite(SPIMOSI, LOW); - //push buttons - pinMode(PUSH2, INPUT_PULLUP); - flash_green(); -} - -unsigned int partID_res; - -void loop() -{ - // put your main code here, to run repeatedly: - if(digitalRead(PUSH2) == LOW) { - partID_res = read_PartID(); - delay(20); - } - Serial.print("Part ID: "); - Serial.print(partID_res, HEX); - Serial.println(""); - delay(20); -} - -void flash_green() { - digitalWrite(GREEN_LED, LOW); - delay(20); - digitalWrite(GREEN_LED, HIGH); - delay(20); - digitalWrite(GREEN_LED, LOW); -} - -unsigned int read_PartID() { - unsigned int id; - instruction = 0x8003; - digitalWrite(SPICS, HIGH); - pinMode(SPIMOSI, OUTPUT); - digitalWrite(SPICS, LOW); - shiftOut(SPIMOSI, SPISCK, MSBFIRST, instruction >> 8); - shiftOut(SPIMOSI, SPISCK, MSBFIRST, instruction); - digitalWrite(SPIMOSI, LOW); - pinMode(SPIMOSI, INPUT); - id |= shiftIn(SPIMOSI, SPISCK, MSBFIRST) << 8; - digitalWrite(SPICS, HIGH); - delay(0.5); - instruction = 0x8002; - pinMode(SPIMOSI, OUTPUT); - digitalWrite(SPICS, LOW); - shiftOut(SPIMOSI, SPISCK, MSBFIRST, instruction >> 8); - shiftOut(SPIMOSI, SPISCK, MSBFIRST, instruction); - digitalWrite(SPIMOSI, LOW); - pinMode(SPIMOSI, INPUT); - id |= shiftIn(SPIMOSI, SPISCK, MSBFIRST); - digitalWrite(SPICS, HIGH); - delay(2); - return id; -}