Programming of the DDS-60 (AD9851) frequency synthesizer from AmQRP http://midnightdesignsolutions.com/dds60/index.html I had to use long, floating math in order to get accurate frequency output.
Dependencies: TextLCD mbed ChaNFS
main.cpp@0:1ed24aaf786d, 2012-04-04 (annotated)
- Committer:
- loopsva
- Date:
- Wed Apr 04 18:14:54 2012 +0000
- Revision:
- 0:1ed24aaf786d
050511
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
loopsva | 0:1ed24aaf786d | 1 | /* |
loopsva | 0:1ed24aaf786d | 2 | Rev Date Changes: |
loopsva | 0:1ed24aaf786d | 3 | ------------------------------------------------------------------------------------------------------------------------------------------ |
loopsva | 0:1ed24aaf786d | 4 | 100 5/06/11 - putting things together, first cut |
loopsva | 0:1ed24aaf786d | 5 | 101 5/10/11 - removed G command from menu |
loopsva | 0:1ed24aaf786d | 6 | - added AD9851 on/off to summary |
loopsva | 0:1ed24aaf786d | 7 | 102 5/11/11 - added file dds60.ini, initializes file if missing |
loopsva | 0:1ed24aaf786d | 8 | - reads dds60.ini at boot up to get frequency values |
loopsva | 0:1ed24aaf786d | 9 | - added ability to store current values in dds60.ini into local memory using new W command |
loopsva | 0:1ed24aaf786d | 10 | 103 5/12/11 - tried a new fix for signal quality problem. wouldn't start above 30MHz, went back to 102 version |
loopsva | 0:1ed24aaf786d | 11 | - most commands now use a single keystroke vs waiting for a CR |
loopsva | 0:1ed24aaf786d | 12 | 104 5/17/11 - removed i/o delays in ad9851.cpp. results in a 40 bit download to ad9851 in 10.4uS - was 1.24mS |
loopsva | 0:1ed24aaf786d | 13 | 105 6/08/11 - added "listdir" function |
loopsva | 0:1ed24aaf786d | 14 | |
loopsva | 0:1ed24aaf786d | 15 | ------------------------------------------------------------------------------------------------------------------------------------------ |
loopsva | 0:1ed24aaf786d | 16 | Known issues: |
loopsva | 0:1ed24aaf786d | 17 | - Signal quality is bad between 200KHz and 30MHz |
loopsva | 0:1ed24aaf786d | 18 | 102 Patch fix in AD9851.cpp, routine void AD9851::FirstAccess() |
loopsva | 0:1ed24aaf786d | 19 | 105 - "listdir" function works, but "listdirSD" function doesn't |
loopsva | 0:1ed24aaf786d | 20 | |
loopsva | 0:1ed24aaf786d | 21 | ------------------------------------------------------------------------------------------------------------------------------------------ |
loopsva | 0:1ed24aaf786d | 22 | */ |
loopsva | 0:1ed24aaf786d | 23 | |
loopsva | 0:1ed24aaf786d | 24 | int revision = 105; // revision of this code |
loopsva | 0:1ed24aaf786d | 25 | #include "mbed.h" |
loopsva | 0:1ed24aaf786d | 26 | #include "SDHCFileSystem.h" |
loopsva | 0:1ed24aaf786d | 27 | #include "adc.h" |
loopsva | 0:1ed24aaf786d | 28 | #include "FATFileSystem.h" |
loopsva | 0:1ed24aaf786d | 29 | //#include "MSCFileSystem.h" |
loopsva | 0:1ed24aaf786d | 30 | #include "TextLCD.h" |
loopsva | 0:1ed24aaf786d | 31 | #include "AD9851.h" |
loopsva | 0:1ed24aaf786d | 32 | //#include "MODSERIAL.h" |
loopsva | 0:1ed24aaf786d | 33 | //#define TX_PIN p13 //p9 p13 or p28 |
loopsva | 0:1ed24aaf786d | 34 | //#define RX_PIN p14 //p10 p14 or p27 |
loopsva | 0:1ed24aaf786d | 35 | #define SAMPLE_RATE 150000 //for A:D converter |
loopsva | 0:1ed24aaf786d | 36 | |
loopsva | 0:1ed24aaf786d | 37 | #define CLS "\033[2J" |
loopsva | 0:1ed24aaf786d | 38 | extern "C" void mbed_reset(); |
loopsva | 0:1ed24aaf786d | 39 | extern "C" void mbed_mac_address(char *); |
loopsva | 0:1ed24aaf786d | 40 | #define DEFAULTHOSTNAME "mbed-c3p1" |
loopsva | 0:1ed24aaf786d | 41 | char *hostname = DEFAULTHOSTNAME; |
loopsva | 0:1ed24aaf786d | 42 | |
loopsva | 0:1ed24aaf786d | 43 | LocalFileSystem local("local"); |
loopsva | 0:1ed24aaf786d | 44 | |
loopsva | 0:1ed24aaf786d | 45 | PwmOut led1(LED1, "led1"); |
loopsva | 0:1ed24aaf786d | 46 | DigitalOut led2(LED2, "led2"); |
loopsva | 0:1ed24aaf786d | 47 | DigitalOut led3(LED3, "led3"); |
loopsva | 0:1ed24aaf786d | 48 | DigitalOut led4(LED4, "led4"); |
loopsva | 0:1ed24aaf786d | 49 | I2C i2c(p9, p10); // sda, scl |
loopsva | 0:1ed24aaf786d | 50 | TextLCD lcdt(p24, /*p25, */p26, p27, p28, p29, p30, TextLCD::LCD16x2); // rs, rw, e, d0, d1, d2, d3 |
loopsva | 0:1ed24aaf786d | 51 | DigitalOut LCDrw(p25, "LCDrw"); // new LCD code no longer requries R/W pin - tie low (J5 on Orange Board" |
loopsva | 0:1ed24aaf786d | 52 | Serial/*MODSERIAL*/ pc(USBTX, USBRX); // Serial USB communications over mbed USB port |
loopsva | 0:1ed24aaf786d | 53 | //MODSERIAL uart(TX_PIN, RX_PIN); |
loopsva | 0:1ed24aaf786d | 54 | SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs |
loopsva | 0:1ed24aaf786d | 55 | AD9851 dds60(p16, p17, p15); //clk, sdo, len |
loopsva | 0:1ed24aaf786d | 56 | |
loopsva | 0:1ed24aaf786d | 57 | |
loopsva | 0:1ed24aaf786d | 58 | |
loopsva | 0:1ed24aaf786d | 59 | // Initialise ADC to maximum SAMPLE_RATE and cclk divide set to 1 |
loopsva | 0:1ed24aaf786d | 60 | int gDebug = 1; // display debog level (0 - 3) |
loopsva | 0:1ed24aaf786d | 61 | int OldgDebug = gDebug; // copy of gDebug for updating kb-mbed.ini |
loopsva | 0:1ed24aaf786d | 62 | int DST = 0; // Daylight Saving Time (or as defined in kb-mbed.ini) |
loopsva | 0:1ed24aaf786d | 63 | int OldDST = DST; // Copy of DST for updating kb-mbed.ini |
loopsva | 0:1ed24aaf786d | 64 | int TZone = -8; // Time Zone from UTC (or as defined in kb-mbed.ini) |
loopsva | 0:1ed24aaf786d | 65 | int OldTZone = TZone; // copy for updating kb-mbed.ini |
loopsva | 0:1ed24aaf786d | 66 | int NTPUpdateValue = 86400; // update RTC every 24 hours (or as defined in kb-mbed.ini) |
loopsva | 0:1ed24aaf786d | 67 | int bootDHCP = 1; // boot DHCP(1) of fixed IP(0) (or as defined in kb-mbed.ini) |
loopsva | 0:1ed24aaf786d | 68 | float Press0Ft = 102.4; // altimeter - assumed pressure at sea level |
loopsva | 0:1ed24aaf786d | 69 | float Saved0Ft = Press0Ft; // saved for later comparison if changed by HTTP |
loopsva | 0:1ed24aaf786d | 70 | float OldPress0Ft = Press0Ft; // another copy for updating kb-mbed.ini |
loopsva | 0:1ed24aaf786d | 71 | char mac[6]; // mbed MAC address |
loopsva | 0:1ed24aaf786d | 72 | |
loopsva | 0:1ed24aaf786d | 73 | float Led1Pwm = 0.01; // LED1 brightness |
loopsva | 0:1ed24aaf786d | 74 | bool Led1Up = true; // LED1 auto up-down |
loopsva | 0:1ed24aaf786d | 75 | |
loopsva | 0:1ed24aaf786d | 76 | ADC adc(SAMPLE_RATE, 1); |
loopsva | 0:1ed24aaf786d | 77 | bool use_sd = false; // flag for using SDHC file system |
loopsva | 0:1ed24aaf786d | 78 | bool ZeroMinFlag = false; // alignment to 00:00:00 flag |
loopsva | 0:1ed24aaf786d | 79 | float gWait = 0.005; // Main loop wait timeout |
loopsva | 0:1ed24aaf786d | 80 | float const DISP_SLOW(2.0); // Long wait for LCD display |
loopsva | 0:1ed24aaf786d | 81 | float const DISP_FAST(0.5); // Faster wait for LCD |
loopsva | 0:1ed24aaf786d | 82 | int i2cQty = 16; // number of bytes to get |
loopsva | 0:1ed24aaf786d | 83 | char i2cData[130]; // i2c read buffer data |
loopsva | 0:1ed24aaf786d | 84 | |
loopsva | 0:1ed24aaf786d | 85 | double LclBaseFreq = 1000000.0; // base frequency - if frequency |
loopsva | 0:1ed24aaf786d | 86 | double LclIfFreq = 262000.0; // IF frequency |
loopsva | 0:1ed24aaf786d | 87 | double StepFreq = 1000.0; // increment/decrement step frequency |
loopsva | 0:1ed24aaf786d | 88 | double OldStepFreq = StepFreq; // old copy of increment/decrement step frequency |
loopsva | 0:1ed24aaf786d | 89 | |
loopsva | 0:1ed24aaf786d | 90 | int pcRxQty = 0; // MODSER RX data counter/pointer |
loopsva | 0:1ed24aaf786d | 91 | char pcRxData[20]; // MODSER RX data buffer |
loopsva | 0:1ed24aaf786d | 92 | char inchar = 0; // RX input character |
loopsva | 0:1ed24aaf786d | 93 | const char BS = 0x08; // ascii backspace |
loopsva | 0:1ed24aaf786d | 94 | const char CR = 0x0d; // ascii CR |
loopsva | 0:1ed24aaf786d | 95 | const char LF = 0x0a; // ascii LF |
loopsva | 0:1ed24aaf786d | 96 | const char SP = 0x20; // ascii space |
loopsva | 0:1ed24aaf786d | 97 | const char ESC = 0x1b; // ascii escape |
loopsva | 0:1ed24aaf786d | 98 | const char DP = 0x2e; // ascii decimal point / period |
loopsva | 0:1ed24aaf786d | 99 | const char ticC = 0x0c; // ascii control C |
loopsva | 0:1ed24aaf786d | 100 | bool pcRxLine = false; // CR or LF detected in RX buffer |
loopsva | 0:1ed24aaf786d | 101 | bool pcRxEOB = false; // RX buffer EOB (full) |
loopsva | 0:1ed24aaf786d | 102 | bool pcRxIsNumb = false; // whether or not string is a valid number (including dp) |
loopsva | 0:1ed24aaf786d | 103 | bool ErFlag = false; // error flag |
loopsva | 0:1ed24aaf786d | 104 | bool FirstAccess = false; // very first DDS60 access |
loopsva | 0:1ed24aaf786d | 105 | double pcRxNumb = 0.0; // RX buffer comversion |
loopsva | 0:1ed24aaf786d | 106 | char Fcmd = 0; // post RX processing command decoder |
loopsva | 0:1ed24aaf786d | 107 | unsigned int SerialNum[5] = {58,0,0,0,0}; // mbed serial number data |
loopsva | 0:1ed24aaf786d | 108 | |
loopsva | 0:1ed24aaf786d | 109 | int Tic = 0; // Tic counter to update LCD sequence |
loopsva | 0:1ed24aaf786d | 110 | int Sequence = 0; // LCD step through sequence counter |
loopsva | 0:1ed24aaf786d | 111 | |
loopsva | 0:1ed24aaf786d | 112 | |
loopsva | 0:1ed24aaf786d | 113 | |
loopsva | 0:1ed24aaf786d | 114 | /*----------*/ |
loopsva | 0:1ed24aaf786d | 115 | void disp_i2c() { |
loopsva | 0:1ed24aaf786d | 116 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 117 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 118 | lcdt.printf("I2CU! Searching\n"); |
loopsva | 0:1ed24aaf786d | 119 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 120 | lcdt.printf("for I2C devices"); |
loopsva | 0:1ed24aaf786d | 121 | // pc.printf("\n\n"); |
loopsva | 0:1ed24aaf786d | 122 | pc.printf("I2CU! Searching for I2C devices...\n"); |
loopsva | 0:1ed24aaf786d | 123 | wait(DISP_FAST); |
loopsva | 0:1ed24aaf786d | 124 | |
loopsva | 0:1ed24aaf786d | 125 | int count = 0; |
loopsva | 0:1ed24aaf786d | 126 | for (int address=2; address<256; address+=2) { |
loopsva | 0:1ed24aaf786d | 127 | if (!i2c.write(address, NULL, 0)) { // 0 returned is ok |
loopsva | 0:1ed24aaf786d | 128 | /* A one time write to all detected EEPROM chips for later identification */ |
loopsva | 0:1ed24aaf786d | 129 | /* i2cData[0] = 0; // pointer register (hi) |
loopsva | 0:1ed24aaf786d | 130 | i2cData[1] = 0; // pointer register (lo) |
loopsva | 0:1ed24aaf786d | 131 | i2cData[2] = count+1; // detected i2c device (in sequence 1-128) |
loopsva | 0:1ed24aaf786d | 132 | i2cData[3] = address; // device's i2c address |
loopsva | 0:1ed24aaf786d | 133 | i2cData[4] = count; // device number (0-3) |
loopsva | 0:1ed24aaf786d | 134 | int i = 5; |
loopsva | 0:1ed24aaf786d | 135 | for (i=5; i<(5+5*8); i+=5) { |
loopsva | 0:1ed24aaf786d | 136 | i2cData[i] = 0; // next available write address (highest Hamming nibble) init to 0x0080 |
loopsva | 0:1ed24aaf786d | 137 | i2cData[i+1] = 0; // next available write address, Hamming nibble 2 of 4 |
loopsva | 0:1ed24aaf786d | 138 | i2cData[i+2] = 0x8b; // next available write address, Hamming nibble 3 of 4 |
loopsva | 0:1ed24aaf786d | 139 | i2cData[i+3] = 0; // next available write address, Hamming nibble 4 of 4 |
loopsva | 0:1ed24aaf786d | 140 | i2cData[i+4] = 0; // clear out address pointer flags byte (0x07 = 1 or more of the 4 bytes above is wore out) |
loopsva | 0:1ed24aaf786d | 141 | } |
loopsva | 0:1ed24aaf786d | 142 | for (i=i+5; i<130; i+=1) { //clear out remainder of buffer area |
loopsva | 0:1ed24aaf786d | 143 | i2cData[i] = 255; |
loopsva | 0:1ed24aaf786d | 144 | } |
loopsva | 0:1ed24aaf786d | 145 | */ |
loopsva | 0:1ed24aaf786d | 146 | |
loopsva | 0:1ed24aaf786d | 147 | /****** The following line inititalizes the EEPROMs to the structure above ******/ |
loopsva | 0:1ed24aaf786d | 148 | // (!i2c.write(address, i2cData, 132)); // store device address at location 0 |
loopsva | 0:1ed24aaf786d | 149 | |
loopsva | 0:1ed24aaf786d | 150 | wait(0.005); |
loopsva | 0:1ed24aaf786d | 151 | pc.printf("-I2C device found at address 0x%02X\n", address); |
loopsva | 0:1ed24aaf786d | 152 | for (int clrb=0; clrb<i2cQty; clrb+=1) { //clear out i2c buffer before reading in data |
loopsva | 0:1ed24aaf786d | 153 | i2cData[clrb] = 0; |
loopsva | 0:1ed24aaf786d | 154 | } |
loopsva | 0:1ed24aaf786d | 155 | // If device is a 24fc1025, then set the pointer register |
loopsva | 0:1ed24aaf786d | 156 | if (address>0x9F && address<0xB0) { // do only if accessing EEPROM |
loopsva | 0:1ed24aaf786d | 157 | i2cData[0] = 0; // point to location 0 in EEPROM |
loopsva | 0:1ed24aaf786d | 158 | i2cData[1] = 0; |
loopsva | 0:1ed24aaf786d | 159 | (!i2c.write(address, i2cData, 2)); // set location 0 in EEPROM |
loopsva | 0:1ed24aaf786d | 160 | } |
loopsva | 0:1ed24aaf786d | 161 | // If device is a temperature sensor (adt7410, then reset device and set 16 bit mode |
loopsva | 0:1ed24aaf786d | 162 | /* if (address>0x8F && address<0x91) { // do only if accessing Temp sensor |
loopsva | 0:1ed24aaf786d | 163 | pc.printf("-Initializing ADT7410...\n"); |
loopsva | 0:1ed24aaf786d | 164 | ADT7410Up = true; // set "installed" flag |
loopsva | 0:1ed24aaf786d | 165 | // i2cData[0] = 0x2f; // point to location 0x2f (reset reg) in Temp |
loopsva | 0:1ed24aaf786d | 166 | // (!i2c.write(address, i2cData, 1)); // reset temperature device |
loopsva | 0:1ed24aaf786d | 167 | |
loopsva | 0:1ed24aaf786d | 168 | fever.reset(); |
loopsva | 0:1ed24aaf786d | 169 | wait_ms(1); |
loopsva | 0:1ed24aaf786d | 170 | // fever.setConfig(char 0x82); |
loopsva | 0:1ed24aaf786d | 171 | // i2cData[0] = 0x03; // point to location 0x03 (config reg) in Temp |
loopsva | 0:1ed24aaf786d | 172 | // i2cData[1] = 0x82; // 16 bit mode, 3 faults |
loopsva | 0:1ed24aaf786d | 173 | // (!i2c.write(address, i2cData, 2)); // set config register |
loopsva | 0:1ed24aaf786d | 174 | // wait_ms(1); |
loopsva | 0:1ed24aaf786d | 175 | i2cData[0] = 0x0b; // point to location 0x0b (id register) |
loopsva | 0:1ed24aaf786d | 176 | (!i2c.write(address, i2cData, 1)); // set pointer for before read |
loopsva | 0:1ed24aaf786d | 177 | i2cData[0] = 0x00; // point to location 0 |
loopsva | 0:1ed24aaf786d | 178 | // (!i2c.write(address, i2cData, 1)); // set pointer for before read |
loopsva | 0:1ed24aaf786d | 179 | (!i2c.read(address, i2cData, 1)); // get ID |
loopsva | 0:1ed24aaf786d | 180 | TempId = i2cData[0]; // save ID |
loopsva | 0:1ed24aaf786d | 181 | pc.printf(" id: %02x\n", TempId); |
loopsva | 0:1ed24aaf786d | 182 | |
loopsva | 0:1ed24aaf786d | 183 | } |
loopsva | 0:1ed24aaf786d | 184 | // If device is a MPL115A2, then set the pointer register |
loopsva | 0:1ed24aaf786d | 185 | if (address>0xBF && address<0xC2) { // do only if accessing MPL115 |
loopsva | 0:1ed24aaf786d | 186 | MPL115aUp = true; // set "installed" flag |
loopsva | 0:1ed24aaf786d | 187 | i2cData[0] = 0x12; // start a temp / baro conversion |
loopsva | 0:1ed24aaf786d | 188 | i2cData[1] = 0x01; |
loopsva | 0:1ed24aaf786d | 189 | (!i2c.write(address, i2cData, 2)); // set location 0x12 in MPL115 |
loopsva | 0:1ed24aaf786d | 190 | pc.printf("-Initializing MPL115A2...\n"); |
loopsva | 0:1ed24aaf786d | 191 | wait_ms(6); // need 6mS for conversions |
loopsva | 0:1ed24aaf786d | 192 | i2cData[0] = 0; // point to location 0 in MPL115 |
loopsva | 0:1ed24aaf786d | 193 | i2cData[1] = 0; |
loopsva | 0:1ed24aaf786d | 194 | (!i2c.write(address, i2cData, 1)); // set location 0 in MPL115 |
loopsva | 0:1ed24aaf786d | 195 | } |
loopsva | 0:1ed24aaf786d | 196 | // Read and display first 16 bytes of 'found' device |
loopsva | 0:1ed24aaf786d | 197 | (!i2c.read(address, i2cData, i2cQty)); // get first few bytes from device |
loopsva | 0:1ed24aaf786d | 198 | if (address>0xBF && address<0xC2) { // do only if accessing MPL115 |
loopsva | 0:1ed24aaf786d | 199 | baro.initBaroCoef(); //initializes coeficents - only do once after reset |
loopsva | 0:1ed24aaf786d | 200 | baro.getBaroKPa(); //first real pressure access |
loopsva | 0:1ed24aaf786d | 201 | // baro.getBaroRegs(); //displays all coef registers |
loopsva | 0:1ed24aaf786d | 202 | // baro.getBaroCoef(); //displays all of the coeficent values |
loopsva | 0:1ed24aaf786d | 203 | } |
loopsva | 0:1ed24aaf786d | 204 | */ |
loopsva | 0:1ed24aaf786d | 205 | pc.printf(" "); |
loopsva | 0:1ed24aaf786d | 206 | for (int ptr=0; ptr<i2cQty/2; ptr+=1) { // print them out |
loopsva | 0:1ed24aaf786d | 207 | pc.printf("%02x ",i2cData[ptr]); |
loopsva | 0:1ed24aaf786d | 208 | } |
loopsva | 0:1ed24aaf786d | 209 | pc.printf(" "); |
loopsva | 0:1ed24aaf786d | 210 | for (int ptr=i2cQty/2; ptr<i2cQty; ptr+=1) { // print them out |
loopsva | 0:1ed24aaf786d | 211 | pc.printf("%02x ",i2cData[ptr]); |
loopsva | 0:1ed24aaf786d | 212 | } |
loopsva | 0:1ed24aaf786d | 213 | pc.printf(" "); |
loopsva | 0:1ed24aaf786d | 214 | for (int ptr=0; ptr<i2cQty; ptr+=1) { // print them out |
loopsva | 0:1ed24aaf786d | 215 | if (i2cData[ptr]>32 && i2cData[ptr]<127) { // do ascii if legal character |
loopsva | 0:1ed24aaf786d | 216 | pc.printf("%c",i2cData[ptr]); |
loopsva | 0:1ed24aaf786d | 217 | } |
loopsva | 0:1ed24aaf786d | 218 | else { |
loopsva | 0:1ed24aaf786d | 219 | pc.printf("."); |
loopsva | 0:1ed24aaf786d | 220 | } |
loopsva | 0:1ed24aaf786d | 221 | } |
loopsva | 0:1ed24aaf786d | 222 | pc.printf("\n"); |
loopsva | 0:1ed24aaf786d | 223 | count++; |
loopsva | 0:1ed24aaf786d | 224 | /* if (address>0x8F && address<0x91) { // do only if accessing Temp sensor |
loopsva | 0:1ed24aaf786d | 225 | printf("ADT7410 config: 0x%x\n", fever.getConfig()); |
loopsva | 0:1ed24aaf786d | 226 | // TempC = fever.getTemp(); |
loopsva | 0:1ed24aaf786d | 227 | // TempF = TempC * 9.0 / 5.0 + 32.0; |
loopsva | 0:1ed24aaf786d | 228 | // printf("Temperature %.3fC %.3fF\n", TempC, TempF); |
loopsva | 0:1ed24aaf786d | 229 | } |
loopsva | 0:1ed24aaf786d | 230 | */ |
loopsva | 0:1ed24aaf786d | 231 | } |
loopsva | 0:1ed24aaf786d | 232 | } |
loopsva | 0:1ed24aaf786d | 233 | if (count == 0) pc.printf(" "); |
loopsva | 0:1ed24aaf786d | 234 | pc.printf("I2CU! %d devices found\n", count); |
loopsva | 0:1ed24aaf786d | 235 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 236 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 237 | lcdt.printf("I2CU! found...\n"); |
loopsva | 0:1ed24aaf786d | 238 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 239 | lcdt.printf("%d devices\n", count); |
loopsva | 0:1ed24aaf786d | 240 | } |
loopsva | 0:1ed24aaf786d | 241 | |
loopsva | 0:1ed24aaf786d | 242 | /* save values in file sensors.csv for later retreval */ |
loopsva | 0:1ed24aaf786d | 243 | /* |
loopsva | 0:1ed24aaf786d | 244 | void storeValues() { |
loopsva | 0:1ed24aaf786d | 245 | time_t cstTime; //need our own time stamp |
loopsva | 0:1ed24aaf786d | 246 | cstTime = time(NULL); //get time stamp |
loopsva | 0:1ed24aaf786d | 247 | cstTime = cstTime + ((TZone + DST) * 3600); //set to local date |
loopsva | 0:1ed24aaf786d | 248 | strftime(timebuf_d, 32, "%m/%d/%y,", localtime(&cstTime)); //format date |
loopsva | 0:1ed24aaf786d | 249 | strftime(timebuf, 32, "%H:%M:%S,", localtime(&cstTime)); //format time |
loopsva | 0:1ed24aaf786d | 250 | |
loopsva | 0:1ed24aaf786d | 251 | if(use_sd == false) { //use local or sd file system? |
loopsva | 0:1ed24aaf786d | 252 | if(ZeroMinFlag == true) { //only do once an hour if local |
loopsva | 0:1ed24aaf786d | 253 | if (gDebug > 1) pc.printf(" Looking for /local/sensors.csv\n"); |
loopsva | 0:1ed24aaf786d | 254 | FILE *fp = fopen("/local/sensors.csv", "r"); |
loopsva | 0:1ed24aaf786d | 255 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 256 | pc.printf("\n***Creating /local/sensors.csv\n"); |
loopsva | 0:1ed24aaf786d | 257 | FILE *fp = fopen("/local/sensors.csv", "w"); |
loopsva | 0:1ed24aaf786d | 258 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 259 | pc.printf("***cannot create /local/sensors.csv !!!\n"); |
loopsva | 0:1ed24aaf786d | 260 | return; //exit with create error |
loopsva | 0:1ed24aaf786d | 261 | } else { |
loopsva | 0:1ed24aaf786d | 262 | fprintf(fp, "date,time,inHg,kPa,deg F,deg C, alt F,kPa @ 0\n"); |
loopsva | 0:1ed24aaf786d | 263 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 264 | } |
loopsva | 0:1ed24aaf786d | 265 | } else { |
loopsva | 0:1ed24aaf786d | 266 | fclose(fp); //close as a read or create file |
loopsva | 0:1ed24aaf786d | 267 | if (gDebug > 1) pc.printf("Saving data in /local/sensors.csv ..."); |
loopsva | 0:1ed24aaf786d | 268 | FILE *fp = fopen("/local/sensors.csv", "a"); //re-open as an append file |
loopsva | 0:1ed24aaf786d | 269 | fputs(timebuf_d, fp); //save date |
loopsva | 0:1ed24aaf786d | 270 | fputs(timebuf, fp); //dave time |
loopsva | 0:1ed24aaf786d | 271 | fprintf(fp, "%2.2f,%3.1f,%3.2f,%2.2f,%5.0f,%3.1f\n", |
loopsva | 0:1ed24aaf786d | 272 | RollAvgPress * kPa_inHg, |
loopsva | 0:1ed24aaf786d | 273 | RollAvgPress, |
loopsva | 0:1ed24aaf786d | 274 | RollAvgTemp * 9.0 / 5.0 + 32.0, |
loopsva | 0:1ed24aaf786d | 275 | RollAvgTemp, |
loopsva | 0:1ed24aaf786d | 276 | RollAltitude / 0.3048, |
loopsva | 0:1ed24aaf786d | 277 | Press0Ft); |
loopsva | 0:1ed24aaf786d | 278 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 279 | if (gDebug > 1) pc.printf(" done\n"); |
loopsva | 0:1ed24aaf786d | 280 | } |
loopsva | 0:1ed24aaf786d | 281 | } |
loopsva | 0:1ed24aaf786d | 282 | } else { // SDHC available to use |
loopsva | 0:1ed24aaf786d | 283 | if (gDebug > 1) pc.printf(" Looking for /sd/sensors.csv\n"); |
loopsva | 0:1ed24aaf786d | 284 | FILE *fp = fopen("/sd/sensors.csv", "r"); |
loopsva | 0:1ed24aaf786d | 285 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 286 | pc.printf("\n***Creating /sd/sensors.csv\n"); |
loopsva | 0:1ed24aaf786d | 287 | FILE *fp = fopen("/sd/sensors.csv", "w"); |
loopsva | 0:1ed24aaf786d | 288 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 289 | pc.printf("***cannot create /sd/sensors.csv !!!\n"); |
loopsva | 0:1ed24aaf786d | 290 | return; //exit with create error |
loopsva | 0:1ed24aaf786d | 291 | } else { |
loopsva | 0:1ed24aaf786d | 292 | fprintf(fp, "date,time,inHg,kPa,deg F,deg C, alt F,kPa @ 0, Zero Hr\n"); |
loopsva | 0:1ed24aaf786d | 293 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 294 | } |
loopsva | 0:1ed24aaf786d | 295 | } else { |
loopsva | 0:1ed24aaf786d | 296 | fclose(fp); //close as a read or create file |
loopsva | 0:1ed24aaf786d | 297 | if (gDebug > 1) pc.printf("Saving data in /sd/sensors.csv ..."); |
loopsva | 0:1ed24aaf786d | 298 | FILE *fp = fopen("/sd/sensors.csv", "a"); //re-open as an append file |
loopsva | 0:1ed24aaf786d | 299 | fputs(timebuf_d, fp); //save date only |
loopsva | 0:1ed24aaf786d | 300 | fputs(timebuf, fp); //save time only |
loopsva | 0:1ed24aaf786d | 301 | fprintf(fp, "%2.2f,%3.1f,%3.2f,%2.2f,%5.0f,%3.1f", |
loopsva | 0:1ed24aaf786d | 302 | RollAvgPress * kPa_inHg, |
loopsva | 0:1ed24aaf786d | 303 | RollAvgPress, |
loopsva | 0:1ed24aaf786d | 304 | RollAvgTemp * 9.0 / 5.0 + 32.0, |
loopsva | 0:1ed24aaf786d | 305 | RollAvgTemp, |
loopsva | 0:1ed24aaf786d | 306 | RollAltitude / 0.3048, |
loopsva | 0:1ed24aaf786d | 307 | Press0Ft); |
loopsva | 0:1ed24aaf786d | 308 | if(ZeroMinFlag == true) { |
loopsva | 0:1ed24aaf786d | 309 | fprintf(fp, ",****\n"); |
loopsva | 0:1ed24aaf786d | 310 | } else { |
loopsva | 0:1ed24aaf786d | 311 | fprintf(fp, "\n"); |
loopsva | 0:1ed24aaf786d | 312 | } |
loopsva | 0:1ed24aaf786d | 313 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 314 | if (gDebug > 1) pc.printf(" done\n"); |
loopsva | 0:1ed24aaf786d | 315 | } |
loopsva | 0:1ed24aaf786d | 316 | } |
loopsva | 0:1ed24aaf786d | 317 | } |
loopsva | 0:1ed24aaf786d | 318 | */ |
loopsva | 0:1ed24aaf786d | 319 | /*----------*/ |
loopsva | 0:1ed24aaf786d | 320 | // print "local" directory |
loopsva | 0:1ed24aaf786d | 321 | void listdir(void) { |
loopsva | 0:1ed24aaf786d | 322 | pc.printf("/local directory:\n"); |
loopsva | 0:1ed24aaf786d | 323 | DIR *d; |
loopsva | 0:1ed24aaf786d | 324 | struct dirent *p; |
loopsva | 0:1ed24aaf786d | 325 | |
loopsva | 0:1ed24aaf786d | 326 | d = opendir("/local"); |
loopsva | 0:1ed24aaf786d | 327 | if (d != NULL) { |
loopsva | 0:1ed24aaf786d | 328 | while ((p = readdir(d)) != NULL) { |
loopsva | 0:1ed24aaf786d | 329 | printf(" - %s\n", p->d_name); |
loopsva | 0:1ed24aaf786d | 330 | } |
loopsva | 0:1ed24aaf786d | 331 | } else { |
loopsva | 0:1ed24aaf786d | 332 | pc.printf("Could not open -local- directory!\n"); |
loopsva | 0:1ed24aaf786d | 333 | } |
loopsva | 0:1ed24aaf786d | 334 | closedir(d); |
loopsva | 0:1ed24aaf786d | 335 | } |
loopsva | 0:1ed24aaf786d | 336 | /*----------*/ |
loopsva | 0:1ed24aaf786d | 337 | // print "sd" directory ***broken!! |
loopsva | 0:1ed24aaf786d | 338 | /* |
loopsva | 0:1ed24aaf786d | 339 | void listdirSD(void) { |
loopsva | 0:1ed24aaf786d | 340 | pc.printf("/sd directory:\n"); |
loopsva | 0:1ed24aaf786d | 341 | DIR *d; |
loopsva | 0:1ed24aaf786d | 342 | struct dirent *p; |
loopsva | 0:1ed24aaf786d | 343 | |
loopsva | 0:1ed24aaf786d | 344 | d = opendir("/sd"); |
loopsva | 0:1ed24aaf786d | 345 | if (d != NULL) { |
loopsva | 0:1ed24aaf786d | 346 | while ((p = readdir(d)) != NULL) { |
loopsva | 0:1ed24aaf786d | 347 | printf(" - %s\n", p->d_name); |
loopsva | 0:1ed24aaf786d | 348 | } |
loopsva | 0:1ed24aaf786d | 349 | } else { |
loopsva | 0:1ed24aaf786d | 350 | printf("Could not open -sd- directory!\n"); |
loopsva | 0:1ed24aaf786d | 351 | } |
loopsva | 0:1ed24aaf786d | 352 | closedir(d); |
loopsva | 0:1ed24aaf786d | 353 | } |
loopsva | 0:1ed24aaf786d | 354 | */ |
loopsva | 0:1ed24aaf786d | 355 | /*----------*/ |
loopsva | 0:1ed24aaf786d | 356 | void getMbedSN() { |
loopsva | 0:1ed24aaf786d | 357 | unsigned int SerialNum[5] = {58,0,0,0,0}; |
loopsva | 0:1ed24aaf786d | 358 | typedef void (*CallMe)(unsigned int[],unsigned int[]); |
loopsva | 0:1ed24aaf786d | 359 | CallMe CallMe_entry=(CallMe)0x1FFF1FF1; |
loopsva | 0:1ed24aaf786d | 360 | CallMe_entry(SerialNum, SerialNum); |
loopsva | 0:1ed24aaf786d | 361 | if (!SerialNum[0]) |
loopsva | 0:1ed24aaf786d | 362 | pc.printf("mbed serial number is: %0.8x %0.8x %0.8x %0.8x\n", |
loopsva | 0:1ed24aaf786d | 363 | SerialNum[1], SerialNum[2], SerialNum[3], SerialNum[4]); |
loopsva | 0:1ed24aaf786d | 364 | else |
loopsva | 0:1ed24aaf786d | 365 | pc.printf("***Unable to retrieve Serial Number from LPC Flash\n"); |
loopsva | 0:1ed24aaf786d | 366 | } |
loopsva | 0:1ed24aaf786d | 367 | |
loopsva | 0:1ed24aaf786d | 368 | /* display MAC address */ |
loopsva | 0:1ed24aaf786d | 369 | void getMbedMAC() { |
loopsva | 0:1ed24aaf786d | 370 | // uint64_t uid = 0; |
loopsva | 0:1ed24aaf786d | 371 | //// char mac[6]; |
loopsva | 0:1ed24aaf786d | 372 | mbed_mac_address(mac); |
loopsva | 0:1ed24aaf786d | 373 | // uid = mac[0] << 40 | mac[1] << 32 | |
loopsva | 0:1ed24aaf786d | 374 | // mac[2] << 24 | mac[3] << 16 | |
loopsva | 0:1ed24aaf786d | 375 | // mac[4] << 8 | mac[5] << 0; |
loopsva | 0:1ed24aaf786d | 376 | pc.printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); |
loopsva | 0:1ed24aaf786d | 377 | } |
loopsva | 0:1ed24aaf786d | 378 | |
loopsva | 0:1ed24aaf786d | 379 | /* initialize dds60 configuration file if it doesn't already exist */ |
loopsva | 0:1ed24aaf786d | 380 | void InitIniFile() { |
loopsva | 0:1ed24aaf786d | 381 | FILE *fp = fopen("/local/dds60.ini", "w"); |
loopsva | 0:1ed24aaf786d | 382 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 383 | pc.printf("***Cannot create dds60.ini file!!!\n"); |
loopsva | 0:1ed24aaf786d | 384 | } else { |
loopsva | 0:1ed24aaf786d | 385 | if(gDebug) pc.printf("***Updating/Creating dds60.ini file... \n"); |
loopsva | 0:1ed24aaf786d | 386 | fprintf(fp, "# DDS-60 configuration file\r\n"); |
loopsva | 0:1ed24aaf786d | 387 | fprintf(fp, "\r\n[Freqs]\r\n"); |
loopsva | 0:1ed24aaf786d | 388 | fprintf(fp, "BaseFrequency=%f\r\n",LclBaseFreq); |
loopsva | 0:1ed24aaf786d | 389 | fprintf(fp, "IFFrequency=%f\r\n", LclIfFreq); |
loopsva | 0:1ed24aaf786d | 390 | fprintf(fp, "StepFrequency=%f\r\n", StepFreq); |
loopsva | 0:1ed24aaf786d | 391 | |
loopsva | 0:1ed24aaf786d | 392 | fprintf(fp, "\r\n[Global]\r\n"); |
loopsva | 0:1ed24aaf786d | 393 | fprintf(fp, "Timezone(hrs)=%d\r\n", TZone); |
loopsva | 0:1ed24aaf786d | 394 | fprintf(fp, "DstZone(hrs)=%d\r\n", DST); |
loopsva | 0:1ed24aaf786d | 395 | fprintf(fp, "NTPRefresh(sec)=%d\r\n", NTPUpdateValue); |
loopsva | 0:1ed24aaf786d | 396 | fprintf(fp, "gDebugLevel=%d\r\n", gDebug); |
loopsva | 0:1ed24aaf786d | 397 | fprintf(fp, "\r\n##END\r\n"); |
loopsva | 0:1ed24aaf786d | 398 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 399 | if(gDebug) pc.printf(" done\n"); |
loopsva | 0:1ed24aaf786d | 400 | } |
loopsva | 0:1ed24aaf786d | 401 | OldgDebug = gDebug; |
loopsva | 0:1ed24aaf786d | 402 | OldDST = DST; |
loopsva | 0:1ed24aaf786d | 403 | OldTZone = TZone; |
loopsva | 0:1ed24aaf786d | 404 | OldPress0Ft = Press0Ft; |
loopsva | 0:1ed24aaf786d | 405 | } |
loopsva | 0:1ed24aaf786d | 406 | |
loopsva | 0:1ed24aaf786d | 407 | // Trim whitespace/CRLFs from both ends of a given string |
loopsva | 0:1ed24aaf786d | 408 | // for use with routine below |
loopsva | 0:1ed24aaf786d | 409 | char * str_cleanup(char *in) { |
loopsva | 0:1ed24aaf786d | 410 | char * out = in; |
loopsva | 0:1ed24aaf786d | 411 | // Trim leading spaces and CR/LF |
loopsva | 0:1ed24aaf786d | 412 | while (*out == ' ' || *out == '\t' || *out == '\r' || *out == '\n') |
loopsva | 0:1ed24aaf786d | 413 | out ++; |
loopsva | 0:1ed24aaf786d | 414 | // Trim trailing spaces and CR/LF |
loopsva | 0:1ed24aaf786d | 415 | int len = strlen(out)-1; |
loopsva | 0:1ed24aaf786d | 416 | while (out[len] == ' ' || out[len] == '\t' || out[len] == '\r' || out[len] == '\n') { |
loopsva | 0:1ed24aaf786d | 417 | out[len] = '\0'; |
loopsva | 0:1ed24aaf786d | 418 | len--; |
loopsva | 0:1ed24aaf786d | 419 | } |
loopsva | 0:1ed24aaf786d | 420 | return out; |
loopsva | 0:1ed24aaf786d | 421 | } |
loopsva | 0:1ed24aaf786d | 422 | |
loopsva | 0:1ed24aaf786d | 423 | // Simple ini file parser for SNTP configuration (Case-sensitive!) |
loopsva | 0:1ed24aaf786d | 424 | // This function is intended to be called only before SNTPClientInit(). |
loopsva | 0:1ed24aaf786d | 425 | // Returns: 0 if OK, errno otherwise |
loopsva | 0:1ed24aaf786d | 426 | enum { |
loopsva | 0:1ed24aaf786d | 427 | SECT_NONE, |
loopsva | 0:1ed24aaf786d | 428 | SECT_FREQS, |
loopsva | 0:1ed24aaf786d | 429 | SECT_GLOBAL, |
loopsva | 0:1ed24aaf786d | 430 | }; |
loopsva | 0:1ed24aaf786d | 431 | |
loopsva | 0:1ed24aaf786d | 432 | //int _SNTPClrAddresses(); |
loopsva | 0:1ed24aaf786d | 433 | |
loopsva | 0:1ed24aaf786d | 434 | int SNTPReadIniFile(const char* filename) { |
loopsva | 0:1ed24aaf786d | 435 | if (gDebug > 1) pc.printf("Before: tz:%d dst:%d ntpupd:%d baroZ:%.1f name:%s\n", TZone, DST, NTPUpdateValue, Press0Ft, hostname); |
loopsva | 0:1ed24aaf786d | 436 | FILE *f; |
loopsva | 0:1ed24aaf786d | 437 | char buf[512]; |
loopsva | 0:1ed24aaf786d | 438 | // bool addresses_cleared = false; |
loopsva | 0:1ed24aaf786d | 439 | bool hname = false; |
loopsva | 0:1ed24aaf786d | 440 | f = fopen(filename, "r"); |
loopsva | 0:1ed24aaf786d | 441 | if (!f) |
loopsva | 0:1ed24aaf786d | 442 | return -1; // errno not used? |
loopsva | 0:1ed24aaf786d | 443 | char *buf1, *buf2; |
loopsva | 0:1ed24aaf786d | 444 | int section=SECT_NONE; |
loopsva | 0:1ed24aaf786d | 445 | int line = 0; |
loopsva | 0:1ed24aaf786d | 446 | while (fgets(buf, sizeof(buf)/sizeof(buf[0]), f)) { |
loopsva | 0:1ed24aaf786d | 447 | line++; |
loopsva | 0:1ed24aaf786d | 448 | buf1 = str_cleanup(buf); |
loopsva | 0:1ed24aaf786d | 449 | if (*buf1 == '#' || *buf1 == '\0') |
loopsva | 0:1ed24aaf786d | 450 | continue; // Comment line or empty line - skip |
loopsva | 0:1ed24aaf786d | 451 | if (*buf1 == '[') { |
loopsva | 0:1ed24aaf786d | 452 | // New section |
loopsva | 0:1ed24aaf786d | 453 | if (0 == strncmp(buf1,"[Freqs]", sizeof("[Freqs]")-1)) { |
loopsva | 0:1ed24aaf786d | 454 | section=SECT_FREQS; |
loopsva | 0:1ed24aaf786d | 455 | /* if (!addresses_cleared) { |
loopsva | 0:1ed24aaf786d | 456 | // Clear addresses only once. |
loopsva | 0:1ed24aaf786d | 457 | _SNTPClrAddresses(); |
loopsva | 0:1ed24aaf786d | 458 | addresses_cleared = true; |
loopsva | 0:1ed24aaf786d | 459 | } |
loopsva | 0:1ed24aaf786d | 460 | */ } else if (0 == strncmp(buf1,"[Global]", sizeof("[Global]")-1)) { |
loopsva | 0:1ed24aaf786d | 461 | section=SECT_GLOBAL; |
loopsva | 0:1ed24aaf786d | 462 | } else { |
loopsva | 0:1ed24aaf786d | 463 | section=SECT_NONE; |
loopsva | 0:1ed24aaf786d | 464 | fprintf(stderr, "***File \"%s\", line %d - section \"%s\" is not understood.\r\n", filename, line, buf1); |
loopsva | 0:1ed24aaf786d | 465 | } |
loopsva | 0:1ed24aaf786d | 466 | } else { |
loopsva | 0:1ed24aaf786d | 467 | // Section values |
loopsva | 0:1ed24aaf786d | 468 | switch (section) { |
loopsva | 0:1ed24aaf786d | 469 | case SECT_FREQS: |
loopsva | 0:1ed24aaf786d | 470 | buf2 = strchr(buf1, '='); |
loopsva | 0:1ed24aaf786d | 471 | if (buf2) { |
loopsva | 0:1ed24aaf786d | 472 | *buf2++ = '\0'; // Now buf1 has variable name, buf2 has value |
loopsva | 0:1ed24aaf786d | 473 | buf2 = str_cleanup(buf2); |
loopsva | 0:1ed24aaf786d | 474 | if (0 == strncmp(buf1, "BaseFrequency", sizeof("BaseFrequency")-1)) { |
loopsva | 0:1ed24aaf786d | 475 | LclBaseFreq = strtof(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 476 | } else if (0 == strncmp(buf1, "IFFrequency", sizeof("IFFrequency")-1)) { |
loopsva | 0:1ed24aaf786d | 477 | LclIfFreq = strtof(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 478 | } else if (0 == strncmp(buf1, "StepFreq", sizeof("StepFreq")-1)) { |
loopsva | 0:1ed24aaf786d | 479 | StepFreq = strtod(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 480 | } else { |
loopsva | 0:1ed24aaf786d | 481 | pc.printf("***File \"%s\", line %d - unrecognized variable \"%s\" in section [Freqs]\r\n", filename, line, buf1); |
loopsva | 0:1ed24aaf786d | 482 | } |
loopsva | 0:1ed24aaf786d | 483 | } else { |
loopsva | 0:1ed24aaf786d | 484 | pc.printf("***File \"%s\", line %d - unrecognized statement in section [Freqs]: %s\r\n", filename, line, buf1); |
loopsva | 0:1ed24aaf786d | 485 | } |
loopsva | 0:1ed24aaf786d | 486 | break; |
loopsva | 0:1ed24aaf786d | 487 | case SECT_GLOBAL: |
loopsva | 0:1ed24aaf786d | 488 | buf2 = strchr(buf1, '='); |
loopsva | 0:1ed24aaf786d | 489 | if (buf2) { |
loopsva | 0:1ed24aaf786d | 490 | *buf2++ = '\0'; // Now buf1 has variable name, buf2 has value |
loopsva | 0:1ed24aaf786d | 491 | buf2 = str_cleanup(buf2); |
loopsva | 0:1ed24aaf786d | 492 | if (0 == strncmp(buf1, "Timezone(hrs)", sizeof("Timezone(hrs)")-1)) { |
loopsva | 0:1ed24aaf786d | 493 | TZone = strtod(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 494 | } else if (0 == strncmp(buf1, "NTPRefresh(sec)", sizeof("NTPRefresh(sec)")-1)) { |
loopsva | 0:1ed24aaf786d | 495 | NTPUpdateValue = strtod(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 496 | } else if (0 == strncmp(buf1, "gDebugLevel", sizeof("gDebugLevel")-1)) { |
loopsva | 0:1ed24aaf786d | 497 | gDebug = strtod(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 498 | } else if (0 == strncmp(buf1, "bootDHCP", sizeof("bootDHCP")-1)) { |
loopsva | 0:1ed24aaf786d | 499 | bootDHCP = strtod(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 500 | } else if (0 == strncmp(buf1, "MyName", sizeof("MyName")-1)) { |
loopsva | 0:1ed24aaf786d | 501 | if (hname == false) { |
loopsva | 0:1ed24aaf786d | 502 | hname = true; |
loopsva | 0:1ed24aaf786d | 503 | hostname = buf2; |
loopsva | 0:1ed24aaf786d | 504 | if (gDebug > 1) pc.printf("buf2:%s hn:%s\n", buf2, hostname); |
loopsva | 0:1ed24aaf786d | 505 | } |
loopsva | 0:1ed24aaf786d | 506 | } else if (0 == strncmp(buf1, "PressureSeaLevel", sizeof("PressureSeaLevel")-1)) { |
loopsva | 0:1ed24aaf786d | 507 | Press0Ft = strtof(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 508 | //} else if (0 == strncmp(buf1, "RtcUtc", sizeof("RtcUtc")-1)) { |
loopsva | 0:1ed24aaf786d | 509 | // gSntpRtcUtc = (bool)strtol(buf2, &buf2, 10); |
loopsva | 0:1ed24aaf786d | 510 | } else if (0 == strncmp(buf1, "DstZone(hrs)", sizeof("DstZone(hrs)")-1)) { |
loopsva | 0:1ed24aaf786d | 511 | DST = strtod(buf2, &buf2); |
loopsva | 0:1ed24aaf786d | 512 | } else { |
loopsva | 0:1ed24aaf786d | 513 | pc.printf("***File \"%s\", line %d - unrecognized variable \"%s\" in section [Global]\r\n", filename, line, buf1); |
loopsva | 0:1ed24aaf786d | 514 | } |
loopsva | 0:1ed24aaf786d | 515 | } else { |
loopsva | 0:1ed24aaf786d | 516 | pc.printf("***File \"%s\", line %d - unrecognized statement in section [Global]: %s\r\n", filename, line, buf1); |
loopsva | 0:1ed24aaf786d | 517 | } |
loopsva | 0:1ed24aaf786d | 518 | break; |
loopsva | 0:1ed24aaf786d | 519 | default: |
loopsva | 0:1ed24aaf786d | 520 | pc.printf("***File \"%s\", line %d - unrecognized statement / no section: %s\r\n", filename, line, buf1); |
loopsva | 0:1ed24aaf786d | 521 | } |
loopsva | 0:1ed24aaf786d | 522 | } |
loopsva | 0:1ed24aaf786d | 523 | } |
loopsva | 0:1ed24aaf786d | 524 | fclose(f); |
loopsva | 0:1ed24aaf786d | 525 | pc.printf("DDS60 configuration read from \"%s\", %d lines.\r\n", filename, line); |
loopsva | 0:1ed24aaf786d | 526 | pc.printf("- gDebug display level: %d\n", gDebug); |
loopsva | 0:1ed24aaf786d | 527 | pc.printf("- Time Zone: %d hours\n", TZone); |
loopsva | 0:1ed24aaf786d | 528 | //pc.printf("- Daylight Saving Time - "); |
loopsva | 0:1ed24aaf786d | 529 | if (DST == 0) { |
loopsva | 0:1ed24aaf786d | 530 | pc.printf("- Standard Time\n"); |
loopsva | 0:1ed24aaf786d | 531 | } else { |
loopsva | 0:1ed24aaf786d | 532 | pc.printf("- Daylight Saving Time\n"); |
loopsva | 0:1ed24aaf786d | 533 | } |
loopsva | 0:1ed24aaf786d | 534 | pc.printf("- NTC update: %d seconds\n", NTPUpdateValue); |
loopsva | 0:1ed24aaf786d | 535 | if (bootDHCP == 1) { |
loopsva | 0:1ed24aaf786d | 536 | pc.printf("- booting HTTP, host name: %s\n", hostname); |
loopsva | 0:1ed24aaf786d | 537 | } else { |
loopsva | 0:1ed24aaf786d | 538 | pc.printf("- booting static IP\n"); |
loopsva | 0:1ed24aaf786d | 539 | } |
loopsva | 0:1ed24aaf786d | 540 | |
loopsva | 0:1ed24aaf786d | 541 | pc.printf("- Base Frequency: %.3f kPa\n", LclBaseFreq); |
loopsva | 0:1ed24aaf786d | 542 | pc.printf("- IF Frequency: %.3f kPa\n", LclIfFreq); |
loopsva | 0:1ed24aaf786d | 543 | pc.printf("- Step Frequency: %.3f kPa\n", StepFreq); |
loopsva | 0:1ed24aaf786d | 544 | |
loopsva | 0:1ed24aaf786d | 545 | // if (gDebug > 1) pc.printf("After: tz:%d dst:%d ntpupd:%d baroZ:%.1f name:%s\n", TZone, DST, NTPUpdateValue, Press0Ft, hostname); |
loopsva | 0:1ed24aaf786d | 546 | |
loopsva | 0:1ed24aaf786d | 547 | OldgDebug = gDebug; |
loopsva | 0:1ed24aaf786d | 548 | OldDST = DST; |
loopsva | 0:1ed24aaf786d | 549 | OldTZone = TZone; |
loopsva | 0:1ed24aaf786d | 550 | OldPress0Ft = Press0Ft; |
loopsva | 0:1ed24aaf786d | 551 | dds60.SetBaseValue(LclBaseFreq); |
loopsva | 0:1ed24aaf786d | 552 | dds60.SetIfValue(LclIfFreq); |
loopsva | 0:1ed24aaf786d | 553 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 554 | OldStepFreq = StepFreq; |
loopsva | 0:1ed24aaf786d | 555 | return 0; |
loopsva | 0:1ed24aaf786d | 556 | } |
loopsva | 0:1ed24aaf786d | 557 | |
loopsva | 0:1ed24aaf786d | 558 | //update LCD based on Sequence count |
loopsva | 0:1ed24aaf786d | 559 | void UpdLCD() { |
loopsva | 0:1ed24aaf786d | 560 | double Fdata = 0.0; |
loopsva | 0:1ed24aaf786d | 561 | int UIdata = 0; |
loopsva | 0:1ed24aaf786d | 562 | char Cdata = 0; |
loopsva | 0:1ed24aaf786d | 563 | if(Sequence == 0) { |
loopsva | 0:1ed24aaf786d | 564 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 565 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 566 | lcdt.printf("DDS-60 %d", revision); |
loopsva | 0:1ed24aaf786d | 567 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 568 | lcdt.printf("K Braun"); |
loopsva | 0:1ed24aaf786d | 569 | } |
loopsva | 0:1ed24aaf786d | 570 | if(Sequence == 1) { |
loopsva | 0:1ed24aaf786d | 571 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 572 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 573 | lcdt.printf("(%d) Base Freq:", Sequence); |
loopsva | 0:1ed24aaf786d | 574 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 575 | Fdata = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 576 | lcdt.printf(" %.3f", Fdata); |
loopsva | 0:1ed24aaf786d | 577 | } |
loopsva | 0:1ed24aaf786d | 578 | if(Sequence == 2) { |
loopsva | 0:1ed24aaf786d | 579 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 580 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 581 | lcdt.printf("(%d) IF Freq:", Sequence); |
loopsva | 0:1ed24aaf786d | 582 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 583 | Fdata = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 584 | lcdt.printf(" %.3f", Fdata); |
loopsva | 0:1ed24aaf786d | 585 | } |
loopsva | 0:1ed24aaf786d | 586 | if(Sequence == 3) { |
loopsva | 0:1ed24aaf786d | 587 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 588 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 589 | lcdt.printf("(%d) Step Freq:", Sequence); |
loopsva | 0:1ed24aaf786d | 590 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 591 | lcdt.printf(" %.3f", StepFreq); |
loopsva | 0:1ed24aaf786d | 592 | } |
loopsva | 0:1ed24aaf786d | 593 | if(Sequence == 4) { |
loopsva | 0:1ed24aaf786d | 594 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 595 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 596 | lcdt.printf("(%d) AD9851 data:", Sequence); |
loopsva | 0:1ed24aaf786d | 597 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 598 | UIdata = dds60.GetFD32Value(); |
loopsva | 0:1ed24aaf786d | 599 | Cdata = dds60.GetFortyValue(); |
loopsva | 0:1ed24aaf786d | 600 | lcdt.printf(" 0x%02x%08x\n", Cdata, UIdata); |
loopsva | 0:1ed24aaf786d | 601 | } |
loopsva | 0:1ed24aaf786d | 602 | if(Sequence == 5) { |
loopsva | 0:1ed24aaf786d | 603 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 604 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 605 | if(ErFlag == false) { |
loopsva | 0:1ed24aaf786d | 606 | lcdt.printf("DDS-60 %d", revision); |
loopsva | 0:1ed24aaf786d | 607 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 608 | lcdt.printf("K Braun"); |
loopsva | 0:1ed24aaf786d | 609 | } else { |
loopsva | 0:1ed24aaf786d | 610 | lcdt.printf("(%d) Entry Error", Sequence); |
loopsva | 0:1ed24aaf786d | 611 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 612 | lcdt.printf(" !!!!!!!!"); |
loopsva | 0:1ed24aaf786d | 613 | } |
loopsva | 0:1ed24aaf786d | 614 | } |
loopsva | 0:1ed24aaf786d | 615 | if(Sequence > 5) { |
loopsva | 0:1ed24aaf786d | 616 | lcdt.cls(); |
loopsva | 0:1ed24aaf786d | 617 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 618 | lcdt.printf("(%d) huh??", Sequence); |
loopsva | 0:1ed24aaf786d | 619 | } |
loopsva | 0:1ed24aaf786d | 620 | } |
loopsva | 0:1ed24aaf786d | 621 | |
loopsva | 0:1ed24aaf786d | 622 | // manu selection menu |
loopsva | 0:1ed24aaf786d | 623 | void mainMenu() { |
loopsva | 0:1ed24aaf786d | 624 | pc.printf("\n**************************************************************************\n"); |
loopsva | 0:1ed24aaf786d | 625 | pc.printf(" MAIN MENU\n"); |
loopsva | 0:1ed24aaf786d | 626 | double Fdata; |
loopsva | 0:1ed24aaf786d | 627 | Fdata = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 628 | pc.printf("AD9851 Summary:\nBase Freq: %.3f\n", Fdata); |
loopsva | 0:1ed24aaf786d | 629 | Fdata = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 630 | pc.printf("IF Freq: %.3f\n", Fdata); |
loopsva | 0:1ed24aaf786d | 631 | pc.printf("Step Freq: %.3f\n", StepFreq); |
loopsva | 0:1ed24aaf786d | 632 | unsigned int UIdata; |
loopsva | 0:1ed24aaf786d | 633 | UIdata = dds60.GetFD32Value(); |
loopsva | 0:1ed24aaf786d | 634 | char Cdata; |
loopsva | 0:1ed24aaf786d | 635 | Cdata = dds60.GetFortyValue(); |
loopsva | 0:1ed24aaf786d | 636 | pc.printf("40 bit wd: 0x%02x%08x\n", Cdata, UIdata); |
loopsva | 0:1ed24aaf786d | 637 | char onoff = Cdata & 0x04; |
loopsva | 0:1ed24aaf786d | 638 | if(onoff == 0) { |
loopsva | 0:1ed24aaf786d | 639 | pc.printf("AD9851 is: -ON-\n\n"); |
loopsva | 0:1ed24aaf786d | 640 | } else { |
loopsva | 0:1ed24aaf786d | 641 | pc.printf("AD9851 is: -OFF-\n\n"); |
loopsva | 0:1ed24aaf786d | 642 | } |
loopsva | 0:1ed24aaf786d | 643 | // pc.printf("----------\n"); |
loopsva | 0:1ed24aaf786d | 644 | pc.printf(" B - Base Frequency Y - IF Frequency S - Step Frequency\n"); |
loopsva | 0:1ed24aaf786d | 645 | pc.printf(" E - Enable DDS-60 X - Disable DDS-60\n"); |
loopsva | 0:1ed24aaf786d | 646 | pc.printf(" U - Update DDS-60 W - Write to Flash\n"); |
loopsva | 0:1ed24aaf786d | 647 | pc.printf(" I - Inc Step Frequency D - Dec Step Frequency\n"); |
loopsva | 0:1ed24aaf786d | 648 | pc.printf(" R - Reboot!!!\n\n"); |
loopsva | 0:1ed24aaf786d | 649 | // pc.printf("\n"); |
loopsva | 0:1ed24aaf786d | 650 | pc.printf("**************************************************************************\n"); |
loopsva | 0:1ed24aaf786d | 651 | pc.printf("Selection: "); |
loopsva | 0:1ed24aaf786d | 652 | } |
loopsva | 0:1ed24aaf786d | 653 | |
loopsva | 0:1ed24aaf786d | 654 | // This function is called when a character goes from the TX buffer |
loopsva | 0:1ed24aaf786d | 655 | // to the Uart THR FIFO register. |
loopsva | 0:1ed24aaf786d | 656 | //void txCallback(MODSERIAL_IRQ_INFO *q) { |
loopsva | 0:1ed24aaf786d | 657 | // led2 = !led2; |
loopsva | 0:1ed24aaf786d | 658 | //} |
loopsva | 0:1ed24aaf786d | 659 | |
loopsva | 0:1ed24aaf786d | 660 | // This function is called when TX buffer goes empty |
loopsva | 0:1ed24aaf786d | 661 | //void txEmpty(MODSERIAL_IRQ_INFO *q) { |
loopsva | 0:1ed24aaf786d | 662 | // led2 = 0; |
loopsva | 0:1ed24aaf786d | 663 | // pc.puts(" testing done...\n"); |
loopsva | 0:1ed24aaf786d | 664 | // lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 665 | // lcdt.printf(" "); //print -me- on LCD |
loopsva | 0:1ed24aaf786d | 666 | // lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 667 | // lcdt.printf("done"); //print -me- on LCD |
loopsva | 0:1ed24aaf786d | 668 | //} |
loopsva | 0:1ed24aaf786d | 669 | |
loopsva | 0:1ed24aaf786d | 670 | // This function is called when a character goes into the RX buffer. |
loopsva | 0:1ed24aaf786d | 671 | //void rxCallback(MODSERIAL_IRQ_INFO *q) { |
loopsva | 0:1ed24aaf786d | 672 | // led3 = !led3; |
loopsva | 0:1ed24aaf786d | 673 | // pc.putc(uart.getc()); |
loopsva | 0:1ed24aaf786d | 674 | //} |
loopsva | 0:1ed24aaf786d | 675 | |
loopsva | 0:1ed24aaf786d | 676 | // This function is called when a character goes into the RX buffer. |
loopsva | 0:1ed24aaf786d | 677 | void Rx_interrupt() { |
loopsva | 0:1ed24aaf786d | 678 | //void rxCallbackpc(MODSERIAL_IRQ_INFO *q) { |
loopsva | 0:1ed24aaf786d | 679 | inchar = pc.getc(); |
loopsva | 0:1ed24aaf786d | 680 | // led4 = !led4; |
loopsva | 0:1ed24aaf786d | 681 | if(inchar == BS) { |
loopsva | 0:1ed24aaf786d | 682 | if(!pcRxQty == 0) { |
loopsva | 0:1ed24aaf786d | 683 | pcRxData[pcRxQty] = 0; |
loopsva | 0:1ed24aaf786d | 684 | pcRxQty = pcRxQty -1; |
loopsva | 0:1ed24aaf786d | 685 | } |
loopsva | 0:1ed24aaf786d | 686 | } |
loopsva | 0:1ed24aaf786d | 687 | else if(inchar == CR) { |
loopsva | 0:1ed24aaf786d | 688 | pcRxLine = true; |
loopsva | 0:1ed24aaf786d | 689 | } |
loopsva | 0:1ed24aaf786d | 690 | else if(inchar == LF) { |
loopsva | 0:1ed24aaf786d | 691 | pcRxLine = true; |
loopsva | 0:1ed24aaf786d | 692 | } else { |
loopsva | 0:1ed24aaf786d | 693 | if(pcRxQty < sizeof(pcRxData)) { |
loopsva | 0:1ed24aaf786d | 694 | pcRxData[pcRxQty] = inchar; |
loopsva | 0:1ed24aaf786d | 695 | pcRxQty = pcRxQty++; |
loopsva | 0:1ed24aaf786d | 696 | // pc.putc(inchar); |
loopsva | 0:1ed24aaf786d | 697 | } else { |
loopsva | 0:1ed24aaf786d | 698 | // pc.printf ("pcRxData is full!!\n"); |
loopsva | 0:1ed24aaf786d | 699 | pcRxEOB = true; |
loopsva | 0:1ed24aaf786d | 700 | } |
loopsva | 0:1ed24aaf786d | 701 | } |
loopsva | 0:1ed24aaf786d | 702 | } |
loopsva | 0:1ed24aaf786d | 703 | |
loopsva | 0:1ed24aaf786d | 704 | //clear RxData buffer with all 00's |
loopsva | 0:1ed24aaf786d | 705 | void pcClrLineBuf() { |
loopsva | 0:1ed24aaf786d | 706 | pcRxQty = 0; // MODSER RX data counter/pointer |
loopsva | 0:1ed24aaf786d | 707 | for(int i = 0; i < (sizeof(pcRxData) + 1); i++) {// clear out rx buffer |
loopsva | 0:1ed24aaf786d | 708 | pcRxData[i] = 0; |
loopsva | 0:1ed24aaf786d | 709 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 710 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 711 | pcRxIsNumb = false; |
loopsva | 0:1ed24aaf786d | 712 | } |
loopsva | 0:1ed24aaf786d | 713 | } |
loopsva | 0:1ed24aaf786d | 714 | // assemble a test line. if it is a number, turn it into a double |
loopsva | 0:1ed24aaf786d | 715 | |
loopsva | 0:1ed24aaf786d | 716 | |
loopsva | 0:1ed24aaf786d | 717 | int loop = 0; |
loopsva | 0:1ed24aaf786d | 718 | void higherDecode() { |
loopsva | 0:1ed24aaf786d | 719 | double Fdata = 0.0; |
loopsva | 0:1ed24aaf786d | 720 | // unsigned int UIdata; |
loopsva | 0:1ed24aaf786d | 721 | // char Cdata; |
loopsva | 0:1ed24aaf786d | 722 | if(pcRxLine == true) { //data in rx buffer? |
loopsva | 0:1ed24aaf786d | 723 | loop = loop++; |
loopsva | 0:1ed24aaf786d | 724 | if(gDebug) pc.printf("loop: %d\n", loop); |
loopsva | 0:1ed24aaf786d | 725 | if(pcRxQty == 1) { //single alpha char? |
loopsva | 0:1ed24aaf786d | 726 | if((pcRxData[0] == 'b') || (pcRxData[0] == 'B')) { //enter Base frequency |
loopsva | 0:1ed24aaf786d | 727 | Fdata = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 728 | pc.printf("\nBASE Frequency: %.3f New: ", Fdata); |
loopsva | 0:1ed24aaf786d | 729 | Fcmd = pcRxData[0] | 0x20; |
loopsva | 0:1ed24aaf786d | 730 | // pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 731 | } |
loopsva | 0:1ed24aaf786d | 732 | else if((pcRxData[0] == 'y') || (pcRxData[0] == 'y')) { //enter IF frequency |
loopsva | 0:1ed24aaf786d | 733 | Fdata = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 734 | pc.printf("\nIF Frequency: %.3f New: ", Fdata); |
loopsva | 0:1ed24aaf786d | 735 | Fcmd = pcRxData[0] | 0x20; |
loopsva | 0:1ed24aaf786d | 736 | } |
loopsva | 0:1ed24aaf786d | 737 | else if((pcRxData[0] == 's') || (pcRxData[0] == 'S')) { //enter step frequency value |
loopsva | 0:1ed24aaf786d | 738 | pc.printf("\nStep Frequency: %.3f New: ", StepFreq); |
loopsva | 0:1ed24aaf786d | 739 | Fcmd = pcRxData[0] | 0x20; |
loopsva | 0:1ed24aaf786d | 740 | } |
loopsva | 0:1ed24aaf786d | 741 | else if((pcRxData[0] == 'r') || (pcRxData[0] == 'R')) { //enable DDS-60 |
loopsva | 0:1ed24aaf786d | 742 | pc.printf("\nREBOOTING...\n"); |
loopsva | 0:1ed24aaf786d | 743 | wait(0.1); |
loopsva | 0:1ed24aaf786d | 744 | mbed_reset(); |
loopsva | 0:1ed24aaf786d | 745 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 746 | } |
loopsva | 0:1ed24aaf786d | 747 | else if(pcRxIsNumb == false) { |
loopsva | 0:1ed24aaf786d | 748 | pc.printf("2-huh???\n"); |
loopsva | 0:1ed24aaf786d | 749 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 750 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 751 | } |
loopsva | 0:1ed24aaf786d | 752 | } |
loopsva | 0:1ed24aaf786d | 753 | } |
loopsva | 0:1ed24aaf786d | 754 | if((pcRxIsNumb == true) && (Fcmd == 'b')) { |
loopsva | 0:1ed24aaf786d | 755 | // pc.printf("here-b ?\n"); |
loopsva | 0:1ed24aaf786d | 756 | dds60.SetBaseValue(pcRxNumb); |
loopsva | 0:1ed24aaf786d | 757 | // pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 758 | Fcmd = 0; |
loopsva | 0:1ed24aaf786d | 759 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 760 | } |
loopsva | 0:1ed24aaf786d | 761 | else if((pcRxIsNumb == true) && (Fcmd == 'y')) { |
loopsva | 0:1ed24aaf786d | 762 | // pc.printf("here-y ?\n"); |
loopsva | 0:1ed24aaf786d | 763 | dds60.SetIfValue(pcRxNumb); |
loopsva | 0:1ed24aaf786d | 764 | pcRxIsNumb = false; |
loopsva | 0:1ed24aaf786d | 765 | Fcmd = 0; |
loopsva | 0:1ed24aaf786d | 766 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 767 | } |
loopsva | 0:1ed24aaf786d | 768 | else if((pcRxIsNumb == true) && (Fcmd == 's')) { |
loopsva | 0:1ed24aaf786d | 769 | // if(gDebug > 1) pc.printf("1-sF: %.3f\n", StepFreq); |
loopsva | 0:1ed24aaf786d | 770 | StepFreq = pcRxNumb; |
loopsva | 0:1ed24aaf786d | 771 | if(StepFreq >= 0.0) { |
loopsva | 0:1ed24aaf786d | 772 | // if(gDebug > 1) pc.printf("2-sF: %.3f\n", StepFreq); |
loopsva | 0:1ed24aaf786d | 773 | pcRxIsNumb = false; |
loopsva | 0:1ed24aaf786d | 774 | } else { |
loopsva | 0:1ed24aaf786d | 775 | StepFreq = OldStepFreq; |
loopsva | 0:1ed24aaf786d | 776 | pc.printf("Step neg number!!!\n"); |
loopsva | 0:1ed24aaf786d | 777 | } |
loopsva | 0:1ed24aaf786d | 778 | Fcmd = 0; |
loopsva | 0:1ed24aaf786d | 779 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 780 | } |
loopsva | 0:1ed24aaf786d | 781 | else if((pcRxIsNumb == true) && (!((Fcmd == 'b') || (Fcmd == 'y') || (Fcmd == 's')))) { |
loopsva | 0:1ed24aaf786d | 782 | Fcmd = 0; |
loopsva | 0:1ed24aaf786d | 783 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 784 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 785 | } |
loopsva | 0:1ed24aaf786d | 786 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 787 | } |
loopsva | 0:1ed24aaf786d | 788 | |
loopsva | 0:1ed24aaf786d | 789 | |
loopsva | 0:1ed24aaf786d | 790 | void pcRx() { |
loopsva | 0:1ed24aaf786d | 791 | double Fdata = 0.0; |
loopsva | 0:1ed24aaf786d | 792 | if((pcRxData[0] == ESC) || (pcRxData[0] == ticC)) { //kill? go back to main menu |
loopsva | 0:1ed24aaf786d | 793 | wait_us(100); |
loopsva | 0:1ed24aaf786d | 794 | pc.printf("\nblam!!!\n"); |
loopsva | 0:1ed24aaf786d | 795 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 796 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 797 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 798 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 799 | } |
loopsva | 0:1ed24aaf786d | 800 | else if((pcRxData[0] == 'e') || (pcRxData[0] == 'E')) { //enable DDS-60 |
loopsva | 0:1ed24aaf786d | 801 | pc.printf("\nEnabling AD9851...\n"); |
loopsva | 0:1ed24aaf786d | 802 | dds60.AD9851Enable(); |
loopsva | 0:1ed24aaf786d | 803 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 804 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 805 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 806 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 807 | } |
loopsva | 0:1ed24aaf786d | 808 | else if((pcRxData[0] == 'x') || (pcRxData[0] == 'X')) { //disable DDS-60 |
loopsva | 0:1ed24aaf786d | 809 | pc.printf("\nDisable AD9851...\n"); |
loopsva | 0:1ed24aaf786d | 810 | dds60.AD9851Disable(); |
loopsva | 0:1ed24aaf786d | 811 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 812 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 813 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 814 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 815 | } |
loopsva | 0:1ed24aaf786d | 816 | else if((pcRxData[0] == 'w') || (pcRxData[0] == 'W')) { //save values |
loopsva | 0:1ed24aaf786d | 817 | pc.printf("\nWriting current values to Flash...\n"); |
loopsva | 0:1ed24aaf786d | 818 | LclBaseFreq = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 819 | LclIfFreq = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 820 | InitIniFile(); |
loopsva | 0:1ed24aaf786d | 821 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 822 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 823 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 824 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 825 | } |
loopsva | 0:1ed24aaf786d | 826 | else if((pcRxData[0] == 'u') || (pcRxData[0] == 'U')) { //update DDS-60 |
loopsva | 0:1ed24aaf786d | 827 | ErFlag = dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 828 | if(ErFlag == true) { |
loopsva | 0:1ed24aaf786d | 829 | pc.printf("\nfrequency overflow error(1)!!\n"); |
loopsva | 0:1ed24aaf786d | 830 | } else { |
loopsva | 0:1ed24aaf786d | 831 | pc.printf("\nUpdating AD9851...\n"); |
loopsva | 0:1ed24aaf786d | 832 | LclBaseFreq = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 833 | LclIfFreq = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 834 | } |
loopsva | 0:1ed24aaf786d | 835 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 836 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 837 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 838 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 839 | } |
loopsva | 0:1ed24aaf786d | 840 | else if((pcRxData[0] == 'i') || (pcRxData[0] == 'I')) { //increment DDS-60 frequency by step value |
loopsva | 0:1ed24aaf786d | 841 | Fdata = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 842 | Fdata = Fdata + StepFreq; |
loopsva | 0:1ed24aaf786d | 843 | dds60.SetBaseValue(Fdata); |
loopsva | 0:1ed24aaf786d | 844 | ErFlag = dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 845 | if(ErFlag == true) { |
loopsva | 0:1ed24aaf786d | 846 | pc.printf("\nfrequency overflow error(2)!!\n"); |
loopsva | 0:1ed24aaf786d | 847 | } else { |
loopsva | 0:1ed24aaf786d | 848 | pc.printf("\nStepping up freq...\n"); |
loopsva | 0:1ed24aaf786d | 849 | LclBaseFreq = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 850 | LclIfFreq = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 851 | } |
loopsva | 0:1ed24aaf786d | 852 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 853 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 854 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 855 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 856 | } |
loopsva | 0:1ed24aaf786d | 857 | else if((pcRxData[0] == 'd') || (pcRxData[0] == 'D')) { //decrement DDS-60 frequency by step value |
loopsva | 0:1ed24aaf786d | 858 | Fdata = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 859 | Fdata = Fdata - StepFreq; |
loopsva | 0:1ed24aaf786d | 860 | dds60.SetBaseValue(Fdata); |
loopsva | 0:1ed24aaf786d | 861 | ErFlag = dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 862 | if(ErFlag == true) { |
loopsva | 0:1ed24aaf786d | 863 | pc.printf("\nfrequency overflow error(3)!!\n"); |
loopsva | 0:1ed24aaf786d | 864 | } else { |
loopsva | 0:1ed24aaf786d | 865 | pc.printf("\nStepping down freq...\n"); |
loopsva | 0:1ed24aaf786d | 866 | LclBaseFreq = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 867 | LclIfFreq = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 868 | } |
loopsva | 0:1ed24aaf786d | 869 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 870 | pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 871 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 872 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 873 | } |
loopsva | 0:1ed24aaf786d | 874 | else if(pcRxLine == true) { |
loopsva | 0:1ed24aaf786d | 875 | // pcRxLine = false; |
loopsva | 0:1ed24aaf786d | 876 | // pc.printf(" -CR/LF- det count:%d size:%d\n", pcRxQty, sizeof(pcRxData)); |
loopsva | 0:1ed24aaf786d | 877 | if(pcRxQty == 0) { |
loopsva | 0:1ed24aaf786d | 878 | wait_us(100); |
loopsva | 0:1ed24aaf786d | 879 | pc.printf("empty...\n"); |
loopsva | 0:1ed24aaf786d | 880 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 881 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 882 | } else { |
loopsva | 0:1ed24aaf786d | 883 | bool OneDot = false; |
loopsva | 0:1ed24aaf786d | 884 | pcRxIsNumb = true; |
loopsva | 0:1ed24aaf786d | 885 | for(int x = 0; x < pcRxQty; x++) { |
loopsva | 0:1ed24aaf786d | 886 | char p = pcRxData[x]; |
loopsva | 0:1ed24aaf786d | 887 | if(pcRxIsNumb == true) { |
loopsva | 0:1ed24aaf786d | 888 | if(!((p == DP) || ((p >= '0') && (p <= '9')) || (pcRxData[0] == '-'))) { //-not- 0-9 or DP ? |
loopsva | 0:1ed24aaf786d | 889 | pcRxIsNumb = false; |
loopsva | 0:1ed24aaf786d | 890 | } |
loopsva | 0:1ed24aaf786d | 891 | if((p == DP) && (pcRxQty == 1)) { //DP w/o numbers ? |
loopsva | 0:1ed24aaf786d | 892 | pcRxIsNumb = false; |
loopsva | 0:1ed24aaf786d | 893 | } |
loopsva | 0:1ed24aaf786d | 894 | } |
loopsva | 0:1ed24aaf786d | 895 | if((p == DP) && (OneDot == true) && (pcRxQty > 1)) { //more than one DP? |
loopsva | 0:1ed24aaf786d | 896 | pcRxIsNumb = false; |
loopsva | 0:1ed24aaf786d | 897 | } |
loopsva | 0:1ed24aaf786d | 898 | if(p == DP) { //one or more DP? |
loopsva | 0:1ed24aaf786d | 899 | OneDot = true; |
loopsva | 0:1ed24aaf786d | 900 | } |
loopsva | 0:1ed24aaf786d | 901 | // pc.printf("%c",p); |
loopsva | 0:1ed24aaf786d | 902 | } |
loopsva | 0:1ed24aaf786d | 903 | } |
loopsva | 0:1ed24aaf786d | 904 | if(pcRxIsNumb == true) { |
loopsva | 0:1ed24aaf786d | 905 | pcRxNumb = atof(pcRxData); |
loopsva | 0:1ed24aaf786d | 906 | // pc.printf("valid number: %f\n", pcRxNumb); |
loopsva | 0:1ed24aaf786d | 907 | // pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 908 | } |
loopsva | 0:1ed24aaf786d | 909 | higherDecode(); |
loopsva | 0:1ed24aaf786d | 910 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 911 | // pc.printf("\n"); |
loopsva | 0:1ed24aaf786d | 912 | } |
loopsva | 0:1ed24aaf786d | 913 | else if(pcRxEOB == true) { |
loopsva | 0:1ed24aaf786d | 914 | pcRxEOB = false; |
loopsva | 0:1ed24aaf786d | 915 | pc.printf("RxBuff max'd out!!\n"); |
loopsva | 0:1ed24aaf786d | 916 | } |
loopsva | 0:1ed24aaf786d | 917 | else if(inchar == SP) { |
loopsva | 0:1ed24aaf786d | 918 | // pc.printf(" -SP- det\n"); |
loopsva | 0:1ed24aaf786d | 919 | inchar = 0; |
loopsva | 0:1ed24aaf786d | 920 | } |
loopsva | 0:1ed24aaf786d | 921 | } |
loopsva | 0:1ed24aaf786d | 922 | |
loopsva | 0:1ed24aaf786d | 923 | /*********************************************************************************************/ |
loopsva | 0:1ed24aaf786d | 924 | int main() { |
loopsva | 0:1ed24aaf786d | 925 | pc.baud(921600); //set up USB serial speed |
loopsva | 0:1ed24aaf786d | 926 | i2c.frequency(400000); //set up i2c speed |
loopsva | 0:1ed24aaf786d | 927 | |
loopsva | 0:1ed24aaf786d | 928 | pcRxQty = 0; // MODSER RX data counter/pointer |
loopsva | 0:1ed24aaf786d | 929 | pcClrLineBuf(); // initialize pcRxData |
loopsva | 0:1ed24aaf786d | 930 | |
loopsva | 0:1ed24aaf786d | 931 | lcdt.cls(); //init the LCD |
loopsva | 0:1ed24aaf786d | 932 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 933 | lcdt.printf("DDS-60 %d", revision); //print revision on LCD |
loopsva | 0:1ed24aaf786d | 934 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 935 | lcdt.printf("K Braun"); //print -me- on LCD |
loopsva | 0:1ed24aaf786d | 936 | |
loopsva | 0:1ed24aaf786d | 937 | pc.printf("\n\n"); |
loopsva | 0:1ed24aaf786d | 938 | pc.printf("-------------------------------------------------------------------\n"); |
loopsva | 0:1ed24aaf786d | 939 | pc.printf("DDS-60 Control Routines %d K Braun\n", revision); |
loopsva | 0:1ed24aaf786d | 940 | getMbedSN(); //display mbed's serial number |
loopsva | 0:1ed24aaf786d | 941 | getMbedMAC(); //display mbed's MAC address |
loopsva | 0:1ed24aaf786d | 942 | wait(DISP_SLOW); |
loopsva | 0:1ed24aaf786d | 943 | dds60.SetM6Value('A'); |
loopsva | 0:1ed24aaf786d | 944 | |
loopsva | 0:1ed24aaf786d | 945 | // Check if we can use modify the http name of the mbed |
loopsva | 0:1ed24aaf786d | 946 | FILE *fp = fopen("/local/whoami.ini", "r"); |
loopsva | 0:1ed24aaf786d | 947 | // char *hostname = DEFAULTHOSTNAME; |
loopsva | 0:1ed24aaf786d | 948 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 949 | pc.printf(" No /local/whoami.ini file, defaulting to: %s\n",hostname); |
loopsva | 0:1ed24aaf786d | 950 | } else { |
loopsva | 0:1ed24aaf786d | 951 | char localbuf[64]; |
loopsva | 0:1ed24aaf786d | 952 | hostname = fgets(localbuf, sizeof(localbuf)-1, fp); |
loopsva | 0:1ed24aaf786d | 953 | pc.printf("Found /local/whoami.ini file. my name is: %s\n",hostname); |
loopsva | 0:1ed24aaf786d | 954 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 955 | } |
loopsva | 0:1ed24aaf786d | 956 | |
loopsva | 0:1ed24aaf786d | 957 | FILE *fpi = fopen("/local/dds60.ini", "r"); |
loopsva | 0:1ed24aaf786d | 958 | if (fpi == NULL) { |
loopsva | 0:1ed24aaf786d | 959 | InitIniFile(); |
loopsva | 0:1ed24aaf786d | 960 | pc.printf("***rebooting after file creation...."); |
loopsva | 0:1ed24aaf786d | 961 | wait(2.0); |
loopsva | 0:1ed24aaf786d | 962 | mbed_reset(); |
loopsva | 0:1ed24aaf786d | 963 | } else { |
loopsva | 0:1ed24aaf786d | 964 | pc.printf("Found /local/dds60.ini file...\n"); |
loopsva | 0:1ed24aaf786d | 965 | fclose(fpi); |
loopsva | 0:1ed24aaf786d | 966 | SNTPReadIniFile("/local/dds60.ini"); |
loopsva | 0:1ed24aaf786d | 967 | } |
loopsva | 0:1ed24aaf786d | 968 | if (gDebug) listdir(); //get local file listing |
loopsva | 0:1ed24aaf786d | 969 | // broken!!! if (gDebug) listdirSD(); //get sd file listing |
loopsva | 0:1ed24aaf786d | 970 | // |
loopsva | 0:1ed24aaf786d | 971 | //NOTE: mbed hangs if no SD card installed - need to fix!!!!!! |
loopsva | 0:1ed24aaf786d | 972 | // |
loopsva | 0:1ed24aaf786d | 973 | lcdt.cls(); //init the LCD |
loopsva | 0:1ed24aaf786d | 974 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 975 | lcdt.printf("SD Card Missing!"); //---in case SD drive hangs forever--- |
loopsva | 0:1ed24aaf786d | 976 | |
loopsva | 0:1ed24aaf786d | 977 | /*See if INDEX.HTM can be created on SD micro drive */ |
loopsva | 0:1ed24aaf786d | 978 | if (gDebug > 3) { |
loopsva | 0:1ed24aaf786d | 979 | // char *WriteTest = "This is a Test!!!"; |
loopsva | 0:1ed24aaf786d | 980 | fp = fopen("/sd/INDEX.HTM", "w+"); |
loopsva | 0:1ed24aaf786d | 981 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 982 | pc.printf("***Cannot create INDEX.HTM file\n"); |
loopsva | 0:1ed24aaf786d | 983 | } else { |
loopsva | 0:1ed24aaf786d | 984 | // char localbuf[32]; |
loopsva | 0:1ed24aaf786d | 985 | // localbuf = WriteTest; |
loopsva | 0:1ed24aaf786d | 986 | fprintf(fp, "This is a Test!!!\n"); |
loopsva | 0:1ed24aaf786d | 987 | pc.printf("Creating /sd/INDEX.HTM file\n"); |
loopsva | 0:1ed24aaf786d | 988 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 989 | } |
loopsva | 0:1ed24aaf786d | 990 | } |
loopsva | 0:1ed24aaf786d | 991 | |
loopsva | 0:1ed24aaf786d | 992 | fp = fopen("/sd/index.htm", "r"); |
loopsva | 0:1ed24aaf786d | 993 | if (fp == NULL) { |
loopsva | 0:1ed24aaf786d | 994 | use_sd = false; |
loopsva | 0:1ed24aaf786d | 995 | if (gDebug) pc.printf("***No INDEX.HTM file - using LocalFilesystem for WebServer.\r\n"); |
loopsva | 0:1ed24aaf786d | 996 | } else { |
loopsva | 0:1ed24aaf786d | 997 | use_sd = true; |
loopsva | 0:1ed24aaf786d | 998 | fclose(fp); |
loopsva | 0:1ed24aaf786d | 999 | if (gDebug) pc.printf("Found SD card with INDEX.HTM file - using SD for WebServer.\r\n"); |
loopsva | 0:1ed24aaf786d | 1000 | } |
loopsva | 0:1ed24aaf786d | 1001 | |
loopsva | 0:1ed24aaf786d | 1002 | if ((use_sd == true) && (gDebug > 3)) pc.printf(" "); // to get rid of use_sd "never used" warning |
loopsva | 0:1ed24aaf786d | 1003 | |
loopsva | 0:1ed24aaf786d | 1004 | disp_i2c(); //display all devies on I2C bus |
loopsva | 0:1ed24aaf786d | 1005 | pc.printf("gDebug level: %d\n", gDebug); |
loopsva | 0:1ed24aaf786d | 1006 | wait(DISP_SLOW); |
loopsva | 0:1ed24aaf786d | 1007 | |
loopsva | 0:1ed24aaf786d | 1008 | /* |
loopsva | 0:1ed24aaf786d | 1009 | /////////////////////////////////////////////////////////////////////////////// |
loopsva | 0:1ed24aaf786d | 1010 | // testing ad9851 routines |
loopsva | 0:1ed24aaf786d | 1011 | lcdt.cls(); //init the LCD |
loopsva | 0:1ed24aaf786d | 1012 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 1013 | lcdt.printf("Testing"); //print Testing on LCD |
loopsva | 0:1ed24aaf786d | 1014 | lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 1015 | lcdt.printf("AD9851..."); //print item on LCD |
loopsva | 0:1ed24aaf786d | 1016 | wait(DISP_SLOW); |
loopsva | 0:1ed24aaf786d | 1017 | double Fdata; |
loopsva | 0:1ed24aaf786d | 1018 | Fdata = dds60.GetBaseValue(); |
loopsva | 0:1ed24aaf786d | 1019 | pc.printf("----------\nTesting AD9851 routines\nBase Freq: %.3f\n", Fdata); |
loopsva | 0:1ed24aaf786d | 1020 | Fdata = dds60.GetIfValue(); |
loopsva | 0:1ed24aaf786d | 1021 | pc.printf("IF Freq: %.3f\n", Fdata); |
loopsva | 0:1ed24aaf786d | 1022 | unsigned int UIdata; |
loopsva | 0:1ed24aaf786d | 1023 | UIdata = dds60.GetFD32Value(); |
loopsva | 0:1ed24aaf786d | 1024 | pc.printf("32 SDO: 0x%08x\n", UIdata); |
loopsva | 0:1ed24aaf786d | 1025 | char Cdata; |
loopsva | 0:1ed24aaf786d | 1026 | Cdata = dds60.GetFortyValue(); |
loopsva | 0:1ed24aaf786d | 1027 | pc.printf("5th byte: 0x%02x\n", Cdata); |
loopsva | 0:1ed24aaf786d | 1028 | pc.printf("40 bit wd: 0x%02x%08x\n", Cdata, UIdata); |
loopsva | 0:1ed24aaf786d | 1029 | dds60.AD9851Enable(); |
loopsva | 0:1ed24aaf786d | 1030 | Cdata = dds60.GetFortyValue(); |
loopsva | 0:1ed24aaf786d | 1031 | pc.printf("5th byte: 0x%02x\n", Cdata); |
loopsva | 0:1ed24aaf786d | 1032 | dds60.AD9851Disable(); |
loopsva | 0:1ed24aaf786d | 1033 | Cdata = dds60.GetFortyValue(); |
loopsva | 0:1ed24aaf786d | 1034 | pc.printf("5th byte: 0x%02x\n", Cdata); |
loopsva | 0:1ed24aaf786d | 1035 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1036 | UIdata = dds60.GetFD32Value(); |
loopsva | 0:1ed24aaf786d | 1037 | Cdata = dds60.GetFortyValue(); |
loopsva | 0:1ed24aaf786d | 1038 | pc.printf("40 bit wd: 0x%02x%08x\n", Cdata, UIdata); |
loopsva | 0:1ed24aaf786d | 1039 | pc.printf("----------\n"); |
loopsva | 0:1ed24aaf786d | 1040 | dds60.AD9851Enable(); |
loopsva | 0:1ed24aaf786d | 1041 | bool ErFlag; |
loopsva | 0:1ed24aaf786d | 1042 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1043 | if(ErFlag == true) pc.printf(" 1 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1044 | dds60.SetBaseValue(7320000.0); |
loopsva | 0:1ed24aaf786d | 1045 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1046 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1047 | if(ErFlag == true) pc.printf(" 2 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1048 | dds60.SetIfValue(1620000.0); |
loopsva | 0:1ed24aaf786d | 1049 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1050 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1051 | if(ErFlag == true) pc.printf(" 3 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1052 | dds60.SetM6Value('0'); |
loopsva | 0:1ed24aaf786d | 1053 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1054 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1055 | if(ErFlag == true) pc.printf(" 4 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1056 | dds60.SetBaseValue(30320000.0); |
loopsva | 0:1ed24aaf786d | 1057 | ErFlag = dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1058 | if(ErFlag == true) pc.printf(" 5a error!!\n"); |
loopsva | 0:1ed24aaf786d | 1059 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1060 | if(ErFlag == true) pc.printf(" 5 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1061 | |
loopsva | 0:1ed24aaf786d | 1062 | dds60.SetM6Value('1'); |
loopsva | 0:1ed24aaf786d | 1063 | ErFlag = dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1064 | if(ErFlag == true) pc.printf(" 6a error!!\n"); |
loopsva | 0:1ed24aaf786d | 1065 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1066 | if(ErFlag == true) pc.printf(" 6 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1067 | dds60.SetBaseValue(30320000.0); |
loopsva | 0:1ed24aaf786d | 1068 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1069 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1070 | if(ErFlag == true) pc.printf(" 7 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1071 | |
loopsva | 0:1ed24aaf786d | 1072 | dds60.SetM6Value('A'); |
loopsva | 0:1ed24aaf786d | 1073 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1074 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1075 | if(ErFlag == true) pc.printf(" 8 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1076 | dds60.SetBaseValue(30320000.0); |
loopsva | 0:1ed24aaf786d | 1077 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1078 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1079 | if(ErFlag == true) pc.printf(" 9 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1080 | |
loopsva | 0:1ed24aaf786d | 1081 | dds60.SetBaseValue(180000000.0); |
loopsva | 0:1ed24aaf786d | 1082 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1083 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1084 | if(ErFlag == true) pc.printf(" 10 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1085 | |
loopsva | 0:1ed24aaf786d | 1086 | dds60.SetBaseValue(27000000.0); |
loopsva | 0:1ed24aaf786d | 1087 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1088 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1089 | if(ErFlag == true) pc.printf(" 11 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1090 | |
loopsva | 0:1ed24aaf786d | 1091 | dds60.SetBaseValue(127000000.0); |
loopsva | 0:1ed24aaf786d | 1092 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1093 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1094 | if(ErFlag == true) pc.printf(" 12 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1095 | |
loopsva | 0:1ed24aaf786d | 1096 | dds60.SetBaseValue(10000000.0); |
loopsva | 0:1ed24aaf786d | 1097 | dds60.SetIfValue(0.0); |
loopsva | 0:1ed24aaf786d | 1098 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1099 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1100 | if(ErFlag == true) pc.printf(" 13 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1101 | |
loopsva | 0:1ed24aaf786d | 1102 | dds60.SetBaseValue(123456.789); |
loopsva | 0:1ed24aaf786d | 1103 | dds60.SetIfValue(0.0); |
loopsva | 0:1ed24aaf786d | 1104 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1105 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1106 | if(ErFlag == true) pc.printf(" 14 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1107 | |
loopsva | 0:1ed24aaf786d | 1108 | dds60.SetBaseValue(29545000.0); |
loopsva | 0:1ed24aaf786d | 1109 | dds60.SetIfValue(455000.0); |
loopsva | 0:1ed24aaf786d | 1110 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1111 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1112 | if(ErFlag == true) pc.printf(" 15 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1113 | |
loopsva | 0:1ed24aaf786d | 1114 | dds60.SetBaseValue(29544999.999); |
loopsva | 0:1ed24aaf786d | 1115 | dds60.SetIfValue(455000.0); |
loopsva | 0:1ed24aaf786d | 1116 | dds60.CalcNewValue(); |
loopsva | 0:1ed24aaf786d | 1117 | ErFlag = dds60.GetErrFlagValue(); |
loopsva | 0:1ed24aaf786d | 1118 | if(ErFlag == true) pc.printf(" 16 error!!\n"); |
loopsva | 0:1ed24aaf786d | 1119 | |
loopsva | 0:1ed24aaf786d | 1120 | pc.printf("----------\n"); |
loopsva | 0:1ed24aaf786d | 1121 | */ |
loopsva | 0:1ed24aaf786d | 1122 | /////////////////////////////////////////////////////////////////////////////// |
loopsva | 0:1ed24aaf786d | 1123 | // pc.printf("----------\nTesting MOSERIAL routines\n"); |
loopsva | 0:1ed24aaf786d | 1124 | // int c = 'A'; |
loopsva | 0:1ed24aaf786d | 1125 | // lcdt.cls(); //init the LCD |
loopsva | 0:1ed24aaf786d | 1126 | // lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 1127 | // lcdt.printf("Testing"); //print Testing on LCD |
loopsva | 0:1ed24aaf786d | 1128 | // lcdt.locate(0,1); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 1129 | // lcdt.printf("MODSERIAL..."); //print item on LCD |
loopsva | 0:1ed24aaf786d | 1130 | |
loopsva | 0:1ed24aaf786d | 1131 | // Ensure the baud rate for the PC "USB" serial is much |
loopsva | 0:1ed24aaf786d | 1132 | // higher than "uart" baud rate below. |
loopsva | 0:1ed24aaf786d | 1133 | // pc.baud(PC_BAUD); |
loopsva | 0:1ed24aaf786d | 1134 | |
loopsva | 0:1ed24aaf786d | 1135 | // Use a deliberatly slow baud to fill up the TX buffer |
loopsva | 0:1ed24aaf786d | 1136 | // uart.baud(1200); |
loopsva | 0:1ed24aaf786d | 1137 | |
loopsva | 0:1ed24aaf786d | 1138 | // uart.attach(&txCallback, MODSERIAL::TxIrq); |
loopsva | 0:1ed24aaf786d | 1139 | // uart.attach(&rxCallback, MODSERIAL::RxIrq); |
loopsva | 0:1ed24aaf786d | 1140 | // uart.attach(&txEmpty, MODSERIAL::TxEmpty); |
loopsva | 0:1ed24aaf786d | 1141 | |
loopsva | 0:1ed24aaf786d | 1142 | // pc.attach(&rxCallbackpc, MODSERIAL::RxIrq); |
loopsva | 0:1ed24aaf786d | 1143 | pc.attach(&Rx_interrupt, Serial::RxIrq); |
loopsva | 0:1ed24aaf786d | 1144 | |
loopsva | 0:1ed24aaf786d | 1145 | |
loopsva | 0:1ed24aaf786d | 1146 | // led1 = 1; // Show start of sending with LED1. |
loopsva | 0:1ed24aaf786d | 1147 | |
loopsva | 0:1ed24aaf786d | 1148 | // for (int loop = 0; loop < 512; loop++) { |
loopsva | 0:1ed24aaf786d | 1149 | // uart.printf("%c", c); |
loopsva | 0:1ed24aaf786d | 1150 | // c++; |
loopsva | 0:1ed24aaf786d | 1151 | // if (c > 'Z') c = 'A'; |
loopsva | 0:1ed24aaf786d | 1152 | // } |
loopsva | 0:1ed24aaf786d | 1153 | |
loopsva | 0:1ed24aaf786d | 1154 | |
loopsva | 0:1ed24aaf786d | 1155 | // End program. Flash LED4. Notice how LED 2 and 3 continue |
loopsva | 0:1ed24aaf786d | 1156 | // to flash for a short period while the interrupt system |
loopsva | 0:1ed24aaf786d | 1157 | // continues to send the characters left in the TX buffer. |
loopsva | 0:1ed24aaf786d | 1158 | |
loopsva | 0:1ed24aaf786d | 1159 | ErFlag = dds60.CalcNewValue(); //init DDS-60 |
loopsva | 0:1ed24aaf786d | 1160 | |
loopsva | 0:1ed24aaf786d | 1161 | lcdt.cls(); //init the LCD |
loopsva | 0:1ed24aaf786d | 1162 | lcdt.locate(0,0); //column(0-15), row(0-1) |
loopsva | 0:1ed24aaf786d | 1163 | lcdt.printf("DDS-60 %d", revision); //print revision on LCD |
loopsva | 0:1ed24aaf786d | 1164 | |
loopsva | 0:1ed24aaf786d | 1165 | pcClrLineBuf(); |
loopsva | 0:1ed24aaf786d | 1166 | mainMenu(); |
loopsva | 0:1ed24aaf786d | 1167 | // int loop = 0; |
loopsva | 0:1ed24aaf786d | 1168 | Fcmd = 0; |
loopsva | 0:1ed24aaf786d | 1169 | Sequence = 0; |
loopsva | 0:1ed24aaf786d | 1170 | Tic = 0; |
loopsva | 0:1ed24aaf786d | 1171 | while (true) { |
loopsva | 0:1ed24aaf786d | 1172 | wait(0.05); |
loopsva | 0:1ed24aaf786d | 1173 | if(Led1Up == true) { |
loopsva | 0:1ed24aaf786d | 1174 | Led1Pwm = Led1Pwm + 0.005; |
loopsva | 0:1ed24aaf786d | 1175 | led1 = Led1Pwm; |
loopsva | 0:1ed24aaf786d | 1176 | if(Led1Pwm >= 0.20) { |
loopsva | 0:1ed24aaf786d | 1177 | Led1Up = false; |
loopsva | 0:1ed24aaf786d | 1178 | } |
loopsva | 0:1ed24aaf786d | 1179 | } else { |
loopsva | 0:1ed24aaf786d | 1180 | Led1Pwm = Led1Pwm - 0.005; |
loopsva | 0:1ed24aaf786d | 1181 | led1 = Led1Pwm; |
loopsva | 0:1ed24aaf786d | 1182 | if(Led1Pwm <= 0.01) { |
loopsva | 0:1ed24aaf786d | 1183 | Led1Up = true; |
loopsva | 0:1ed24aaf786d | 1184 | } |
loopsva | 0:1ed24aaf786d | 1185 | } |
loopsva | 0:1ed24aaf786d | 1186 | // led1 = !led1; |
loopsva | 0:1ed24aaf786d | 1187 | |
loopsva | 0:1ed24aaf786d | 1188 | pcRx(); |
loopsva | 0:1ed24aaf786d | 1189 | |
loopsva | 0:1ed24aaf786d | 1190 | Tic = Tic++; |
loopsva | 0:1ed24aaf786d | 1191 | if(Tic >= 40) { |
loopsva | 0:1ed24aaf786d | 1192 | Tic = 0; |
loopsva | 0:1ed24aaf786d | 1193 | UpdLCD(); //update LCD Values |
loopsva | 0:1ed24aaf786d | 1194 | Sequence = Sequence++; |
loopsva | 0:1ed24aaf786d | 1195 | if(Sequence >= 6) Sequence = 0; |
loopsva | 0:1ed24aaf786d | 1196 | } |
loopsva | 0:1ed24aaf786d | 1197 | |
loopsva | 0:1ed24aaf786d | 1198 | } |
loopsva | 0:1ed24aaf786d | 1199 | } |