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

Committer:
loopsva
Date:
Wed Apr 04 18:14:54 2012 +0000
Revision:
0:1ed24aaf786d
050511

Who changed what in which revision?

UserRevisionLine numberNew 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 }