John Garlitos / Mbed OS EVAL-CN0540-ARDZ

Dependencies:   platform_drivers LTC26X6 AD77681

Committer:
jngarlitos
Date:
Mon Dec 06 05:22:28 2021 +0000
Revision:
1:9dd7c64b4a64
Parent:
0:b9debc14d077
EVAL-CN0540-ARDZ mbed example program Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jngarlitos 1:9dd7c64b4a64 1 /******************************************************************************
jngarlitos 1:9dd7c64b4a64 2 *Copyright (c)2020 Analog Devices, Inc.
jngarlitos 1:9dd7c64b4a64 3 *
jngarlitos 1:9dd7c64b4a64 4 * Licensed under the 2020-04-27-CN0540EC License(the "License");
jngarlitos 1:9dd7c64b4a64 5 * you may not use this file except in compliance with the License.
jngarlitos 1:9dd7c64b4a64 6 *
jngarlitos 1:9dd7c64b4a64 7 ****************************************************************************/
jngarlitos 1:9dd7c64b4a64 8 #include <mbed.h>
jngarlitos 1:9dd7c64b4a64 9 #include "platform_drivers.h"
jngarlitos 1:9dd7c64b4a64 10 #include <assert.h>
jngarlitos 1:9dd7c64b4a64 11 #include "main.h"
jngarlitos 1:9dd7c64b4a64 12 #include "cn0540_app_config.h"
jngarlitos 1:9dd7c64b4a64 13 #include "platform_drivers.h"
jngarlitos 1:9dd7c64b4a64 14 #include "cn0540_init_params.h"
jngarlitos 1:9dd7c64b4a64 15
jngarlitos 1:9dd7c64b4a64 16 extern "C"{
jngarlitos 1:9dd7c64b4a64 17 #include "ad77681.h"
jngarlitos 1:9dd7c64b4a64 18 #include "cn0540_adi_fft.h"
jngarlitos 1:9dd7c64b4a64 19 #include "ltc26x6.h"
jngarlitos 1:9dd7c64b4a64 20 }
jngarlitos 1:9dd7c64b4a64 21 // Descriptor of the main device - the ADC AD7768-1
jngarlitos 1:9dd7c64b4a64 22 ad77681_dev *device_adc;
jngarlitos 1:9dd7c64b4a64 23 // Structure carying measured data, sampled by the ADC
jngarlitos 1:9dd7c64b4a64 24 adc_data measured_data;
jngarlitos 1:9dd7c64b4a64 25 // AD7768-1's status register structure, carying all the error flags
jngarlitos 1:9dd7c64b4a64 26 ad77681_status_registers *current_status;
jngarlitos 1:9dd7c64b4a64 27 // Initialize the interrupt event variable
jngarlitos 1:9dd7c64b4a64 28 volatile bool int_event= false;
jngarlitos 1:9dd7c64b4a64 29
jngarlitos 1:9dd7c64b4a64 30 // Descriptor of the DAC LTC2606
jngarlitos 1:9dd7c64b4a64 31 ltc26x6_dev *device_dac;
jngarlitos 1:9dd7c64b4a64 32
jngarlitos 1:9dd7c64b4a64 33 // Structure carying data, the FFT module works with
jngarlitos 1:9dd7c64b4a64 34 fft_entry *FFT_data;
jngarlitos 1:9dd7c64b4a64 35 // Structure carying measuremtns from the FFT module
jngarlitos 1:9dd7c64b4a64 36 fft_measurements *FFT_meas;
jngarlitos 1:9dd7c64b4a64 37
jngarlitos 1:9dd7c64b4a64 38 // Initialize the serial object with TX and RX pins
jngarlitos 1:9dd7c64b4a64 39 Serial pc(USBTX, USBRX);
Kjansen45 0:b9debc14d077 40
jngarlitos 1:9dd7c64b4a64 41 // Initialize the drdy pin as interrupt input
jngarlitos 1:9dd7c64b4a64 42 InterruptIn drdy(DRDY_PIN, PullNone);
jngarlitos 1:9dd7c64b4a64 43 // Initialize the adc_rst_pin pin as digital output
jngarlitos 1:9dd7c64b4a64 44 DigitalOut adc_reset(ADC_RST_PIN);
jngarlitos 1:9dd7c64b4a64 45 // Initialize the buffer enable control pin as digital output
jngarlitos 1:9dd7c64b4a64 46 DigitalOut buffer_en(ARD_BUF_EN_PIN);
jngarlitos 1:9dd7c64b4a64 47 // Initialize the red LED control pin as digital output
jngarlitos 1:9dd7c64b4a64 48 DigitalOut led_red(ARD_RED_LED_PIN);
jngarlitos 1:9dd7c64b4a64 49 // Initialize the blue LED pin as digital output
jngarlitos 1:9dd7c64b4a64 50 DigitalOut led_blue(ARD_BLUE_LED_PIN);
jngarlitos 1:9dd7c64b4a64 51
jngarlitos 1:9dd7c64b4a64 52 /**
jngarlitos 1:9dd7c64b4a64 53 * ADC data recteption interrupt from DRDY
jngarlitos 1:9dd7c64b4a64 54 *
jngarlitos 1:9dd7c64b4a64 55 * Data reception from the ADC using interrupt generated by the ADC's DRDY (Data Ready) pin
jngarlitos 1:9dd7c64b4a64 56 * Interrupt triggers falling edge of the active-high DRDY pulse
jngarlitos 1:9dd7c64b4a64 57 * DRDY pulse is generated by the ADC and frequency of the DRDY pulse depends on the ADC settings:
jngarlitos 1:9dd7c64b4a64 58 *
jngarlitos 1:9dd7c64b4a64 59 * DRDY frequency = MCLK / ( MCLK_DIV * FILTER_OSR )
jngarlitos 1:9dd7c64b4a64 60 */
jngarlitos 1:9dd7c64b4a64 61 void drdy_interrupt()
jngarlitos 1:9dd7c64b4a64 62 {
jngarlitos 1:9dd7c64b4a64 63 int_event = true;
jngarlitos 1:9dd7c64b4a64 64
jngarlitos 1:9dd7c64b4a64 65 if (measured_data.count == measured_data.samples) { // Desired numer of samples has been taken, set everything back
jngarlitos 1:9dd7c64b4a64 66 drdy.disable_irq(); // Disable interrupt on DRDY pin
jngarlitos 1:9dd7c64b4a64 67 measured_data.finish = true; // Desired number of samples has been taken
jngarlitos 1:9dd7c64b4a64 68 measured_data.count = 0; // Set measured data counter to 0
jngarlitos 1:9dd7c64b4a64 69 }
jngarlitos 1:9dd7c64b4a64 70 }
jngarlitos 1:9dd7c64b4a64 71 /**
jngarlitos 1:9dd7c64b4a64 72 *=================================================================================================================================
jngarlitos 1:9dd7c64b4a64 73 *
jngarlitos 1:9dd7c64b4a64 74 * ////////////////////////////////////////////////// MAIN function \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
jngarlitos 1:9dd7c64b4a64 75 *
jngarlitos 1:9dd7c64b4a64 76 *==================================================================================================================================
jngarlitos 1:9dd7c64b4a64 77 */
jngarlitos 1:9dd7c64b4a64 78 int main() {
jngarlitos 1:9dd7c64b4a64 79
jngarlitos 1:9dd7c64b4a64 80 int32_t connected = FAILURE;
jngarlitos 1:9dd7c64b4a64 81 uint32_t menu;
Kjansen45 0:b9debc14d077 82
jngarlitos 1:9dd7c64b4a64 83 sdpk1_gpio_setup(); // Setup SDP-K1 GPIOs
jngarlitos 1:9dd7c64b4a64 84 adc_hard_reset(); // Perform ADC hard reset
jngarlitos 1:9dd7c64b4a64 85 connected = ad77681_setup(&device_adc, init_params, &current_status); // SETUP and check connection
jngarlitos 1:9dd7c64b4a64 86 if(connected == FAILURE)
jngarlitos 1:9dd7c64b4a64 87 go_to_error();
jngarlitos 1:9dd7c64b4a64 88 ltc26x6_init(&device_dac, init_params_dac); // Initialize DAC
jngarlitos 1:9dd7c64b4a64 89
jngarlitos 1:9dd7c64b4a64 90 #ifdef CN0540_ADI_FFT_H_ // if the adi_fft.h is included , initialize it
jngarlitos 1:9dd7c64b4a64 91 FFT_init_params(&FFT_data, &FFT_meas); // Initialize FFT structure and allocate space
jngarlitos 1:9dd7c64b4a64 92 update_FFT_enviroment(device_adc->vref, device_adc->mclk, device_adc->sample_rate, FFT_data); // Update the Vref, Mclk, Sampling rate
jngarlitos 1:9dd7c64b4a64 93 measured_data.samples = 4096; // Initialize FFT with 4096 samples
jngarlitos 1:9dd7c64b4a64 94 FFT_init(measured_data.samples, FFT_data); // Update sample count for FFT
jngarlitos 1:9dd7c64b4a64 95 #endif // CN0540_ADI_FFT_H_ // FFT module is initializedd with 4096 samples and 7-term BH window
Kjansen45 0:b9debc14d077 96
jngarlitos 1:9dd7c64b4a64 97 print_title();
jngarlitos 1:9dd7c64b4a64 98 print_prompt();
Kjansen45 0:b9debc14d077 99
jngarlitos 1:9dd7c64b4a64 100 //============ MAIN WHILE ====================//
jngarlitos 1:9dd7c64b4a64 101 while(1)
jngarlitos 1:9dd7c64b4a64 102 {
jngarlitos 1:9dd7c64b4a64 103
jngarlitos 1:9dd7c64b4a64 104 if (pc.readable()) { // Settings menu SWITCH
jngarlitos 1:9dd7c64b4a64 105 getUserInput(&menu);
jngarlitos 1:9dd7c64b4a64 106
jngarlitos 1:9dd7c64b4a64 107 switch (menu) {
jngarlitos 1:9dd7c64b4a64 108 case 1:
jngarlitos 1:9dd7c64b4a64 109 menu_1_set_adc_powermode(); // Set ADC power mode
jngarlitos 1:9dd7c64b4a64 110 break;
jngarlitos 1:9dd7c64b4a64 111 case 2:
jngarlitos 1:9dd7c64b4a64 112 menu_2_set_adc_clock_divider(); // Set ADC clock divider
jngarlitos 1:9dd7c64b4a64 113 break;
jngarlitos 1:9dd7c64b4a64 114 case 3:
jngarlitos 1:9dd7c64b4a64 115 menu_3_set_adc_filter_type(); // Set ad7768-1 filter type
jngarlitos 1:9dd7c64b4a64 116 break;
jngarlitos 1:9dd7c64b4a64 117 case 4:
jngarlitos 1:9dd7c64b4a64 118 menu_4_adc_buffers_controll(); // Set ADC AIN & Reference buffers
jngarlitos 1:9dd7c64b4a64 119 break;
jngarlitos 1:9dd7c64b4a64 120 case 5:
jngarlitos 1:9dd7c64b4a64 121 menu_5_set_default_settings(); // Set ADC default value
jngarlitos 1:9dd7c64b4a64 122 break;
jngarlitos 1:9dd7c64b4a64 123 case 6:
jngarlitos 1:9dd7c64b4a64 124 menu_6_set_adc_vcm(); // Set ADC VCM
jngarlitos 1:9dd7c64b4a64 125 break;
jngarlitos 1:9dd7c64b4a64 126 case 7:
jngarlitos 1:9dd7c64b4a64 127 menu_7_adc_read_register(); // Read ADC register
jngarlitos 1:9dd7c64b4a64 128 break;
jngarlitos 1:9dd7c64b4a64 129 case 8:
jngarlitos 1:9dd7c64b4a64 130 menu_8_adc_cont_read_data(); // Perform continuous ADC read
jngarlitos 1:9dd7c64b4a64 131 break;
jngarlitos 1:9dd7c64b4a64 132 case 9:
jngarlitos 1:9dd7c64b4a64 133 menu_9_reset_ADC(); // Reset ADC
jngarlitos 1:9dd7c64b4a64 134 break;
jngarlitos 1:9dd7c64b4a64 135 case 10:
jngarlitos 1:9dd7c64b4a64 136 menu_10_power_down(); // ADC Wake up and sleep
jngarlitos 1:9dd7c64b4a64 137 break;
jngarlitos 1:9dd7c64b4a64 138 case 11:
jngarlitos 1:9dd7c64b4a64 139 menu_11_ADC_GPIO(); // Set ADC GPIOs
jngarlitos 1:9dd7c64b4a64 140 break;
jngarlitos 1:9dd7c64b4a64 141 case 12:
jngarlitos 1:9dd7c64b4a64 142 menu_12_read_master_status(); // Read ADC master status
jngarlitos 1:9dd7c64b4a64 143 break;
jngarlitos 1:9dd7c64b4a64 144 case 13:
jngarlitos 1:9dd7c64b4a64 145 menu_13_mclk_vref(); // Set ADC MCLK / Vref
jngarlitos 1:9dd7c64b4a64 146 break;
jngarlitos 1:9dd7c64b4a64 147 case 14:
jngarlitos 1:9dd7c64b4a64 148 menu_14_print_measured_data(); // Print continouos ADC read data
jngarlitos 1:9dd7c64b4a64 149 break;
jngarlitos 1:9dd7c64b4a64 150 case 15:
jngarlitos 1:9dd7c64b4a64 151 menu_15_set_adc_data_output_mode(); // Set ADC data output mode
jngarlitos 1:9dd7c64b4a64 152 break;
jngarlitos 1:9dd7c64b4a64 153 case 16:
jngarlitos 1:9dd7c64b4a64 154 menu_16_set_adc_diagnostic_mode(); // Set ADC to diagnostic mode
jngarlitos 1:9dd7c64b4a64 155 break;
jngarlitos 1:9dd7c64b4a64 156 case 17:
jngarlitos 1:9dd7c64b4a64 157 menu_17_do_the_fft(); // Perform FFT
jngarlitos 1:9dd7c64b4a64 158 break;
jngarlitos 1:9dd7c64b4a64 159 case 18:
jngarlitos 1:9dd7c64b4a64 160 menu_18_fft_settings(); // Change FFT settins
jngarlitos 1:9dd7c64b4a64 161 break;
jngarlitos 1:9dd7c64b4a64 162 case 19:
jngarlitos 1:9dd7c64b4a64 163 menu_19_gains_offsets(); // Set ADC gain and offset
jngarlitos 1:9dd7c64b4a64 164 break;
jngarlitos 1:9dd7c64b4a64 165 case 20:
jngarlitos 1:9dd7c64b4a64 166 menu_20_check_scratchpad(); // Perform scratchpad check
jngarlitos 1:9dd7c64b4a64 167 break;
jngarlitos 1:9dd7c64b4a64 168 case 21:
jngarlitos 1:9dd7c64b4a64 169 menu_21_piezo_offset(); // Compensate piezo offset
jngarlitos 1:9dd7c64b4a64 170 break;
jngarlitos 1:9dd7c64b4a64 171 case 22:
jngarlitos 1:9dd7c64b4a64 172 menu_22_set_DAC_output(); // Set DAC output mode
jngarlitos 1:9dd7c64b4a64 173 break;
jngarlitos 1:9dd7c64b4a64 174 default:
jngarlitos 1:9dd7c64b4a64 175 pc.printf("Invalid option");
jngarlitos 1:9dd7c64b4a64 176 print_prompt();
jngarlitos 1:9dd7c64b4a64 177 break;
jngarlitos 1:9dd7c64b4a64 178 }
jngarlitos 1:9dd7c64b4a64 179 }
jngarlitos 1:9dd7c64b4a64 180 }
Kjansen45 0:b9debc14d077 181 }
Kjansen45 0:b9debc14d077 182
jngarlitos 1:9dd7c64b4a64 183 /**
jngarlitos 1:9dd7c64b4a64 184 * Error warning, in case of unsuccessfull SPI connection
jngarlitos 1:9dd7c64b4a64 185 *
jngarlitos 1:9dd7c64b4a64 186 */
jngarlitos 1:9dd7c64b4a64 187 void static go_to_error()
Kjansen45 0:b9debc14d077 188 {
jngarlitos 1:9dd7c64b4a64 189 int32_t connected = FAILURE;
jngarlitos 1:9dd7c64b4a64 190 uint8_t scratchpad_sequence = 0xAD;
Kjansen45 0:b9debc14d077 191 while (1) {
jngarlitos 1:9dd7c64b4a64 192 pc.printf("ERROR: NOT CONNECTED\nCHECK YOUR PHYSICAL CONNECTION\n\n"); // When not connected, keep showing error message
jngarlitos 1:9dd7c64b4a64 193 wait(5);
jngarlitos 1:9dd7c64b4a64 194 connected = ad77681_setup(&device_adc, init_params, &current_status); // Keep trying to connect
jngarlitos 1:9dd7c64b4a64 195 if (connected == SUCCESS) {
jngarlitos 1:9dd7c64b4a64 196 pc.printf("SUCCESSFULLY RECONNECTED\n\n"); // If successfull reading from scratchpad, init the ADC and go back
jngarlitos 1:9dd7c64b4a64 197 break;
jngarlitos 1:9dd7c64b4a64 198 }
Kjansen45 0:b9debc14d077 199 }
Kjansen45 0:b9debc14d077 200 }
Kjansen45 0:b9debc14d077 201
jngarlitos 1:9dd7c64b4a64 202 /**
jngarlitos 1:9dd7c64b4a64 203 * Print title
jngarlitos 1:9dd7c64b4a64 204 *
jngarlitos 1:9dd7c64b4a64 205 */
jngarlitos 1:9dd7c64b4a64 206 void static print_title() {
jngarlitos 1:9dd7c64b4a64 207 pc.printf("\n\r");
jngarlitos 1:9dd7c64b4a64 208 pc.printf("****************************************************************\n");
jngarlitos 1:9dd7c64b4a64 209 pc.printf("* EVAL-CN0540-PMDZ Demonstration Program -- (mbed) *\n");
jngarlitos 1:9dd7c64b4a64 210 pc.printf("* *\n");
jngarlitos 1:9dd7c64b4a64 211 pc.printf("* This program demonstrates IEPE / ICP piezo accelerometer *\n");
jngarlitos 1:9dd7c64b4a64 212 pc.printf("* interfacing and FFT measurements using AD7768-1 *\n");
jngarlitos 1:9dd7c64b4a64 213 pc.printf("* Precision 24-bit sigma-delta AD converter *\n");
jngarlitos 1:9dd7c64b4a64 214 pc.printf("* *\n");
jngarlitos 1:9dd7c64b4a64 215 pc.printf("* Set the baud rate to 115200 select the newline terminator. *\n");
jngarlitos 1:9dd7c64b4a64 216 pc.printf("****************************************************************\n");
jngarlitos 1:9dd7c64b4a64 217 }
jngarlitos 1:9dd7c64b4a64 218
jngarlitos 1:9dd7c64b4a64 219 /**
jngarlitos 1:9dd7c64b4a64 220 * Print main menu to console
jngarlitos 1:9dd7c64b4a64 221 *
jngarlitos 1:9dd7c64b4a64 222 */
jngarlitos 1:9dd7c64b4a64 223 void static print_prompt() {
jngarlitos 1:9dd7c64b4a64 224 pc.printf("\n\nCommand Summary:\n\n");
jngarlitos 1:9dd7c64b4a64 225 pc.printf(" 1 - Set ADC power mode\n");
jngarlitos 1:9dd7c64b4a64 226 pc.printf(" 2 - Set ADC MCLK divider\n");
jngarlitos 1:9dd7c64b4a64 227 pc.printf(" 3 - Set ADC filter type\n");
jngarlitos 1:9dd7c64b4a64 228 pc.printf(" 4 - Set ADC AIN and REF buffers\n");
jngarlitos 1:9dd7c64b4a64 229 pc.printf(" 5 - Set ADC to default config\n");
jngarlitos 1:9dd7c64b4a64 230 pc.printf(" 6 - Set ADC VCM output\n");
jngarlitos 1:9dd7c64b4a64 231 pc.printf(" 7 - Read desired ADC register\n");
jngarlitos 1:9dd7c64b4a64 232 pc.printf(" 8 - Read continuous ADC data\n");
jngarlitos 1:9dd7c64b4a64 233 pc.printf(" 9 - Reset ADC\n");
jngarlitos 1:9dd7c64b4a64 234 pc.printf(" 10 - ADC Power-down\n");
jngarlitos 1:9dd7c64b4a64 235 pc.printf(" 11 - Set ADC GPIOs\n");
jngarlitos 1:9dd7c64b4a64 236 pc.printf(" 12 - Read ADC master status\n");
jngarlitos 1:9dd7c64b4a64 237 pc.printf(" 13 - Set ADC Vref and MCLK\n");
jngarlitos 1:9dd7c64b4a64 238 pc.printf(" 14 - Print ADC measured data\n");
jngarlitos 1:9dd7c64b4a64 239 pc.printf(" 15 - Set ADC data output mode\n");
jngarlitos 1:9dd7c64b4a64 240 pc.printf(" 16 - Set ADC diagnostic mode\n");
jngarlitos 1:9dd7c64b4a64 241 pc.printf(" 17 - Do the FFT\n");
jngarlitos 1:9dd7c64b4a64 242 pc.printf(" 18 - FFT settings\n");
jngarlitos 1:9dd7c64b4a64 243 pc.printf(" 19 - Set ADC Gains, Offsets\n");
jngarlitos 1:9dd7c64b4a64 244 pc.printf(" 20 - ADC Scratchpad Check\n");
jngarlitos 1:9dd7c64b4a64 245 pc.printf(" 21 - Compenzate Piezo sensor offset\n");
jngarlitos 1:9dd7c64b4a64 246 pc.printf(" 22 - Set DAC output\n");
jngarlitos 1:9dd7c64b4a64 247 pc.printf("\n\r");
jngarlitos 1:9dd7c64b4a64 248 }
jngarlitos 1:9dd7c64b4a64 249
jngarlitos 1:9dd7c64b4a64 250 /**
jngarlitos 1:9dd7c64b4a64 251 * Read user input from uart
jngarlitos 1:9dd7c64b4a64 252 * *UserInput = 0 if failure
jngarlitos 1:9dd7c64b4a64 253 *
jngarlitos 1:9dd7c64b4a64 254 */
jngarlitos 1:9dd7c64b4a64 255 int32_t static getUserInput(uint32_t *UserInput)
jngarlitos 1:9dd7c64b4a64 256 {
jngarlitos 1:9dd7c64b4a64 257 long uart_val;
jngarlitos 1:9dd7c64b4a64 258 int32_t ret;
jngarlitos 1:9dd7c64b4a64 259
jngarlitos 1:9dd7c64b4a64 260 ret = pc.scanf("%ld", &uart_val); // Return 1 = OK, Return 0 = Fail
jngarlitos 1:9dd7c64b4a64 261
jngarlitos 1:9dd7c64b4a64 262 if((ret == 0) || (uart_val < 0)) { // Failure if uart_val is negative, or non-digit
jngarlitos 1:9dd7c64b4a64 263 *UserInput = 0;
jngarlitos 1:9dd7c64b4a64 264 return FAILURE;
jngarlitos 1:9dd7c64b4a64 265 }
jngarlitos 1:9dd7c64b4a64 266 *UserInput = (uint32_t)(uart_val);
jngarlitos 1:9dd7c64b4a64 267 return SUCCESS;
jngarlitos 1:9dd7c64b4a64 268 }
jngarlitos 1:9dd7c64b4a64 269
jngarlitos 1:9dd7c64b4a64 270 /**
jngarlitos 1:9dd7c64b4a64 271 * Set power mode
jngarlitos 1:9dd7c64b4a64 272 *
jngarlitos 1:9dd7c64b4a64 273 */
jngarlitos 1:9dd7c64b4a64 274 void static menu_1_set_adc_powermode(void)
jngarlitos 1:9dd7c64b4a64 275 {
jngarlitos 1:9dd7c64b4a64 276 uint32_t new_pwr_mode;
jngarlitos 1:9dd7c64b4a64 277
jngarlitos 1:9dd7c64b4a64 278 pc.printf(" Avaliable power modes: \n");
jngarlitos 1:9dd7c64b4a64 279 pc.printf(" 1 - Low power mode\n");
jngarlitos 1:9dd7c64b4a64 280 pc.printf(" 2 - Median power mode\n");
jngarlitos 1:9dd7c64b4a64 281 pc.printf(" 3 - Fast power mode\n");
jngarlitos 1:9dd7c64b4a64 282 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 283
jngarlitos 1:9dd7c64b4a64 284 getUserInput(&new_pwr_mode);
jngarlitos 1:9dd7c64b4a64 285 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 286
jngarlitos 1:9dd7c64b4a64 287 switch (new_pwr_mode) {
jngarlitos 1:9dd7c64b4a64 288 case 1:
jngarlitos 1:9dd7c64b4a64 289 ad77681_set_power_mode(device_adc, AD77681_ECO);
jngarlitos 1:9dd7c64b4a64 290 pc.printf(" Low power mode selected\n");
jngarlitos 1:9dd7c64b4a64 291 break;
jngarlitos 1:9dd7c64b4a64 292 case 2:
jngarlitos 1:9dd7c64b4a64 293 ad77681_set_power_mode(device_adc, AD77681_MEDIAN);
jngarlitos 1:9dd7c64b4a64 294 pc.printf(" Median power mode selected\n");
jngarlitos 1:9dd7c64b4a64 295 break;
jngarlitos 1:9dd7c64b4a64 296 case 3:
jngarlitos 1:9dd7c64b4a64 297 ad77681_set_power_mode(device_adc, AD77681_FAST);
jngarlitos 1:9dd7c64b4a64 298 pc.printf(" Fast power mode selected\n");
jngarlitos 1:9dd7c64b4a64 299 break;
jngarlitos 1:9dd7c64b4a64 300 default:
jngarlitos 1:9dd7c64b4a64 301 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 302 break;
jngarlitos 1:9dd7c64b4a64 303 }
jngarlitos 1:9dd7c64b4a64 304 print_prompt();
jngarlitos 1:9dd7c64b4a64 305 }
jngarlitos 1:9dd7c64b4a64 306
jngarlitos 1:9dd7c64b4a64 307 /**
jngarlitos 1:9dd7c64b4a64 308 * Set clock divider
jngarlitos 1:9dd7c64b4a64 309 *
jngarlitos 1:9dd7c64b4a64 310 */
jngarlitos 1:9dd7c64b4a64 311 void static menu_2_set_adc_clock_divider(void)
jngarlitos 1:9dd7c64b4a64 312 {
jngarlitos 1:9dd7c64b4a64 313 uint32_t new_mclk_div;
jngarlitos 1:9dd7c64b4a64 314
jngarlitos 1:9dd7c64b4a64 315 pc.printf(" Avaliable MCLK divide options: \n");
jngarlitos 1:9dd7c64b4a64 316 pc.printf(" 1 - MCLK/16\n");
jngarlitos 1:9dd7c64b4a64 317 pc.printf(" 2 - MCLK/8\n");
jngarlitos 1:9dd7c64b4a64 318 pc.printf(" 3 - MCLK/4\n");
jngarlitos 1:9dd7c64b4a64 319 pc.printf(" 4 - MCLK/2\n");
jngarlitos 1:9dd7c64b4a64 320 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 321
jngarlitos 1:9dd7c64b4a64 322 getUserInput(&new_mclk_div);
jngarlitos 1:9dd7c64b4a64 323 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 324
jngarlitos 1:9dd7c64b4a64 325 switch (new_mclk_div) {
jngarlitos 1:9dd7c64b4a64 326 case 1:
jngarlitos 1:9dd7c64b4a64 327 ad77681_set_mclk_div(device_adc, AD77681_MCLK_DIV_16);
jngarlitos 1:9dd7c64b4a64 328 pc.printf(" MCLK/16 selected\n");
jngarlitos 1:9dd7c64b4a64 329 break;
jngarlitos 1:9dd7c64b4a64 330 case 2:
jngarlitos 1:9dd7c64b4a64 331 ad77681_set_mclk_div(device_adc, AD77681_MCLK_DIV_8);
jngarlitos 1:9dd7c64b4a64 332 pc.printf(" MCLK/8 selected\n");
jngarlitos 1:9dd7c64b4a64 333 break;
jngarlitos 1:9dd7c64b4a64 334 case 3:
jngarlitos 1:9dd7c64b4a64 335 ad77681_set_mclk_div(device_adc, AD77681_MCLK_DIV_4);
jngarlitos 1:9dd7c64b4a64 336 pc.printf(" MCLK/4 selected\n");
jngarlitos 1:9dd7c64b4a64 337 break;
jngarlitos 1:9dd7c64b4a64 338 case 4:
jngarlitos 1:9dd7c64b4a64 339 ad77681_set_mclk_div(device_adc, AD77681_MCLK_DIV_2);
jngarlitos 1:9dd7c64b4a64 340 pc.printf(" MCLK/2 selected\n");
jngarlitos 1:9dd7c64b4a64 341 break;
jngarlitos 1:9dd7c64b4a64 342 default:
jngarlitos 1:9dd7c64b4a64 343 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 344 break;
jngarlitos 1:9dd7c64b4a64 345 }
jngarlitos 1:9dd7c64b4a64 346 // Update the sample rate after changing the MCLK divider
jngarlitos 1:9dd7c64b4a64 347 ad77681_update_sample_rate(device_adc);
jngarlitos 1:9dd7c64b4a64 348 print_prompt();
jngarlitos 1:9dd7c64b4a64 349 }
jngarlitos 1:9dd7c64b4a64 350
jngarlitos 1:9dd7c64b4a64 351 /**
jngarlitos 1:9dd7c64b4a64 352 * Set filter type
jngarlitos 1:9dd7c64b4a64 353 *
jngarlitos 1:9dd7c64b4a64 354 */
jngarlitos 1:9dd7c64b4a64 355 void static menu_3_set_adc_filter_type(void)
jngarlitos 1:9dd7c64b4a64 356 {
jngarlitos 1:9dd7c64b4a64 357 uint32_t new_filter = 0;
jngarlitos 1:9dd7c64b4a64 358 int32_t ret;
jngarlitos 1:9dd7c64b4a64 359
jngarlitos 1:9dd7c64b4a64 360 pc.printf(" Avaliable clock divide options: \n");
jngarlitos 1:9dd7c64b4a64 361 pc.printf(" 1 - SINC3 Fileter\n");
jngarlitos 1:9dd7c64b4a64 362 pc.printf(" 2 - SINC5 Filter\n");
jngarlitos 1:9dd7c64b4a64 363 pc.printf(" 3 - Low ripple FIR Filter\n");
jngarlitos 1:9dd7c64b4a64 364 pc.printf(" 4 - SINC3 50/60Hz rejection\n");
jngarlitos 1:9dd7c64b4a64 365 pc.printf(" 5 - User-defined FIR filter\n");
jngarlitos 1:9dd7c64b4a64 366 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 367
jngarlitos 1:9dd7c64b4a64 368 getUserInput(&new_filter);
jngarlitos 1:9dd7c64b4a64 369 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 370
jngarlitos 1:9dd7c64b4a64 371 switch (new_filter) {
jngarlitos 1:9dd7c64b4a64 372 case 1:
jngarlitos 1:9dd7c64b4a64 373 set_adc_SINC3_filter();
jngarlitos 1:9dd7c64b4a64 374 break;
jngarlitos 1:9dd7c64b4a64 375 case 2:
jngarlitos 1:9dd7c64b4a64 376 set_adc_SINC5_filter();
jngarlitos 1:9dd7c64b4a64 377 break;
jngarlitos 1:9dd7c64b4a64 378 case 3:
jngarlitos 1:9dd7c64b4a64 379 set_adc_FIR_filter();
jngarlitos 1:9dd7c64b4a64 380 break;
jngarlitos 1:9dd7c64b4a64 381 case 4:
jngarlitos 1:9dd7c64b4a64 382 set_adc_50HZ_rej();
jngarlitos 1:9dd7c64b4a64 383 break;
jngarlitos 1:9dd7c64b4a64 384 case 5:
jngarlitos 1:9dd7c64b4a64 385 set_adc_user_defined_FIR();
jngarlitos 1:9dd7c64b4a64 386 break;
jngarlitos 1:9dd7c64b4a64 387 default:
jngarlitos 1:9dd7c64b4a64 388 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 389 break;
jngarlitos 1:9dd7c64b4a64 390 }
jngarlitos 1:9dd7c64b4a64 391 // Update the sample rate after changing the Filter type
jngarlitos 1:9dd7c64b4a64 392 ad77681_update_sample_rate(device_adc);
jngarlitos 1:9dd7c64b4a64 393 print_prompt();
jngarlitos 1:9dd7c64b4a64 394 }
jngarlitos 1:9dd7c64b4a64 395
jngarlitos 1:9dd7c64b4a64 396 /**
jngarlitos 1:9dd7c64b4a64 397 * Set SINC3 filter
jngarlitos 1:9dd7c64b4a64 398 *
jngarlitos 1:9dd7c64b4a64 399 */
jngarlitos 1:9dd7c64b4a64 400 void static set_adc_SINC3_filter(void)
jngarlitos 1:9dd7c64b4a64 401 {
jngarlitos 1:9dd7c64b4a64 402 uint32_t new_sinc3 = 0, new_sinc5 = 0;
jngarlitos 1:9dd7c64b4a64 403 int32_t ret;
jngarlitos 1:9dd7c64b4a64 404
jngarlitos 1:9dd7c64b4a64 405 pc.printf(" SINC3 filter Oversampling ratios: \n");
jngarlitos 1:9dd7c64b4a64 406 pc.printf(" OSR is calculated as (x + 1)*32\n");
jngarlitos 1:9dd7c64b4a64 407 pc.printf(" x is SINC3 OSR register value\n");
jngarlitos 1:9dd7c64b4a64 408 pc.printf(" Please input a value from 0 to 8192 = 2^13\n :");
jngarlitos 1:9dd7c64b4a64 409
jngarlitos 1:9dd7c64b4a64 410 ret = getUserInput(&new_sinc3);
jngarlitos 1:9dd7c64b4a64 411
jngarlitos 1:9dd7c64b4a64 412 if ((new_sinc3 >= 0) && (new_sinc3 <= 8192) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 413 pc.printf("%d\n", new_sinc3);
jngarlitos 1:9dd7c64b4a64 414 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_SINC3, new_sinc3);
jngarlitos 1:9dd7c64b4a64 415 pc.printf(" SINC3 OSR is set to %d\n", (new_sinc3 + 1) * 32);
jngarlitos 1:9dd7c64b4a64 416 } else {
jngarlitos 1:9dd7c64b4a64 417 pc.printf("%d\n", new_sinc3);
jngarlitos 1:9dd7c64b4a64 418 pc.printf(" Invalid option - too large number\n");
jngarlitos 1:9dd7c64b4a64 419 }
jngarlitos 1:9dd7c64b4a64 420 }
jngarlitos 1:9dd7c64b4a64 421
jngarlitos 1:9dd7c64b4a64 422 /**
jngarlitos 1:9dd7c64b4a64 423 * Set SINC5 filter
jngarlitos 1:9dd7c64b4a64 424 *
jngarlitos 1:9dd7c64b4a64 425 */
jngarlitos 1:9dd7c64b4a64 426 void static set_adc_SINC5_filter(void)
jngarlitos 1:9dd7c64b4a64 427 {
jngarlitos 1:9dd7c64b4a64 428 uint32_t new_sinc5;
jngarlitos 1:9dd7c64b4a64 429
jngarlitos 1:9dd7c64b4a64 430 pc.printf(" SINC5 filter Oversampling ratios: \n");
jngarlitos 1:9dd7c64b4a64 431 pc.printf(" 1 - Oversampled by 8\n");
jngarlitos 1:9dd7c64b4a64 432 pc.printf(" 2 - Oversampled by 16\n");
jngarlitos 1:9dd7c64b4a64 433 pc.printf(" 3 - Oversampled by 32\n");
jngarlitos 1:9dd7c64b4a64 434 pc.printf(" 4 - Oversampled by 64\n");
jngarlitos 1:9dd7c64b4a64 435 pc.printf(" 5 - Oversampled by 128\n");
jngarlitos 1:9dd7c64b4a64 436 pc.printf(" 6 - Oversampled by 256\n");
jngarlitos 1:9dd7c64b4a64 437 pc.printf(" 7 - Oversampled by 512\n");
jngarlitos 1:9dd7c64b4a64 438 pc.printf(" 8 - Oversampled by 1024\n");
jngarlitos 1:9dd7c64b4a64 439 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 440
jngarlitos 1:9dd7c64b4a64 441 getUserInput(&new_sinc5);
jngarlitos 1:9dd7c64b4a64 442
jngarlitos 1:9dd7c64b4a64 443 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 444
jngarlitos 1:9dd7c64b4a64 445 switch (new_sinc5) {
jngarlitos 1:9dd7c64b4a64 446 case 1:
jngarlitos 1:9dd7c64b4a64 447 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_SINC5_DECx8, 0);
jngarlitos 1:9dd7c64b4a64 448 pc.printf(" SINC5 with OSRx8 set\n");
jngarlitos 1:9dd7c64b4a64 449 break;
jngarlitos 1:9dd7c64b4a64 450 case 2:
jngarlitos 1:9dd7c64b4a64 451 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_SINC5_DECx16, 0);
jngarlitos 1:9dd7c64b4a64 452 pc.printf(" SINC5 with OSRx16 set\n");
jngarlitos 1:9dd7c64b4a64 453 break;
jngarlitos 1:9dd7c64b4a64 454 case 3:
jngarlitos 1:9dd7c64b4a64 455 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_SINC5, 0);
jngarlitos 1:9dd7c64b4a64 456 pc.printf(" SINC5 with OSRx32 set\n");
jngarlitos 1:9dd7c64b4a64 457 break;
jngarlitos 1:9dd7c64b4a64 458 case 4:
jngarlitos 1:9dd7c64b4a64 459 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx64, AD77681_SINC5, 0);
jngarlitos 1:9dd7c64b4a64 460 pc.printf(" SINC5 with OSRx64 set\n");
jngarlitos 1:9dd7c64b4a64 461 break;
jngarlitos 1:9dd7c64b4a64 462 case 5:
jngarlitos 1:9dd7c64b4a64 463 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx128, AD77681_SINC5, 0);
jngarlitos 1:9dd7c64b4a64 464 pc.printf(" SINC5 with OSRx128 set\n");
jngarlitos 1:9dd7c64b4a64 465 break;
jngarlitos 1:9dd7c64b4a64 466 case 6:
jngarlitos 1:9dd7c64b4a64 467 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx256, AD77681_SINC5, 0);
jngarlitos 1:9dd7c64b4a64 468 pc.printf(" SINC5 with OSRx256 set\n");
jngarlitos 1:9dd7c64b4a64 469 break;
jngarlitos 1:9dd7c64b4a64 470 case 7:
jngarlitos 1:9dd7c64b4a64 471 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx512, AD77681_SINC5, 0);
jngarlitos 1:9dd7c64b4a64 472 pc.printf(" SINC5 with OSRx512 set\n");
jngarlitos 1:9dd7c64b4a64 473 break;
jngarlitos 1:9dd7c64b4a64 474 case 8:
jngarlitos 1:9dd7c64b4a64 475 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx1024, AD77681_SINC5, 0);
jngarlitos 1:9dd7c64b4a64 476 pc.printf(" SINC5 with OSRx1024 set\n");
jngarlitos 1:9dd7c64b4a64 477 break;
jngarlitos 1:9dd7c64b4a64 478 default:
jngarlitos 1:9dd7c64b4a64 479 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 480 break;
jngarlitos 1:9dd7c64b4a64 481 }
jngarlitos 1:9dd7c64b4a64 482 }
jngarlitos 1:9dd7c64b4a64 483
jngarlitos 1:9dd7c64b4a64 484 /**
jngarlitos 1:9dd7c64b4a64 485 * Set FIR filter
jngarlitos 1:9dd7c64b4a64 486 *
jngarlitos 1:9dd7c64b4a64 487 */
jngarlitos 1:9dd7c64b4a64 488 void static set_adc_FIR_filter(void)
jngarlitos 1:9dd7c64b4a64 489 {
jngarlitos 1:9dd7c64b4a64 490 uint32_t new_fir;
jngarlitos 1:9dd7c64b4a64 491
jngarlitos 1:9dd7c64b4a64 492 pc.printf(" FIR filter Oversampling ratios: \n");
jngarlitos 1:9dd7c64b4a64 493 pc.printf(" 1 - Oversampled by 32\n");
jngarlitos 1:9dd7c64b4a64 494 pc.printf(" 2 - Oversampled by 64\n");
jngarlitos 1:9dd7c64b4a64 495 pc.printf(" 3 - Oversampled by 128\n");
jngarlitos 1:9dd7c64b4a64 496 pc.printf(" 4 - Oversampled by 256\n");
jngarlitos 1:9dd7c64b4a64 497 pc.printf(" 5 - Oversampled by 512\n");
jngarlitos 1:9dd7c64b4a64 498 pc.printf(" 6 - Oversampled by 1024\n");
jngarlitos 1:9dd7c64b4a64 499 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 500
jngarlitos 1:9dd7c64b4a64 501 getUserInput(&new_fir);
jngarlitos 1:9dd7c64b4a64 502
jngarlitos 1:9dd7c64b4a64 503 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 504
jngarlitos 1:9dd7c64b4a64 505 switch (new_fir) {
jngarlitos 1:9dd7c64b4a64 506 case 1:
jngarlitos 1:9dd7c64b4a64 507 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 508 pc.printf(" FIR with OSRx32 set\n");
jngarlitos 1:9dd7c64b4a64 509 break;
jngarlitos 1:9dd7c64b4a64 510 case 2:
jngarlitos 1:9dd7c64b4a64 511 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx64, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 512 pc.printf(" FIR with OSRx64 set\n");
jngarlitos 1:9dd7c64b4a64 513 break;
jngarlitos 1:9dd7c64b4a64 514 case 3:
jngarlitos 1:9dd7c64b4a64 515 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx128, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 516 pc.printf(" FIR with OSRx128 set\n");
jngarlitos 1:9dd7c64b4a64 517 break;
jngarlitos 1:9dd7c64b4a64 518 case 4:
jngarlitos 1:9dd7c64b4a64 519 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx256, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 520 pc.printf(" FIR with OSRx256 set\n");
jngarlitos 1:9dd7c64b4a64 521 break;
jngarlitos 1:9dd7c64b4a64 522 case 5:
jngarlitos 1:9dd7c64b4a64 523 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx512, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 524 pc.printf(" FIR with OSRx512 set\n");
jngarlitos 1:9dd7c64b4a64 525 break;
jngarlitos 1:9dd7c64b4a64 526 case 6:
jngarlitos 1:9dd7c64b4a64 527 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx1024, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 528 pc.printf(" FIR with OSRx1024 set\n");
jngarlitos 1:9dd7c64b4a64 529 break;
jngarlitos 1:9dd7c64b4a64 530 default:
jngarlitos 1:9dd7c64b4a64 531 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 532 break;
jngarlitos 1:9dd7c64b4a64 533 }
jngarlitos 1:9dd7c64b4a64 534 }
jngarlitos 1:9dd7c64b4a64 535
jngarlitos 1:9dd7c64b4a64 536 /**
jngarlitos 1:9dd7c64b4a64 537 * Set 50HZ rejection bit when SINC3 is being used
jngarlitos 1:9dd7c64b4a64 538 *
jngarlitos 1:9dd7c64b4a64 539 */
jngarlitos 1:9dd7c64b4a64 540 void static set_adc_50HZ_rej(void)
jngarlitos 1:9dd7c64b4a64 541 {
jngarlitos 1:9dd7c64b4a64 542 uint32_t new_50Hz;
jngarlitos 1:9dd7c64b4a64 543
jngarlitos 1:9dd7c64b4a64 544 pc.printf(" SINC3 50/60Hz rejection: \n");
jngarlitos 1:9dd7c64b4a64 545 pc.printf(" 1 - 50/60Hz rejection enable \n");
jngarlitos 1:9dd7c64b4a64 546 pc.printf(" 2 - 50/60Hz rejection disable \n");
jngarlitos 1:9dd7c64b4a64 547 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 548
jngarlitos 1:9dd7c64b4a64 549 getUserInput(&new_50Hz);
jngarlitos 1:9dd7c64b4a64 550
jngarlitos 1:9dd7c64b4a64 551 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 552
jngarlitos 1:9dd7c64b4a64 553 switch (new_50Hz)
jngarlitos 1:9dd7c64b4a64 554 {
jngarlitos 1:9dd7c64b4a64 555 case 1:
jngarlitos 1:9dd7c64b4a64 556 ad77681_set_50HZ_rejection(device_adc, ENABLE);
jngarlitos 1:9dd7c64b4a64 557 pc.printf(" SINC3 50/60Hz rejection enabled\n");
jngarlitos 1:9dd7c64b4a64 558 break;
jngarlitos 1:9dd7c64b4a64 559 case 2:
jngarlitos 1:9dd7c64b4a64 560 ad77681_set_50HZ_rejection(device_adc, DISABLE);
jngarlitos 1:9dd7c64b4a64 561 pc.printf(" SINC3 50/60Hz rejection disabled\n");
jngarlitos 1:9dd7c64b4a64 562 break;
jngarlitos 1:9dd7c64b4a64 563 default:
jngarlitos 1:9dd7c64b4a64 564 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 565 break;
jngarlitos 1:9dd7c64b4a64 566 }
jngarlitos 1:9dd7c64b4a64 567 }
jngarlitos 1:9dd7c64b4a64 568
jngarlitos 1:9dd7c64b4a64 569 /**
jngarlitos 1:9dd7c64b4a64 570 * Insert user-defined FIR filter coeffs
jngarlitos 1:9dd7c64b4a64 571 *
jngarlitos 1:9dd7c64b4a64 572 */
jngarlitos 1:9dd7c64b4a64 573 void static set_adc_user_defined_FIR(void)
jngarlitos 1:9dd7c64b4a64 574 {
jngarlitos 1:9dd7c64b4a64 575 const uint8_t coeff_reg_length = 56; // Maximum allowed number of coefficients in the coeff register
jngarlitos 1:9dd7c64b4a64 576
jngarlitos 1:9dd7c64b4a64 577 pc.printf(" User Defined FIR filter\n");
jngarlitos 1:9dd7c64b4a64 578
jngarlitos 1:9dd7c64b4a64 579 if ((ARRAY_SIZE(programmable_FIR) <= coeff_reg_length) && (count_of_active_coeffs <= coeff_reg_length)) {
jngarlitos 1:9dd7c64b4a64 580 pc.printf(" Aplying user-defined FIR filter coefficients from 'FIR_user_coeffs.h'\n");
jngarlitos 1:9dd7c64b4a64 581 ad77681_programmable_filter(device_adc, programmable_FIR, count_of_active_coeffs);
jngarlitos 1:9dd7c64b4a64 582 pc.printf(" Coeffs inserted successfully\n");
jngarlitos 1:9dd7c64b4a64 583 } else
jngarlitos 1:9dd7c64b4a64 584 pc.printf(" Incorrect count of coefficients in 'FIR_user_coeffs.h'\n");
jngarlitos 1:9dd7c64b4a64 585 }
jngarlitos 1:9dd7c64b4a64 586
jngarlitos 1:9dd7c64b4a64 587 /**
jngarlitos 1:9dd7c64b4a64 588 * AIN and REF buffers controll
jngarlitos 1:9dd7c64b4a64 589 *
jngarlitos 1:9dd7c64b4a64 590 */
jngarlitos 1:9dd7c64b4a64 591 void static menu_4_adc_buffers_controll(void)
jngarlitos 1:9dd7c64b4a64 592 {
jngarlitos 1:9dd7c64b4a64 593 uint32_t new_AIN_buffer = 0, new_REF_buffer = 0, new_buffer = 0;
jngarlitos 1:9dd7c64b4a64 594
jngarlitos 1:9dd7c64b4a64 595 pc.printf(" Buffers settings: \n");
jngarlitos 1:9dd7c64b4a64 596 pc.printf(" 1 - Set AIN precharge buffers\n");
jngarlitos 1:9dd7c64b4a64 597 pc.printf(" 2 - Set REF buffers\n");
jngarlitos 1:9dd7c64b4a64 598 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 599
jngarlitos 1:9dd7c64b4a64 600 getUserInput(&new_buffer);
jngarlitos 1:9dd7c64b4a64 601 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 602
jngarlitos 1:9dd7c64b4a64 603 switch (new_buffer) {
jngarlitos 1:9dd7c64b4a64 604 case 1:
jngarlitos 1:9dd7c64b4a64 605 pc.printf(" Analog IN precharge buffers settings: \n");
jngarlitos 1:9dd7c64b4a64 606 pc.printf(" 1 - Turn ON both precharge buffers\n");
jngarlitos 1:9dd7c64b4a64 607 pc.printf(" 2 - Turn OFF both precharge buffers\n");
jngarlitos 1:9dd7c64b4a64 608 pc.printf(" 3 - Turn ON AIN- precharge buffer\n");
jngarlitos 1:9dd7c64b4a64 609 pc.printf(" 4 - Turn OFF AIN- precharge buffer\n");
jngarlitos 1:9dd7c64b4a64 610 pc.printf(" 5 - Turn ON AIN+ precharge buffer\n");
jngarlitos 1:9dd7c64b4a64 611 pc.printf(" 6 - Turn OFF AIN+ precharge buffer\n");
jngarlitos 1:9dd7c64b4a64 612 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 613
jngarlitos 1:9dd7c64b4a64 614 getUserInput(&new_AIN_buffer);
jngarlitos 1:9dd7c64b4a64 615 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 616
jngarlitos 1:9dd7c64b4a64 617 switch (new_AIN_buffer) {
jngarlitos 1:9dd7c64b4a64 618 case 1:
jngarlitos 1:9dd7c64b4a64 619 ad77681_set_AINn_buffer(device_adc, AD77681_AINn_ENABLED);
jngarlitos 1:9dd7c64b4a64 620 ad77681_set_AINp_buffer(device_adc, AD77681_AINp_ENABLED);
jngarlitos 1:9dd7c64b4a64 621 pc.printf(" AIN+ and AIN- enabled\n");
jngarlitos 1:9dd7c64b4a64 622 break;
jngarlitos 1:9dd7c64b4a64 623 case 2:
jngarlitos 1:9dd7c64b4a64 624 ad77681_set_AINn_buffer(device_adc, AD77681_AINn_DISABLED);
jngarlitos 1:9dd7c64b4a64 625 ad77681_set_AINp_buffer(device_adc, AD77681_AINp_DISABLED);
jngarlitos 1:9dd7c64b4a64 626 pc.printf(" AIN+ and AIN- disabled\n");
jngarlitos 1:9dd7c64b4a64 627 break;
jngarlitos 1:9dd7c64b4a64 628 case 3:
jngarlitos 1:9dd7c64b4a64 629 ad77681_set_AINn_buffer(device_adc, AD77681_AINn_ENABLED);
jngarlitos 1:9dd7c64b4a64 630 pc.printf(" AIN- Enabled\n");
jngarlitos 1:9dd7c64b4a64 631 break;
jngarlitos 1:9dd7c64b4a64 632 case 4:
jngarlitos 1:9dd7c64b4a64 633 ad77681_set_AINn_buffer(device_adc, AD77681_AINn_DISABLED);
jngarlitos 1:9dd7c64b4a64 634 pc.printf(" AIN- Disabled\n");
jngarlitos 1:9dd7c64b4a64 635 break;
jngarlitos 1:9dd7c64b4a64 636 case 5:
jngarlitos 1:9dd7c64b4a64 637 ad77681_set_AINp_buffer(device_adc, AD77681_AINp_ENABLED);
jngarlitos 1:9dd7c64b4a64 638 pc.printf(" AIN+ Enabled\n");
jngarlitos 1:9dd7c64b4a64 639 break;
jngarlitos 1:9dd7c64b4a64 640 case 6:
jngarlitos 1:9dd7c64b4a64 641 ad77681_set_AINp_buffer(device_adc, AD77681_AINp_DISABLED);
jngarlitos 1:9dd7c64b4a64 642 pc.printf(" AIN+ Disabled\n");
jngarlitos 1:9dd7c64b4a64 643 break;
jngarlitos 1:9dd7c64b4a64 644 default:
jngarlitos 1:9dd7c64b4a64 645 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 646 break;
jngarlitos 1:9dd7c64b4a64 647 }
jngarlitos 1:9dd7c64b4a64 648 break;
jngarlitos 1:9dd7c64b4a64 649 case 2:
jngarlitos 1:9dd7c64b4a64 650 pc.printf(" REF buffers settings: \n");
jngarlitos 1:9dd7c64b4a64 651 pc.printf(" 1 - Full REF- reference buffer\n");
jngarlitos 1:9dd7c64b4a64 652 pc.printf(" 2 - Full REF+ reference buffer\n");
jngarlitos 1:9dd7c64b4a64 653 pc.printf(" 3 - Unbuffered REF- reference buffer\n");
jngarlitos 1:9dd7c64b4a64 654 pc.printf(" 4 - Unbuffered REF+ reference buffer\n");
jngarlitos 1:9dd7c64b4a64 655 pc.printf(" 5 - Precharge REF- reference buffer\n");
jngarlitos 1:9dd7c64b4a64 656 pc.printf(" 6 - Precharge REF+ reference buffer\n");
jngarlitos 1:9dd7c64b4a64 657 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 658
jngarlitos 1:9dd7c64b4a64 659 getUserInput(&new_REF_buffer);
jngarlitos 1:9dd7c64b4a64 660 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 661
jngarlitos 1:9dd7c64b4a64 662 switch (new_REF_buffer) {
jngarlitos 1:9dd7c64b4a64 663 case 1:
jngarlitos 1:9dd7c64b4a64 664 ad77681_set_REFn_buffer(device_adc, AD77681_BUFn_FULL_BUFFER_ON);
jngarlitos 1:9dd7c64b4a64 665 pc.printf(" Fully buffered REF-\n");
jngarlitos 1:9dd7c64b4a64 666 break;
jngarlitos 1:9dd7c64b4a64 667 case 2:
jngarlitos 1:9dd7c64b4a64 668 ad77681_set_REFp_buffer(device_adc, AD77681_BUFp_FULL_BUFFER_ON);
jngarlitos 1:9dd7c64b4a64 669 pc.printf(" Fully buffered REF+\n");
jngarlitos 1:9dd7c64b4a64 670 break;
jngarlitos 1:9dd7c64b4a64 671 case 3:
jngarlitos 1:9dd7c64b4a64 672 ad77681_set_REFn_buffer(device_adc, AD77681_BUFn_DISABLED);
jngarlitos 1:9dd7c64b4a64 673 pc.printf(" Unbuffered REF-\n");
jngarlitos 1:9dd7c64b4a64 674 break;
jngarlitos 1:9dd7c64b4a64 675 case 4:
jngarlitos 1:9dd7c64b4a64 676 ad77681_set_REFp_buffer(device_adc, AD77681_BUFp_DISABLED);
jngarlitos 1:9dd7c64b4a64 677 pc.printf(" Unbuffered REF+\n");
jngarlitos 1:9dd7c64b4a64 678 break;
jngarlitos 1:9dd7c64b4a64 679 case 5:
jngarlitos 1:9dd7c64b4a64 680 ad77681_set_REFn_buffer(device_adc, AD77681_BUFn_ENABLED);
jngarlitos 1:9dd7c64b4a64 681 pc.printf(" Precharge buffer on REF-\n");
jngarlitos 1:9dd7c64b4a64 682 break;
jngarlitos 1:9dd7c64b4a64 683 case 6:
jngarlitos 1:9dd7c64b4a64 684 ad77681_set_REFp_buffer(device_adc, AD77681_BUFp_ENABLED);
jngarlitos 1:9dd7c64b4a64 685 pc.printf(" Precharge buffer on REF+\n");
jngarlitos 1:9dd7c64b4a64 686 break;
jngarlitos 1:9dd7c64b4a64 687 default:
jngarlitos 1:9dd7c64b4a64 688 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 689 break;
jngarlitos 1:9dd7c64b4a64 690 }
jngarlitos 1:9dd7c64b4a64 691 break;
jngarlitos 1:9dd7c64b4a64 692 default:
jngarlitos 1:9dd7c64b4a64 693 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 694 break;
jngarlitos 1:9dd7c64b4a64 695 }
jngarlitos 1:9dd7c64b4a64 696 print_prompt();
jngarlitos 1:9dd7c64b4a64 697 }
jngarlitos 1:9dd7c64b4a64 698
jngarlitos 1:9dd7c64b4a64 699 /**
jngarlitos 1:9dd7c64b4a64 700 * Default ADC Settings
jngarlitos 1:9dd7c64b4a64 701 *
jngarlitos 1:9dd7c64b4a64 702 */
jngarlitos 1:9dd7c64b4a64 703 void static menu_5_set_default_settings(void)
jngarlitos 1:9dd7c64b4a64 704 {
jngarlitos 1:9dd7c64b4a64 705 int32_t default_settings_flag = ad77681_setup(&device_adc, init_params, &current_status);
jngarlitos 1:9dd7c64b4a64 706
jngarlitos 1:9dd7c64b4a64 707 if (default_settings_flag == SUCCESS)
jngarlitos 1:9dd7c64b4a64 708 pc.printf("\n Default ADC settings successfull\n");
jngarlitos 1:9dd7c64b4a64 709 else
jngarlitos 1:9dd7c64b4a64 710 pc.printf("\n Error in settings, please reset the ADC\n");
jngarlitos 1:9dd7c64b4a64 711 print_prompt();
jngarlitos 1:9dd7c64b4a64 712 }
jngarlitos 1:9dd7c64b4a64 713
jngarlitos 1:9dd7c64b4a64 714 /**
jngarlitos 1:9dd7c64b4a64 715 * VCM output controll
jngarlitos 1:9dd7c64b4a64 716 *
jngarlitos 1:9dd7c64b4a64 717 */
jngarlitos 1:9dd7c64b4a64 718 void static menu_6_set_adc_vcm(void)
jngarlitos 1:9dd7c64b4a64 719 {
jngarlitos 1:9dd7c64b4a64 720 uint32_t new_vcm = 0;
jngarlitos 1:9dd7c64b4a64 721
jngarlitos 1:9dd7c64b4a64 722 pc.printf(" Avaliable VCM output voltage levels: \n");
jngarlitos 1:9dd7c64b4a64 723 pc.printf(" 1 - VCM = (AVDD1-AVSS)/2\n");
jngarlitos 1:9dd7c64b4a64 724 pc.printf(" 2 - VCM = 2.5V\n");
jngarlitos 1:9dd7c64b4a64 725 pc.printf(" 3 - VCM = 2.05V\n");
jngarlitos 1:9dd7c64b4a64 726 pc.printf(" 4 - VCM = 1.9V\n");
jngarlitos 1:9dd7c64b4a64 727 pc.printf(" 5 - VCM = 1.65V\n");
jngarlitos 1:9dd7c64b4a64 728 pc.printf(" 6 - VCM = 1.1V\n");
jngarlitos 1:9dd7c64b4a64 729 pc.printf(" 7 - VCM = 0.9V\n");
jngarlitos 1:9dd7c64b4a64 730 pc.printf(" 8 - VCM off\n");
jngarlitos 1:9dd7c64b4a64 731 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 732
jngarlitos 1:9dd7c64b4a64 733 getUserInput(&new_vcm);
jngarlitos 1:9dd7c64b4a64 734 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 735
jngarlitos 1:9dd7c64b4a64 736 switch (new_vcm) {
jngarlitos 1:9dd7c64b4a64 737
jngarlitos 1:9dd7c64b4a64 738 case 1:
jngarlitos 1:9dd7c64b4a64 739 ad77681_set_VCM_output(device_adc, AD77681_VCM_HALF_VCC);
jngarlitos 1:9dd7c64b4a64 740 pc.printf(" VCM set to half of the Vcc\n");
jngarlitos 1:9dd7c64b4a64 741 break;
jngarlitos 1:9dd7c64b4a64 742 case 2:
jngarlitos 1:9dd7c64b4a64 743 ad77681_set_VCM_output(device_adc, AD77681_VCM_2_5V);
jngarlitos 1:9dd7c64b4a64 744 pc.printf(" VCM set to 2.5V\n");
jngarlitos 1:9dd7c64b4a64 745 break;
jngarlitos 1:9dd7c64b4a64 746 case 3:
jngarlitos 1:9dd7c64b4a64 747 ad77681_set_VCM_output(device_adc, AD77681_VCM_2_05V);
jngarlitos 1:9dd7c64b4a64 748 pc.printf(" VCM set to 2.05V\n");
jngarlitos 1:9dd7c64b4a64 749 break;
jngarlitos 1:9dd7c64b4a64 750 case 4:
jngarlitos 1:9dd7c64b4a64 751 ad77681_set_VCM_output(device_adc, AD77681_VCM_1_9V);
jngarlitos 1:9dd7c64b4a64 752 pc.printf(" VCM set to 1.9V\n");
jngarlitos 1:9dd7c64b4a64 753 break;
jngarlitos 1:9dd7c64b4a64 754 case 5:
jngarlitos 1:9dd7c64b4a64 755 ad77681_set_VCM_output(device_adc, AD77681_VCM_1_65V);
jngarlitos 1:9dd7c64b4a64 756 pc.printf(" VCM set to 1.65V\n");
jngarlitos 1:9dd7c64b4a64 757 break;
jngarlitos 1:9dd7c64b4a64 758 case 6:
jngarlitos 1:9dd7c64b4a64 759 ad77681_set_VCM_output(device_adc, AD77681_VCM_1_1V);
jngarlitos 1:9dd7c64b4a64 760 pc.printf(" VCM set to 1.1V\n");
jngarlitos 1:9dd7c64b4a64 761 break;
jngarlitos 1:9dd7c64b4a64 762 case 7:
jngarlitos 1:9dd7c64b4a64 763 ad77681_set_VCM_output(device_adc, AD77681_VCM_0_9V);
jngarlitos 1:9dd7c64b4a64 764 pc.printf(" VCM set to 0.9V\n");
jngarlitos 1:9dd7c64b4a64 765 break;
jngarlitos 1:9dd7c64b4a64 766 case 8:
jngarlitos 1:9dd7c64b4a64 767 ad77681_set_VCM_output(device_adc, AD77681_VCM_OFF);
jngarlitos 1:9dd7c64b4a64 768 pc.printf(" VCM OFF\n");
jngarlitos 1:9dd7c64b4a64 769 break;
jngarlitos 1:9dd7c64b4a64 770 default:
jngarlitos 1:9dd7c64b4a64 771 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 772 break;
jngarlitos 1:9dd7c64b4a64 773 }
jngarlitos 1:9dd7c64b4a64 774 print_prompt();
jngarlitos 1:9dd7c64b4a64 775 }
jngarlitos 1:9dd7c64b4a64 776
jngarlitos 1:9dd7c64b4a64 777 /**
jngarlitos 1:9dd7c64b4a64 778 * Register read
jngarlitos 1:9dd7c64b4a64 779 *
jngarlitos 1:9dd7c64b4a64 780 */
jngarlitos 1:9dd7c64b4a64 781 void static menu_7_adc_read_register(void)
jngarlitos 1:9dd7c64b4a64 782 {
jngarlitos 1:9dd7c64b4a64 783 uint32_t new_reg_to_read = 0;
jngarlitos 1:9dd7c64b4a64 784 uint8_t reg_read_buf[3], read_adc_data[6], hex_number = 0;
jngarlitos 1:9dd7c64b4a64 785 uint8_t HI = 0, MID = 0, LO = 0;
jngarlitos 1:9dd7c64b4a64 786 char binary_number[8], other_register[2] = "";
jngarlitos 1:9dd7c64b4a64 787 double voltage;
jngarlitos 1:9dd7c64b4a64 788
jngarlitos 1:9dd7c64b4a64 789 pc.printf(" Read desired register: \n");
jngarlitos 1:9dd7c64b4a64 790 pc.printf(" 1 - 0x03 - Chip type\n");
jngarlitos 1:9dd7c64b4a64 791 pc.printf(" 2 - 0x14 - Interface format\n");
jngarlitos 1:9dd7c64b4a64 792 pc.printf(" 3 - 0x15 - Power clock\n");
jngarlitos 1:9dd7c64b4a64 793 pc.printf(" 4 - 0x16 - Analog\n");
jngarlitos 1:9dd7c64b4a64 794 pc.printf(" 5 - 0x17 - Analog2\n");
jngarlitos 1:9dd7c64b4a64 795 pc.printf(" 6 - 0x18 - Conversion\n");
jngarlitos 1:9dd7c64b4a64 796 pc.printf(" 7 - 0x19 - Digital filter\n");
jngarlitos 1:9dd7c64b4a64 797 pc.printf(" 8 - 0x1A - SINC3 Dec. rate MSB\n");
jngarlitos 1:9dd7c64b4a64 798 pc.printf(" 9 - 0x1B - SINC3 Dec. rate LSB\n");
jngarlitos 1:9dd7c64b4a64 799 pc.printf(" 10 - 0x1C - Duty cycle ratio\n");
jngarlitos 1:9dd7c64b4a64 800 pc.printf(" 11 - 0x1D - Sync, Reset\n");
jngarlitos 1:9dd7c64b4a64 801 pc.printf(" 12 - 0x1E - GPIO Controll\n");
jngarlitos 1:9dd7c64b4a64 802 pc.printf(" 13 - 0x1F - GPIO Write\n");
jngarlitos 1:9dd7c64b4a64 803 pc.printf(" 14 - 0x20 - GPIO Read\n");
jngarlitos 1:9dd7c64b4a64 804 pc.printf(" 15 - 0x21 - 0x23 - Offset register\n");
jngarlitos 1:9dd7c64b4a64 805 pc.printf(" 16 - 0x24 - 0x26 - Gain register\n");
jngarlitos 1:9dd7c64b4a64 806 pc.printf(" 17 - 0x2C - ADC Data\n");
jngarlitos 1:9dd7c64b4a64 807 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 808
jngarlitos 1:9dd7c64b4a64 809 getUserInput(&new_reg_to_read);
jngarlitos 1:9dd7c64b4a64 810 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 811
jngarlitos 1:9dd7c64b4a64 812 switch (new_reg_to_read) {
jngarlitos 1:9dd7c64b4a64 813 case 1:
jngarlitos 1:9dd7c64b4a64 814 ad77681_spi_reg_read(device_adc, AD77681_REG_CHIP_TYPE, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 815 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 816 pc.printf(" Value of 0x03 - Chip type register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 817 break;
jngarlitos 1:9dd7c64b4a64 818 case 2:
jngarlitos 1:9dd7c64b4a64 819 ad77681_spi_reg_read(device_adc, AD77681_REG_INTERFACE_FORMAT, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 820 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 821 pc.printf(" Value of 0x14 - Interface format register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 822 break;
jngarlitos 1:9dd7c64b4a64 823 case 3:
jngarlitos 1:9dd7c64b4a64 824 ad77681_spi_reg_read(device_adc, AD77681_REG_POWER_CLOCK, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 825 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 826 pc.printf(" Value of 0x15 - Power clock register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 827 break;
jngarlitos 1:9dd7c64b4a64 828 case 4:
jngarlitos 1:9dd7c64b4a64 829 ad77681_spi_reg_read(device_adc, AD77681_REG_ANALOG, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 830 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 831 pc.printf(" Value of 0x16 - Anlaog register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 832 break;
jngarlitos 1:9dd7c64b4a64 833 case 5:
jngarlitos 1:9dd7c64b4a64 834 ad77681_spi_reg_read(device_adc, AD77681_REG_ANALOG2, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 835 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 836 pc.printf(" Value of 0x17 - Analog2 regster is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 837 break;
jngarlitos 1:9dd7c64b4a64 838 case 6:
jngarlitos 1:9dd7c64b4a64 839 ad77681_spi_reg_read(device_adc, AD77681_REG_CONVERSION, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 840 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 841 pc.printf(" Value of 0x18 - Conversion register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 842 break;
jngarlitos 1:9dd7c64b4a64 843 case 7:
jngarlitos 1:9dd7c64b4a64 844 ad77681_spi_reg_read(device_adc, AD77681_REG_DIGITAL_FILTER, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 845 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 846 pc.printf(" Value of 0x19 - Digital filter register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 847 break;
jngarlitos 1:9dd7c64b4a64 848 case 8:
jngarlitos 1:9dd7c64b4a64 849 ad77681_spi_reg_read(device_adc, AD77681_REG_SINC3_DEC_RATE_MSB, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 850 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 851 pc.printf(" Value of 0x1A - SINC3 Dec. rate MSB is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 852 break;
jngarlitos 1:9dd7c64b4a64 853 case 9:
jngarlitos 1:9dd7c64b4a64 854 ad77681_spi_reg_read(device_adc, AD77681_REG_SINC3_DEC_RATE_LSB, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 855 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 856 pc.printf(" Value of 0x1B - SINC3 Dec. rate LSB is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 857 break;
jngarlitos 1:9dd7c64b4a64 858 case 10:
jngarlitos 1:9dd7c64b4a64 859 ad77681_spi_reg_read(device_adc, AD77681_REG_DUTY_CYCLE_RATIO, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 860 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 861 pc.printf(" Value of 0x1C - Duty cycle ratio 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 862 break;
jngarlitos 1:9dd7c64b4a64 863 case 11:
jngarlitos 1:9dd7c64b4a64 864 ad77681_spi_reg_read(device_adc, AD77681_REG_SYNC_RESET, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 865 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 866 pc.printf(" Value of 0x1D - Sync, Reset 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 867 break;
jngarlitos 1:9dd7c64b4a64 868 case 12:
jngarlitos 1:9dd7c64b4a64 869 ad77681_spi_reg_read(device_adc, AD77681_REG_GPIO_CONTROL, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 870 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 871 pc.printf(" Value of 0x1E - GPIO Controll is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 872 break;
jngarlitos 1:9dd7c64b4a64 873 case 13:
jngarlitos 1:9dd7c64b4a64 874 ad77681_spi_reg_read(device_adc, AD77681_REG_GPIO_WRITE, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 875 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 876 pc.printf(" Value of 0x1F - GPIO Write is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 877 break;
jngarlitos 1:9dd7c64b4a64 878 case 14:
jngarlitos 1:9dd7c64b4a64 879 ad77681_spi_reg_read(device_adc, AD77681_REG_GPIO_READ, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 880 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 881 pc.printf(" Value of 0x20 - GPIO Read is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:9dd7c64b4a64 882 break;
jngarlitos 1:9dd7c64b4a64 883 case 15:
jngarlitos 1:9dd7c64b4a64 884 ad77681_spi_reg_read(device_adc, AD77681_REG_OFFSET_HI, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 885 HI = reg_read_buf[1];
jngarlitos 1:9dd7c64b4a64 886
jngarlitos 1:9dd7c64b4a64 887 ad77681_spi_reg_read(device_adc, AD77681_REG_OFFSET_MID, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 888 MID = reg_read_buf[1];
jngarlitos 1:9dd7c64b4a64 889
jngarlitos 1:9dd7c64b4a64 890 ad77681_spi_reg_read(device_adc, AD77681_REG_OFFSET_LO, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 891 LO = reg_read_buf[1];
jngarlitos 1:9dd7c64b4a64 892
jngarlitos 1:9dd7c64b4a64 893 pc.printf(" Value of 0x21 - 0x23 - Offset register is: 0x%x %x %x\n", HI, MID, LO);
jngarlitos 1:9dd7c64b4a64 894 break;
jngarlitos 1:9dd7c64b4a64 895
jngarlitos 1:9dd7c64b4a64 896 case 16:
jngarlitos 1:9dd7c64b4a64 897 ad77681_spi_reg_read(device_adc, AD77681_REG_GAIN_HI, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 898 HI = reg_read_buf[1];
jngarlitos 1:9dd7c64b4a64 899
jngarlitos 1:9dd7c64b4a64 900 ad77681_spi_reg_read(device_adc, AD77681_REG_GAIN_MID, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 901 MID = reg_read_buf[1];
jngarlitos 1:9dd7c64b4a64 902
jngarlitos 1:9dd7c64b4a64 903 ad77681_spi_reg_read(device_adc, AD77681_REG_GAIN_LO, reg_read_buf);
jngarlitos 1:9dd7c64b4a64 904 LO = reg_read_buf[1];
jngarlitos 1:9dd7c64b4a64 905
jngarlitos 1:9dd7c64b4a64 906 pc.printf(" Value of 0x24 - 0x26 - Gain register is: 0x%x %x %x\n", HI, MID, LO);
jngarlitos 1:9dd7c64b4a64 907 break;
jngarlitos 1:9dd7c64b4a64 908 case 17:
jngarlitos 1:9dd7c64b4a64 909 ad77681_spi_read_adc_data(device_adc, read_adc_data, AD77681_REGISTER_DATA_READ);
jngarlitos 1:9dd7c64b4a64 910 pc.printf(" Value of 0x2C - ADC data is: 0x%x 0x%x 0x%x\n", read_adc_data[1], read_adc_data[2], read_adc_data[3]);
jngarlitos 1:9dd7c64b4a64 911 break;
jngarlitos 1:9dd7c64b4a64 912
jngarlitos 1:9dd7c64b4a64 913 default :
jngarlitos 1:9dd7c64b4a64 914 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 915 break;
jngarlitos 1:9dd7c64b4a64 916 }
jngarlitos 1:9dd7c64b4a64 917 print_prompt();
jngarlitos 1:9dd7c64b4a64 918 }
jngarlitos 1:9dd7c64b4a64 919
jngarlitos 1:9dd7c64b4a64 920 /**
jngarlitos 1:9dd7c64b4a64 921 * Read ADC data
jngarlitos 1:9dd7c64b4a64 922 *
jngarlitos 1:9dd7c64b4a64 923 */
jngarlitos 1:9dd7c64b4a64 924 void static menu_8_adc_cont_read_data(void)
jngarlitos 1:9dd7c64b4a64 925 {
jngarlitos 1:9dd7c64b4a64 926 uint32_t new_sample_count = 0;
jngarlitos 1:9dd7c64b4a64 927 int32_t ret;
jngarlitos 1:9dd7c64b4a64 928
jngarlitos 1:9dd7c64b4a64 929 pc.printf(" Read Continuous ADC Data");
jngarlitos 1:9dd7c64b4a64 930 pc.printf(" Input number of samples (1 to 4096): \n");
jngarlitos 1:9dd7c64b4a64 931 ret = getUserInput(&new_sample_count); // Get user input
jngarlitos 1:9dd7c64b4a64 932
jngarlitos 1:9dd7c64b4a64 933 if ((new_sample_count <= 4096) && (ret == SUCCESS) ) {
jngarlitos 1:9dd7c64b4a64 934 pc.printf("\n%d of samples\n", new_sample_count); // Print Desired Measurement Count
jngarlitos 1:9dd7c64b4a64 935 measured_data.samples = (uint16_t)(new_sample_count);
jngarlitos 1:9dd7c64b4a64 936 measured_data.finish = false;
jngarlitos 1:9dd7c64b4a64 937 measured_data.count = 0;
jngarlitos 1:9dd7c64b4a64 938 pc.printf("Sampling....\n");
jngarlitos 1:9dd7c64b4a64 939 cont_sampling();
jngarlitos 1:9dd7c64b4a64 940 pc.printf("Done Sampling....\n");
jngarlitos 1:9dd7c64b4a64 941 } else {
jngarlitos 1:9dd7c64b4a64 942 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 943 }
jngarlitos 1:9dd7c64b4a64 944 print_prompt();
jngarlitos 1:9dd7c64b4a64 945 }
jngarlitos 1:9dd7c64b4a64 946
jngarlitos 1:9dd7c64b4a64 947 /**
jngarlitos 1:9dd7c64b4a64 948 * ADC Continuous read
jngarlitos 1:9dd7c64b4a64 949 *
jngarlitos 1:9dd7c64b4a64 950 */
jngarlitos 1:9dd7c64b4a64 951 void static cont_sampling()
jngarlitos 1:9dd7c64b4a64 952 {
jngarlitos 1:9dd7c64b4a64 953 uint8_t buf[6];
jngarlitos 1:9dd7c64b4a64 954
jngarlitos 1:9dd7c64b4a64 955 ad77681_set_continuos_read(device_adc, AD77681_CONTINUOUS_READ_ENABLE);
jngarlitos 1:9dd7c64b4a64 956 __enable_irq(); // Enable all interupts
jngarlitos 1:9dd7c64b4a64 957 drdy.enable_irq(); // Enable interrupt on DRDY pin
jngarlitos 1:9dd7c64b4a64 958 drdy.fall(&drdy_interrupt); // Interrupt on falling edne of DRDY
jngarlitos 1:9dd7c64b4a64 959
jngarlitos 1:9dd7c64b4a64 960 while (!measured_data.finish) { // While loop. Waiting for the measurements to be completed
jngarlitos 1:9dd7c64b4a64 961 if (int_event==true) { // Checks if Interrupt Occurred
jngarlitos 1:9dd7c64b4a64 962 ad77681_spi_read_adc_data(device_adc, buf, AD77681_CONTINUOUS_DATA_READ); // Read the continuous read data
jngarlitos 1:9dd7c64b4a64 963 if (device_adc->conv_len == AD77681_CONV_24BIT) // 24bit format
jngarlitos 1:9dd7c64b4a64 964 measured_data.raw_data[measured_data.count] = (buf[0] << 16 | buf[1] << 8 | buf[2]<< 0); // Combining the SPI buffers
jngarlitos 1:9dd7c64b4a64 965 else // 16bit format
jngarlitos 1:9dd7c64b4a64 966 measured_data.raw_data[measured_data.count] = (buf[0] << 8 | buf[1]<< 0); // Combining the SPI buffers
jngarlitos 1:9dd7c64b4a64 967 measured_data.count++; // Increment Measured Data Counter
jngarlitos 1:9dd7c64b4a64 968 int_event=false; // Set int event flag after reading the Data
jngarlitos 1:9dd7c64b4a64 969 }
jngarlitos 1:9dd7c64b4a64 970 }
jngarlitos 1:9dd7c64b4a64 971 ad77681_set_continuos_read(device_adc, AD77681_CONTINUOUS_READ_DISABLE); // Disable continuous ADC read
jngarlitos 1:9dd7c64b4a64 972 }
jngarlitos 1:9dd7c64b4a64 973
jngarlitos 1:9dd7c64b4a64 974 /**
jngarlitos 1:9dd7c64b4a64 975 * Reset ADC
jngarlitos 1:9dd7c64b4a64 976 *
jngarlitos 1:9dd7c64b4a64 977 */
jngarlitos 1:9dd7c64b4a64 978 void static menu_9_reset_ADC(void)
jngarlitos 1:9dd7c64b4a64 979 {
jngarlitos 1:9dd7c64b4a64 980 uint32_t new_reset_option = 0;
jngarlitos 1:9dd7c64b4a64 981
jngarlitos 1:9dd7c64b4a64 982 pc.printf(" ADC reset opportunities: \n");
jngarlitos 1:9dd7c64b4a64 983 pc.printf(" 1 - Soft reset - over SPI\n");
jngarlitos 1:9dd7c64b4a64 984 pc.printf(" 2 - Hard reset - uing RESET pin\n");
jngarlitos 1:9dd7c64b4a64 985 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 986
jngarlitos 1:9dd7c64b4a64 987 getUserInput(&new_reset_option);
jngarlitos 1:9dd7c64b4a64 988 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 989
jngarlitos 1:9dd7c64b4a64 990 switch (new_reset_option) {
jngarlitos 1:9dd7c64b4a64 991 case 1:
jngarlitos 1:9dd7c64b4a64 992 ad77681_soft_reset(device_adc); // Perform soft reset thru SPI write
jngarlitos 1:9dd7c64b4a64 993 pc.printf(" ADC after soft reset\n");
jngarlitos 1:9dd7c64b4a64 994 break;
jngarlitos 1:9dd7c64b4a64 995 case 2:
jngarlitos 1:9dd7c64b4a64 996 adc_hard_reset();
jngarlitos 1:9dd7c64b4a64 997 pc.printf(" ADC after hard reset\n");
jngarlitos 1:9dd7c64b4a64 998 break;
jngarlitos 1:9dd7c64b4a64 999 default:
jngarlitos 1:9dd7c64b4a64 1000 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1001 break;
jngarlitos 1:9dd7c64b4a64 1002 }
jngarlitos 1:9dd7c64b4a64 1003 print_prompt();
jngarlitos 1:9dd7c64b4a64 1004 }
jngarlitos 1:9dd7c64b4a64 1005
jngarlitos 1:9dd7c64b4a64 1006 /**
jngarlitos 1:9dd7c64b4a64 1007 * Reset ADC thru SDP-K1 GPIO
jngarlitos 1:9dd7c64b4a64 1008 *
jngarlitos 1:9dd7c64b4a64 1009 *
jngarlitos 1:9dd7c64b4a64 1010 */
jngarlitos 1:9dd7c64b4a64 1011 void static adc_hard_reset()
jngarlitos 1:9dd7c64b4a64 1012 {
jngarlitos 1:9dd7c64b4a64 1013 adc_reset = 0; // Set ADC reset pin to Low
jngarlitos 1:9dd7c64b4a64 1014 mdelay(100); // Delay 100ms
jngarlitos 1:9dd7c64b4a64 1015 adc_reset = 1; // Set ADC reset pin to High
jngarlitos 1:9dd7c64b4a64 1016 mdelay(100); // Delay 100ms
jngarlitos 1:9dd7c64b4a64 1017 }
jngarlitos 1:9dd7c64b4a64 1018
jngarlitos 1:9dd7c64b4a64 1019 /**
jngarlitos 1:9dd7c64b4a64 1020 * Sleep mode / Wake up ADC
jngarlitos 1:9dd7c64b4a64 1021 *
jngarlitos 1:9dd7c64b4a64 1022 */
jngarlitos 1:9dd7c64b4a64 1023 void static menu_10_power_down(void)
jngarlitos 1:9dd7c64b4a64 1024 {
jngarlitos 1:9dd7c64b4a64 1025 uint32_t new_sleep = 0;
jngarlitos 1:9dd7c64b4a64 1026
jngarlitos 1:9dd7c64b4a64 1027 pc.printf(" Controll sleep mode of the ADC: \n");
jngarlitos 1:9dd7c64b4a64 1028 pc.printf(" 1 - Put ADC to sleep mode\n");
jngarlitos 1:9dd7c64b4a64 1029 pc.printf(" 2 - Wake up ADC\n");
jngarlitos 1:9dd7c64b4a64 1030 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1031
jngarlitos 1:9dd7c64b4a64 1032 getUserInput(&new_sleep);
jngarlitos 1:9dd7c64b4a64 1033 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1034
jngarlitos 1:9dd7c64b4a64 1035 switch (new_sleep) {
jngarlitos 1:9dd7c64b4a64 1036 case 1:
jngarlitos 1:9dd7c64b4a64 1037 ad77681_power_down(device_adc, AD77681_SLEEP);
jngarlitos 1:9dd7c64b4a64 1038 pc.printf(" ADC put to sleep mode\n");
jngarlitos 1:9dd7c64b4a64 1039 break;
jngarlitos 1:9dd7c64b4a64 1040 case 2:
jngarlitos 1:9dd7c64b4a64 1041 ad77681_power_down(device_adc, AD77681_WAKE);
jngarlitos 1:9dd7c64b4a64 1042 pc.printf(" ADC powered\n");
jngarlitos 1:9dd7c64b4a64 1043 break;
jngarlitos 1:9dd7c64b4a64 1044 default:
jngarlitos 1:9dd7c64b4a64 1045 pc.printf("Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1046 break;
jngarlitos 1:9dd7c64b4a64 1047 }
jngarlitos 1:9dd7c64b4a64 1048 print_prompt();
jngarlitos 1:9dd7c64b4a64 1049 }
jngarlitos 1:9dd7c64b4a64 1050
jngarlitos 1:9dd7c64b4a64 1051 /**
jngarlitos 1:9dd7c64b4a64 1052 * ADC's GPIO Controll
jngarlitos 1:9dd7c64b4a64 1053 *
jngarlitos 1:9dd7c64b4a64 1054 */
jngarlitos 1:9dd7c64b4a64 1055 void static menu_11_ADC_GPIO(void)
jngarlitos 1:9dd7c64b4a64 1056 {
jngarlitos 1:9dd7c64b4a64 1057 uint8_t GPIO_state;
jngarlitos 1:9dd7c64b4a64 1058 uint32_t new_gpio_sel = 0;
jngarlitos 1:9dd7c64b4a64 1059 char binary_number[8];
jngarlitos 1:9dd7c64b4a64 1060 int32_t ret_val = FAILURE, ret;
jngarlitos 1:9dd7c64b4a64 1061
jngarlitos 1:9dd7c64b4a64 1062 pc.printf(" ADC GPIO Controll: \n");
jngarlitos 1:9dd7c64b4a64 1063 pc.printf(" 1 - Read from GPIO\n");
jngarlitos 1:9dd7c64b4a64 1064 pc.printf(" 2 - Write to GPIO\n");
jngarlitos 1:9dd7c64b4a64 1065 pc.printf(" 3 - Set GPIO as input / output\n");
jngarlitos 1:9dd7c64b4a64 1066 pc.printf(" 4 - Change GPIO settings\n");
jngarlitos 1:9dd7c64b4a64 1067 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1068
jngarlitos 1:9dd7c64b4a64 1069 getUserInput(&new_gpio_sel);
jngarlitos 1:9dd7c64b4a64 1070 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1071
jngarlitos 1:9dd7c64b4a64 1072 switch (new_gpio_sel) {
jngarlitos 1:9dd7c64b4a64 1073 case 1:
jngarlitos 1:9dd7c64b4a64 1074 ad77681_gpio_read(device_adc, &GPIO_state, AD77681_ALL_GPIOS);
jngarlitos 1:9dd7c64b4a64 1075 print_binary(GPIO_state, binary_number);
jngarlitos 1:9dd7c64b4a64 1076 pc.printf(" Current GPIO Values:\n GPIO0: %c\n GPIO1: %c\n GPIO2: %c\n GPIO3: %c\n", binary_number[7], binary_number[6], binary_number[5], binary_number[4]);
jngarlitos 1:9dd7c64b4a64 1077 break;
jngarlitos 1:9dd7c64b4a64 1078 case 2:
jngarlitos 1:9dd7c64b4a64 1079 adc_GPIO_write();
jngarlitos 1:9dd7c64b4a64 1080 break;
jngarlitos 1:9dd7c64b4a64 1081 case 3:
jngarlitos 1:9dd7c64b4a64 1082 adc_GPIO_inout();
jngarlitos 1:9dd7c64b4a64 1083 break;
jngarlitos 1:9dd7c64b4a64 1084 case 4:
jngarlitos 1:9dd7c64b4a64 1085 adc_GPIO_settings();
jngarlitos 1:9dd7c64b4a64 1086 break;
jngarlitos 1:9dd7c64b4a64 1087 default:
jngarlitos 1:9dd7c64b4a64 1088 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1089 break;
jngarlitos 1:9dd7c64b4a64 1090 }
jngarlitos 1:9dd7c64b4a64 1091 print_prompt();
jngarlitos 1:9dd7c64b4a64 1092 }
jngarlitos 1:9dd7c64b4a64 1093
jngarlitos 1:9dd7c64b4a64 1094 /**
jngarlitos 1:9dd7c64b4a64 1095 * Write to GPIOs, part of the ADC_GPIO function
jngarlitos 1:9dd7c64b4a64 1096 *
jngarlitos 1:9dd7c64b4a64 1097 */
jngarlitos 1:9dd7c64b4a64 1098 void static adc_GPIO_write(void)
jngarlitos 1:9dd7c64b4a64 1099 {
jngarlitos 1:9dd7c64b4a64 1100 uint32_t new_gpio_write = 0, new_value = 0;
jngarlitos 1:9dd7c64b4a64 1101 int32_t ret, ret_val;
jngarlitos 1:9dd7c64b4a64 1102
jngarlitos 1:9dd7c64b4a64 1103 pc.printf(" Write to GPIO: \n");
jngarlitos 1:9dd7c64b4a64 1104 pc.printf(" 1 - Write to all GPIOs\n");
jngarlitos 1:9dd7c64b4a64 1105 pc.printf(" 2 - Write to GPIO0\n");
jngarlitos 1:9dd7c64b4a64 1106 pc.printf(" 3 - Write to GPIO1\n");
jngarlitos 1:9dd7c64b4a64 1107 pc.printf(" 4 - Write to GPIO2\n");
jngarlitos 1:9dd7c64b4a64 1108 pc.printf(" 5 - Write to GPIO3\n");
jngarlitos 1:9dd7c64b4a64 1109 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1110
jngarlitos 1:9dd7c64b4a64 1111 getUserInput(&new_gpio_write);
jngarlitos 1:9dd7c64b4a64 1112 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1113
jngarlitos 1:9dd7c64b4a64 1114 switch (new_gpio_write)
jngarlitos 1:9dd7c64b4a64 1115 {
jngarlitos 1:9dd7c64b4a64 1116 case 1:
jngarlitos 1:9dd7c64b4a64 1117 pc.printf("Insert value to be writen into all GPIOs, same value for all GPIOs: ");
jngarlitos 1:9dd7c64b4a64 1118 ret = getUserInput(&new_value);
jngarlitos 1:9dd7c64b4a64 1119
jngarlitos 1:9dd7c64b4a64 1120 if (((new_value == GPIO_HIGH) || (new_value == GPIO_LOW)) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1121 new_value *= 0xF;
jngarlitos 1:9dd7c64b4a64 1122 ret_val = ad77681_gpio_write(device_adc, new_value, AD77681_ALL_GPIOS);
jngarlitos 1:9dd7c64b4a64 1123 pc.printf("\n Value %d successully written to all GPOIs\n", new_value);
jngarlitos 1:9dd7c64b4a64 1124 } else
jngarlitos 1:9dd7c64b4a64 1125 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1126 break;
jngarlitos 1:9dd7c64b4a64 1127 case 2:
jngarlitos 1:9dd7c64b4a64 1128 pc.printf("Insert value to be written into GPIO0: ");
jngarlitos 1:9dd7c64b4a64 1129 ret = getUserInput(&new_value);
jngarlitos 1:9dd7c64b4a64 1130
jngarlitos 1:9dd7c64b4a64 1131 if (((new_value == GPIO_HIGH) || (new_value == GPIO_LOW)) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1132 ret_val = ad77681_gpio_write(device_adc, new_value, AD77681_GPIO0);
jngarlitos 1:9dd7c64b4a64 1133 pc.printf("\n Value %d successully written to GPIO0\n", new_value);
jngarlitos 1:9dd7c64b4a64 1134 } else
jngarlitos 1:9dd7c64b4a64 1135 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1136 break;
jngarlitos 1:9dd7c64b4a64 1137 case 3:
jngarlitos 1:9dd7c64b4a64 1138 pc.printf("Insert value to be written into GPIO1: ");
jngarlitos 1:9dd7c64b4a64 1139 ret = getUserInput(&new_value);
jngarlitos 1:9dd7c64b4a64 1140
jngarlitos 1:9dd7c64b4a64 1141 if (((new_value == GPIO_HIGH) || (new_value == GPIO_LOW)) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1142 ret_val = ad77681_gpio_write(device_adc, new_value, AD77681_GPIO1);
jngarlitos 1:9dd7c64b4a64 1143 pc.printf("\n Value %d successully written to GPIO1\n", new_value);
jngarlitos 1:9dd7c64b4a64 1144 } else
jngarlitos 1:9dd7c64b4a64 1145 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1146 break;
jngarlitos 1:9dd7c64b4a64 1147 case 4:
jngarlitos 1:9dd7c64b4a64 1148 pc.printf("Insert value to be written into GPIO2: ");
jngarlitos 1:9dd7c64b4a64 1149 ret = getUserInput(&new_value);
jngarlitos 1:9dd7c64b4a64 1150
jngarlitos 1:9dd7c64b4a64 1151 if (((new_value == GPIO_HIGH) || (new_value == GPIO_LOW)) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1152 ret_val = ad77681_gpio_write(device_adc, new_value, AD77681_GPIO2);
jngarlitos 1:9dd7c64b4a64 1153 pc.printf("\n Value %d successully written to GPIO2\n", new_value);
jngarlitos 1:9dd7c64b4a64 1154 } else
jngarlitos 1:9dd7c64b4a64 1155 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1156 break;
jngarlitos 1:9dd7c64b4a64 1157 case 5:
jngarlitos 1:9dd7c64b4a64 1158 pc.printf("Insert value to be written into GPIO3: ");
jngarlitos 1:9dd7c64b4a64 1159 ret = getUserInput(&new_value);
jngarlitos 1:9dd7c64b4a64 1160
jngarlitos 1:9dd7c64b4a64 1161 if (((new_value == GPIO_HIGH) || (new_value == GPIO_LOW)) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1162 ret_val = ad77681_gpio_write(device_adc, new_value, AD77681_GPIO3);
jngarlitos 1:9dd7c64b4a64 1163 pc.printf("\n Value %d successully written to GPIO3\n", new_value);
jngarlitos 1:9dd7c64b4a64 1164 } else
jngarlitos 1:9dd7c64b4a64 1165 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1166 break;
jngarlitos 1:9dd7c64b4a64 1167 default:
jngarlitos 1:9dd7c64b4a64 1168 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1169 break;
jngarlitos 1:9dd7c64b4a64 1170 }
jngarlitos 1:9dd7c64b4a64 1171 }
jngarlitos 1:9dd7c64b4a64 1172
jngarlitos 1:9dd7c64b4a64 1173 /**
jngarlitos 1:9dd7c64b4a64 1174 * GPIO direction, part of the ADC_GPIO function
jngarlitos 1:9dd7c64b4a64 1175 *
jngarlitos 1:9dd7c64b4a64 1176 */
jngarlitos 1:9dd7c64b4a64 1177 void static adc_GPIO_inout(void)
jngarlitos 1:9dd7c64b4a64 1178 {
jngarlitos 1:9dd7c64b4a64 1179 uint32_t new_gpio_inout = 0, new_gpio_inout_set = 0;
jngarlitos 1:9dd7c64b4a64 1180 int32_t ret_val;
jngarlitos 1:9dd7c64b4a64 1181
jngarlitos 1:9dd7c64b4a64 1182 pc.printf(" Set GPIOs as input or output: \n");
jngarlitos 1:9dd7c64b4a64 1183 pc.printf(" 1 - Set all GPIOs\n");
jngarlitos 1:9dd7c64b4a64 1184 pc.printf(" 2 - Set GPIO0\n");
jngarlitos 1:9dd7c64b4a64 1185 pc.printf(" 3 - Set GPIO1\n");
jngarlitos 1:9dd7c64b4a64 1186 pc.printf(" 4 - Set GIPO2\n");
jngarlitos 1:9dd7c64b4a64 1187 pc.printf(" 5 - Set GPIO3\n");
jngarlitos 1:9dd7c64b4a64 1188 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1189
jngarlitos 1:9dd7c64b4a64 1190 getUserInput(&new_gpio_inout);
jngarlitos 1:9dd7c64b4a64 1191 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1192
jngarlitos 1:9dd7c64b4a64 1193 switch (new_gpio_inout) {
jngarlitos 1:9dd7c64b4a64 1194 case 1:
jngarlitos 1:9dd7c64b4a64 1195 pc.printf(" 1 - Set all GPIOS as inputs\n");
jngarlitos 1:9dd7c64b4a64 1196 pc.printf(" 2 - Set all GPIOS as outputs\n");
jngarlitos 1:9dd7c64b4a64 1197
jngarlitos 1:9dd7c64b4a64 1198 getUserInput(&new_gpio_inout_set);
jngarlitos 1:9dd7c64b4a64 1199 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1200
jngarlitos 1:9dd7c64b4a64 1201 if ((new_gpio_inout_set == 1) || (new_gpio_inout_set == 2)) {
jngarlitos 1:9dd7c64b4a64 1202 new_gpio_inout_set -= 1;
jngarlitos 1:9dd7c64b4a64 1203 new_gpio_inout_set *= 0xF;
jngarlitos 1:9dd7c64b4a64 1204 ret_val = ad77681_gpio_inout(device_adc, new_gpio_inout_set, AD77681_ALL_GPIOS);
jngarlitos 1:9dd7c64b4a64 1205 pc.printf("All GPIOs successfully set");
jngarlitos 1:9dd7c64b4a64 1206 } else
jngarlitos 1:9dd7c64b4a64 1207 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1208 break;
jngarlitos 1:9dd7c64b4a64 1209 case 2:
jngarlitos 1:9dd7c64b4a64 1210 pc.printf(" 1 - Set GPIO0 as input\n");
jngarlitos 1:9dd7c64b4a64 1211 pc.printf(" 2 - Set GPIO0 as output\n");
jngarlitos 1:9dd7c64b4a64 1212
jngarlitos 1:9dd7c64b4a64 1213 getUserInput(&new_gpio_inout_set);
jngarlitos 1:9dd7c64b4a64 1214 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1215
jngarlitos 1:9dd7c64b4a64 1216 if ((new_gpio_inout_set == 1) || (new_gpio_inout_set == 2)) {
jngarlitos 1:9dd7c64b4a64 1217 new_gpio_inout_set -= 1;
jngarlitos 1:9dd7c64b4a64 1218 ret_val = ad77681_gpio_inout(device_adc, new_gpio_inout_set, AD77681_GPIO0);
jngarlitos 1:9dd7c64b4a64 1219 pc.printf("GPIO0 successfully set");
jngarlitos 1:9dd7c64b4a64 1220 } else
jngarlitos 1:9dd7c64b4a64 1221 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1222 break;
jngarlitos 1:9dd7c64b4a64 1223 case 3:
jngarlitos 1:9dd7c64b4a64 1224 pc.printf(" 1 - Set GPIO1 as input\n");
jngarlitos 1:9dd7c64b4a64 1225 pc.printf(" 2 - Set GPIO1 as output\n");
jngarlitos 1:9dd7c64b4a64 1226
jngarlitos 1:9dd7c64b4a64 1227 getUserInput(&new_gpio_inout_set);
jngarlitos 1:9dd7c64b4a64 1228 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1229
jngarlitos 1:9dd7c64b4a64 1230 if ((new_gpio_inout_set == 1) || (new_gpio_inout_set == 2)) {
jngarlitos 1:9dd7c64b4a64 1231 new_gpio_inout_set -= 1;
jngarlitos 1:9dd7c64b4a64 1232 ret_val = ad77681_gpio_inout(device_adc, new_gpio_inout_set, AD77681_GPIO1);
jngarlitos 1:9dd7c64b4a64 1233 pc.printf("GPIO1 successfully set");
jngarlitos 1:9dd7c64b4a64 1234 } else
jngarlitos 1:9dd7c64b4a64 1235 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1236 break;
jngarlitos 1:9dd7c64b4a64 1237 case 4:
jngarlitos 1:9dd7c64b4a64 1238 pc.printf(" 1 - Set GPIO2 as input\n");
jngarlitos 1:9dd7c64b4a64 1239 pc.printf(" 2 - Set GPIO2 as output\n");
jngarlitos 1:9dd7c64b4a64 1240
jngarlitos 1:9dd7c64b4a64 1241 getUserInput(&new_gpio_inout_set);
jngarlitos 1:9dd7c64b4a64 1242 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1243
jngarlitos 1:9dd7c64b4a64 1244 if ((new_gpio_inout_set == 1) || (new_gpio_inout_set == 2)) {
jngarlitos 1:9dd7c64b4a64 1245 new_gpio_inout_set -= 1;
jngarlitos 1:9dd7c64b4a64 1246 ret_val = ad77681_gpio_inout(device_adc, new_gpio_inout_set, AD77681_GPIO2);
jngarlitos 1:9dd7c64b4a64 1247 pc.printf("GPIO2 successfully set");
jngarlitos 1:9dd7c64b4a64 1248 } else
jngarlitos 1:9dd7c64b4a64 1249 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1250 break;
jngarlitos 1:9dd7c64b4a64 1251 case 5:
jngarlitos 1:9dd7c64b4a64 1252 pc.printf(" 1 - Set GPIO3 as input\n");
jngarlitos 1:9dd7c64b4a64 1253 pc.printf(" 2 - Set GPIO3 as output\n");
jngarlitos 1:9dd7c64b4a64 1254
jngarlitos 1:9dd7c64b4a64 1255 getUserInput(&new_gpio_inout_set);
jngarlitos 1:9dd7c64b4a64 1256 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1257
jngarlitos 1:9dd7c64b4a64 1258 if ((new_gpio_inout_set == 1) || (new_gpio_inout_set == 2)) {
jngarlitos 1:9dd7c64b4a64 1259 new_gpio_inout_set -= 1;
jngarlitos 1:9dd7c64b4a64 1260 ret_val = ad77681_gpio_inout(device_adc, new_gpio_inout_set, AD77681_GPIO3);
jngarlitos 1:9dd7c64b4a64 1261 pc.printf("GPIO3 successfully set");
jngarlitos 1:9dd7c64b4a64 1262 } else
jngarlitos 1:9dd7c64b4a64 1263 pc.printf("\nInvalid value\n");
jngarlitos 1:9dd7c64b4a64 1264 break;
jngarlitos 1:9dd7c64b4a64 1265 default:
jngarlitos 1:9dd7c64b4a64 1266 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1267 break;
jngarlitos 1:9dd7c64b4a64 1268 }
jngarlitos 1:9dd7c64b4a64 1269 }
jngarlitos 1:9dd7c64b4a64 1270
jngarlitos 1:9dd7c64b4a64 1271 /**
jngarlitos 1:9dd7c64b4a64 1272 * Additional GPIO settings, part of the ADC_GPIO function
jngarlitos 1:9dd7c64b4a64 1273 *
jngarlitos 1:9dd7c64b4a64 1274 */
jngarlitos 1:9dd7c64b4a64 1275 void static adc_GPIO_settings(void)
jngarlitos 1:9dd7c64b4a64 1276 {
jngarlitos 1:9dd7c64b4a64 1277 uint32_t new_gpio_settings = 0;
jngarlitos 1:9dd7c64b4a64 1278
jngarlitos 1:9dd7c64b4a64 1279 pc.printf(" GPIO Settings: \n");
jngarlitos 1:9dd7c64b4a64 1280 pc.printf(" 1 - Enable all GPIOs (Global enble)\n");
jngarlitos 1:9dd7c64b4a64 1281 pc.printf(" 2 - Disable all GPIOs (Global disable)\n");
jngarlitos 1:9dd7c64b4a64 1282 pc.printf(" 3 - Set GPIO0 - GPIO2 as open drain\n");
jngarlitos 1:9dd7c64b4a64 1283 pc.printf(" 4 - Set GPIO0 - GPIO2 as strong driver\n");
jngarlitos 1:9dd7c64b4a64 1284 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1285
jngarlitos 1:9dd7c64b4a64 1286 getUserInput(&new_gpio_settings);
jngarlitos 1:9dd7c64b4a64 1287 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1288
jngarlitos 1:9dd7c64b4a64 1289 switch (new_gpio_settings) {
jngarlitos 1:9dd7c64b4a64 1290 case 1:
jngarlitos 1:9dd7c64b4a64 1291 ad77681_global_gpio(device_adc, AD77681_GLOBAL_GPIO_ENABLE);
jngarlitos 1:9dd7c64b4a64 1292 pc.printf(" Global GPIO enalbe bit enabled");
jngarlitos 1:9dd7c64b4a64 1293 break;
jngarlitos 1:9dd7c64b4a64 1294 case 2:
jngarlitos 1:9dd7c64b4a64 1295 ad77681_global_gpio(device_adc, AD77681_GLOBAL_GPIO_DISABLE);
jngarlitos 1:9dd7c64b4a64 1296 pc.printf(" Global GPIO enalbe bit disabled");
jngarlitos 1:9dd7c64b4a64 1297 break;
jngarlitos 1:9dd7c64b4a64 1298 default:
jngarlitos 1:9dd7c64b4a64 1299 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1300 break;
jngarlitos 1:9dd7c64b4a64 1301 }
jngarlitos 1:9dd7c64b4a64 1302 }
jngarlitos 1:9dd7c64b4a64 1303
jngarlitos 1:9dd7c64b4a64 1304 /**
jngarlitos 1:9dd7c64b4a64 1305 * Read ADC status from status registers
jngarlitos 1:9dd7c64b4a64 1306 *
jngarlitos 1:9dd7c64b4a64 1307 */
jngarlitos 1:9dd7c64b4a64 1308 void static menu_12_read_master_status(void)
jngarlitos 1:9dd7c64b4a64 1309 {
jngarlitos 1:9dd7c64b4a64 1310 uint8_t reg_read_buf[3];
jngarlitos 1:9dd7c64b4a64 1311 char binary_number[8];
jngarlitos 1:9dd7c64b4a64 1312 char ok[3] = { 'O', 'K' }, fault[6] = { 'F', 'A', 'U', 'L', 'T' };
jngarlitos 1:9dd7c64b4a64 1313
jngarlitos 1:9dd7c64b4a64 1314 ad77681_status(device_adc, current_status);
jngarlitos 1:9dd7c64b4a64 1315 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1316 pc.printf("== MASTER STATUS REGISER\n");
jngarlitos 1:9dd7c64b4a64 1317 pc.printf("Master error: %s\n", ((current_status->master_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1318 pc.printf("ADC error: %s\n", ((current_status->adc_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1319 pc.printf("Dig error: %s\n", ((current_status->dig_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1320 pc.printf("Ext. clock: %s\n", ((current_status->adc_err_ext_clk_qual == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1321 pc.printf("Filter saturated: %s\n", ((current_status->adc_filt_saturated == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1322 pc.printf("Filter not settled: %s\n", ((current_status->adc_filt_not_settled == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1323 pc.printf("SPI error: %s\n", ((current_status->spi_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1324 pc.printf("POR Flag: %s\n", ((current_status->por_flag == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1325
jngarlitos 1:9dd7c64b4a64 1326 if (current_status->spi_error == 1) {
jngarlitos 1:9dd7c64b4a64 1327 pc.printf("\n== SPI DIAG STATUS REGISER\n");
jngarlitos 1:9dd7c64b4a64 1328 pc.printf("SPI ignore error: %s\n", ((current_status->spi_ignore == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1329 pc.printf("SPI clock count error: %s\n", ((current_status->spi_clock_count == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1330 pc.printf("SPI read error: %s\n", ((current_status->spi_read_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1331 pc.printf("SPI write error: %s\n", ((current_status->spi_write_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1332 pc.printf("SPI CRC error: %s\n", ((current_status->spi_crc_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1333 }
jngarlitos 1:9dd7c64b4a64 1334 if (current_status->adc_error == 1) {
jngarlitos 1:9dd7c64b4a64 1335 pc.printf("\n== ADC DIAG STATUS REGISER\n");
jngarlitos 1:9dd7c64b4a64 1336 pc.printf("DLDO PSM error: %s\n", ((current_status->dldo_psm_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1337 pc.printf("ALDO PSM error: %s\n", ((current_status->aldo_psm_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1338 pc.printf("REF DET error: %s\n", ((current_status->ref_det_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1339 pc.printf("FILT SAT error: %s\n", ((current_status->filt_sat_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1340 pc.printf("FILT NOT SET error: %s\n", ((current_status->filt_not_set_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1341 pc.printf("EXT CLK QUAL error: %s\n", ((current_status->ext_clk_qual_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1342 }
jngarlitos 1:9dd7c64b4a64 1343 if (current_status->dig_error == 1) {
jngarlitos 1:9dd7c64b4a64 1344 pc.printf("\n== DIGITAL DIAG STATUS REGISER\n");
jngarlitos 1:9dd7c64b4a64 1345 pc.printf("Memory map CRC error: %s\n", ((current_status->memoy_map_crc_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1346 pc.printf("RAM CRC error: %s\n", ((current_status->ram_crc_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1347 pc.printf("FUSE CRC error: %s\n", ((current_status->fuse_crc_error == 0) ? (ok) : (fault)));
jngarlitos 1:9dd7c64b4a64 1348 }
jngarlitos 1:9dd7c64b4a64 1349 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1350 print_prompt();
jngarlitos 1:9dd7c64b4a64 1351 }
jngarlitos 1:9dd7c64b4a64 1352
jngarlitos 1:9dd7c64b4a64 1353 /**
jngarlitos 1:9dd7c64b4a64 1354 * Set Vref anc MCLK as "exteranl" values, depending on you setup
jngarlitos 1:9dd7c64b4a64 1355 *
jngarlitos 1:9dd7c64b4a64 1356 */
jngarlitos 1:9dd7c64b4a64 1357 void static menu_13_mclk_vref(void)
jngarlitos 1:9dd7c64b4a64 1358 {
jngarlitos 1:9dd7c64b4a64 1359 uint32_t input = 0, new_settings = 0;
jngarlitos 1:9dd7c64b4a64 1360 int32_t ret;
jngarlitos 1:9dd7c64b4a64 1361
jngarlitos 1:9dd7c64b4a64 1362 pc.printf(" Set Vref and Mclk: \n");
jngarlitos 1:9dd7c64b4a64 1363 pc.printf(" 1 - Change Vref\n");
jngarlitos 1:9dd7c64b4a64 1364 pc.printf(" 2 - Change MCLK\n");
jngarlitos 1:9dd7c64b4a64 1365 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1366
jngarlitos 1:9dd7c64b4a64 1367 getUserInput(&new_settings);
jngarlitos 1:9dd7c64b4a64 1368 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1369
jngarlitos 1:9dd7c64b4a64 1370 switch (new_settings) {
jngarlitos 1:9dd7c64b4a64 1371 case 1:
jngarlitos 1:9dd7c64b4a64 1372 pc.printf(" Change Vref from %d mV to [mV]: ", device_adc->vref); // Vref change
jngarlitos 1:9dd7c64b4a64 1373 ret = getUserInput(&input);
jngarlitos 1:9dd7c64b4a64 1374
jngarlitos 1:9dd7c64b4a64 1375 if ((input >= 1000) && (input <= 5000) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1376 pc.printf("\n New Vref value is %d mV", input);
jngarlitos 1:9dd7c64b4a64 1377 device_adc->vref = input;
jngarlitos 1:9dd7c64b4a64 1378
jngarlitos 1:9dd7c64b4a64 1379 #ifdef CN0540_ADI_FFT_H_
jngarlitos 1:9dd7c64b4a64 1380 // Update the Vref, Mclk and sampling rate
jngarlitos 1:9dd7c64b4a64 1381 update_FFT_enviroment(device_adc->vref, device_adc->mclk, device_adc->sample_rate, FFT_data);
jngarlitos 1:9dd7c64b4a64 1382 #endif //CN0540_ADI_FFT_H_
jngarlitos 1:9dd7c64b4a64 1383 } else
jngarlitos 1:9dd7c64b4a64 1384 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1385 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1386 break;
jngarlitos 1:9dd7c64b4a64 1387 case 2:
jngarlitos 1:9dd7c64b4a64 1388 pc.printf(" Change MCLK from %d kHz to [kHz]: ", device_adc->mclk); // MCLK change
jngarlitos 1:9dd7c64b4a64 1389 ret = getUserInput(&input);
jngarlitos 1:9dd7c64b4a64 1390
jngarlitos 1:9dd7c64b4a64 1391 if ((input >= 10000) && (input <= 50000) && (ret == SUCCESS)){
jngarlitos 1:9dd7c64b4a64 1392 pc.printf("\n New MCLK value is %d kHz\n", input);
jngarlitos 1:9dd7c64b4a64 1393 device_adc->vref = input;
jngarlitos 1:9dd7c64b4a64 1394 ad77681_update_sample_rate(device_adc); // Update the sample rate after changinig the MCLK
jngarlitos 1:9dd7c64b4a64 1395
jngarlitos 1:9dd7c64b4a64 1396 #ifdef CN0540_ADI_FFT_H_
jngarlitos 1:9dd7c64b4a64 1397 // Update the Vref, Mclk and sampling rate
jngarlitos 1:9dd7c64b4a64 1398 update_FFT_enviroment(device_adc->vref, device_adc->mclk, device_adc->sample_rate, FFT_data);
jngarlitos 1:9dd7c64b4a64 1399 #endif //CN0540_ADI_FFT_H_
jngarlitos 1:9dd7c64b4a64 1400 } else
jngarlitos 1:9dd7c64b4a64 1401 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1402 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1403 break;
jngarlitos 1:9dd7c64b4a64 1404 default:
jngarlitos 1:9dd7c64b4a64 1405 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1406 break;
jngarlitos 1:9dd7c64b4a64 1407 }
jngarlitos 1:9dd7c64b4a64 1408 print_prompt();
jngarlitos 1:9dd7c64b4a64 1409 }
jngarlitos 1:9dd7c64b4a64 1410
jngarlitos 1:9dd7c64b4a64 1411 /**
jngarlitos 1:9dd7c64b4a64 1412 * Print measured data and transfered to voltage
jngarlitos 1:9dd7c64b4a64 1413 *
jngarlitos 1:9dd7c64b4a64 1414 */
jngarlitos 1:9dd7c64b4a64 1415 void static menu_14_print_measured_data(void)
jngarlitos 1:9dd7c64b4a64 1416 {
jngarlitos 1:9dd7c64b4a64 1417 double voltage;
jngarlitos 1:9dd7c64b4a64 1418 int32_t shifted_data;
jngarlitos 1:9dd7c64b4a64 1419 uint16_t i;
jngarlitos 1:9dd7c64b4a64 1420 char buf[15];
jngarlitos 1:9dd7c64b4a64 1421
jngarlitos 1:9dd7c64b4a64 1422 if (measured_data.finish) {
jngarlitos 1:9dd7c64b4a64 1423 // Printing Voltage
jngarlitos 1:9dd7c64b4a64 1424 pc.printf("\n\nVoltage\n");
jngarlitos 1:9dd7c64b4a64 1425 for ( i = 0; i < measured_data.samples; i++) {
jngarlitos 1:9dd7c64b4a64 1426 ad77681_data_to_voltage(device_adc, &measured_data.raw_data[i], &voltage);
jngarlitos 1:9dd7c64b4a64 1427 pc.printf("%.9f \n",voltage);
jngarlitos 1:9dd7c64b4a64 1428 }
jngarlitos 1:9dd7c64b4a64 1429 // Printing Codes
jngarlitos 1:9dd7c64b4a64 1430 pc.printf("\n\nCodes\n");
jngarlitos 1:9dd7c64b4a64 1431 for(i = 0 ; i < measured_data.samples ; i++) {
jngarlitos 1:9dd7c64b4a64 1432 if (measured_data.raw_data[i] & 0x800000)
jngarlitos 1:9dd7c64b4a64 1433 shifted_data = (int32_t)((0xFF << 24) | measured_data.raw_data[i]);
jngarlitos 1:9dd7c64b4a64 1434 else
jngarlitos 1:9dd7c64b4a64 1435 shifted_data = (int32_t)((0x00 << 24) | measured_data.raw_data[i]);
jngarlitos 1:9dd7c64b4a64 1436 pc.printf("%d\n", shifted_data + AD7768_HALF_SCALE);
jngarlitos 1:9dd7c64b4a64 1437 }
jngarlitos 1:9dd7c64b4a64 1438 // Printing Raw Date
jngarlitos 1:9dd7c64b4a64 1439 pc.printf("\n\nRaw data\n");
jngarlitos 1:9dd7c64b4a64 1440 for (i = 0; i < measured_data.samples; i++)
jngarlitos 1:9dd7c64b4a64 1441 pc.printf("%d\n", measured_data.raw_data[i]);
jngarlitos 1:9dd7c64b4a64 1442 // Set measured_data.finish to false after Printing
jngarlitos 1:9dd7c64b4a64 1443 measured_data.finish = false;
jngarlitos 1:9dd7c64b4a64 1444 } else
jngarlitos 1:9dd7c64b4a64 1445 pc.printf("Data not prepared\n");
jngarlitos 1:9dd7c64b4a64 1446 print_prompt();
jngarlitos 1:9dd7c64b4a64 1447 }
jngarlitos 1:9dd7c64b4a64 1448
jngarlitos 1:9dd7c64b4a64 1449 /**
jngarlitos 1:9dd7c64b4a64 1450 * Set data output mode
jngarlitos 1:9dd7c64b4a64 1451 *
jngarlitos 1:9dd7c64b4a64 1452 */
jngarlitos 1:9dd7c64b4a64 1453 void static menu_15_set_adc_data_output_mode(void)
jngarlitos 1:9dd7c64b4a64 1454 {
jngarlitos 1:9dd7c64b4a64 1455 uint32_t new_data_mode = 0, new_length = 0, new_status = 0, new_crc = 0, ret;
jngarlitos 1:9dd7c64b4a64 1456
jngarlitos 1:9dd7c64b4a64 1457 pc.printf(" ADC data outpup modes: \n");
jngarlitos 1:9dd7c64b4a64 1458 pc.printf(" 1 - Continuous: waiting for DRDY\n");
jngarlitos 1:9dd7c64b4a64 1459 pc.printf(" 2 - Continuous one shot: waiting for SYNC_IN\n");
jngarlitos 1:9dd7c64b4a64 1460 pc.printf(" 3 - Single-conversion standby\n");
jngarlitos 1:9dd7c64b4a64 1461 pc.printf(" 4 - Periodic standby\n");
jngarlitos 1:9dd7c64b4a64 1462 pc.printf(" 5 - Standby mode\n");
jngarlitos 1:9dd7c64b4a64 1463 pc.printf(" 6 - 16bit or 24bit data format\n");
jngarlitos 1:9dd7c64b4a64 1464 pc.printf(" 7 - Status bit output\n");
jngarlitos 1:9dd7c64b4a64 1465 pc.printf(" 8 - Switch form diag mode to measure\n");
jngarlitos 1:9dd7c64b4a64 1466 pc.printf(" 9 - Switch form measure to diag mode\n");
jngarlitos 1:9dd7c64b4a64 1467 pc.printf(" 10 - Set CRC type\n");
jngarlitos 1:9dd7c64b4a64 1468 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1469
jngarlitos 1:9dd7c64b4a64 1470 getUserInput(&new_data_mode);
jngarlitos 1:9dd7c64b4a64 1471 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1472
jngarlitos 1:9dd7c64b4a64 1473 switch (new_data_mode) {
jngarlitos 1:9dd7c64b4a64 1474 case 1:
jngarlitos 1:9dd7c64b4a64 1475 ad77681_set_conv_mode(device_adc, AD77681_CONV_CONTINUOUS, device_adc->diag_mux_sel, device_adc->conv_diag_sel);// DIAG MUX NOT SELECTED
jngarlitos 1:9dd7c64b4a64 1476 pc.printf(" Continuous mode set\n");
jngarlitos 1:9dd7c64b4a64 1477 break;
jngarlitos 1:9dd7c64b4a64 1478 case 2:
jngarlitos 1:9dd7c64b4a64 1479 ad77681_set_conv_mode(device_adc, AD77681_CONV_ONE_SHOT, device_adc->diag_mux_sel, device_adc->conv_diag_sel);
jngarlitos 1:9dd7c64b4a64 1480 pc.printf(" Continuous one shot conversion set\n");
jngarlitos 1:9dd7c64b4a64 1481 break;
jngarlitos 1:9dd7c64b4a64 1482 case 3:
jngarlitos 1:9dd7c64b4a64 1483 ad77681_set_conv_mode(device_adc, AD77681_CONV_SINGLE, device_adc->diag_mux_sel, device_adc->conv_diag_sel);
jngarlitos 1:9dd7c64b4a64 1484 pc.printf(" Single conversion standby mode set\n");
jngarlitos 1:9dd7c64b4a64 1485 break;
jngarlitos 1:9dd7c64b4a64 1486 case 4:
jngarlitos 1:9dd7c64b4a64 1487 ad77681_set_conv_mode(device_adc, AD77681_CONV_PERIODIC, device_adc->diag_mux_sel, device_adc->conv_diag_sel);
jngarlitos 1:9dd7c64b4a64 1488 pc.printf(" Periodiec standby mode set\n");
jngarlitos 1:9dd7c64b4a64 1489 break;
jngarlitos 1:9dd7c64b4a64 1490 case 5:
jngarlitos 1:9dd7c64b4a64 1491 ad77681_set_conv_mode(device_adc, AD77681_CONV_STANDBY, device_adc->diag_mux_sel, device_adc->conv_diag_sel);
jngarlitos 1:9dd7c64b4a64 1492 pc.printf(" Standby mode set\n");
jngarlitos 1:9dd7c64b4a64 1493 break;
jngarlitos 1:9dd7c64b4a64 1494 case 6:
jngarlitos 1:9dd7c64b4a64 1495 pc.printf(" Conversion length select: \n");
jngarlitos 1:9dd7c64b4a64 1496 pc.printf(" 1 - 24bit length\n");
jngarlitos 1:9dd7c64b4a64 1497 pc.printf(" 2 - 16bit length\n");
jngarlitos 1:9dd7c64b4a64 1498
jngarlitos 1:9dd7c64b4a64 1499 getUserInput(&new_length);
jngarlitos 1:9dd7c64b4a64 1500 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1501
jngarlitos 1:9dd7c64b4a64 1502 switch (new_length) {
jngarlitos 1:9dd7c64b4a64 1503 case 1:
jngarlitos 1:9dd7c64b4a64 1504 ad77681_set_convlen(device_adc, AD77681_CONV_24BIT);
jngarlitos 1:9dd7c64b4a64 1505 pc.printf(" 24bit data output format selected\n");
jngarlitos 1:9dd7c64b4a64 1506 break;
jngarlitos 1:9dd7c64b4a64 1507 case 2:
jngarlitos 1:9dd7c64b4a64 1508 ad77681_set_convlen(device_adc, AD77681_CONV_16BIT);
jngarlitos 1:9dd7c64b4a64 1509 pc.printf(" 16bit data output format selected\n");
jngarlitos 1:9dd7c64b4a64 1510 break;
jngarlitos 1:9dd7c64b4a64 1511 default:
jngarlitos 1:9dd7c64b4a64 1512 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1513 break;
jngarlitos 1:9dd7c64b4a64 1514 }
jngarlitos 1:9dd7c64b4a64 1515 break;
jngarlitos 1:9dd7c64b4a64 1516 case 7:
jngarlitos 1:9dd7c64b4a64 1517 pc.printf(" Status bit output: \n");
jngarlitos 1:9dd7c64b4a64 1518 pc.printf(" 1 - Enable status bit after each ADC conversion\n");
jngarlitos 1:9dd7c64b4a64 1519 pc.printf(" 2 - Disable status bit after each ADC conversion\n");
jngarlitos 1:9dd7c64b4a64 1520
jngarlitos 1:9dd7c64b4a64 1521 getUserInput(&new_status);
jngarlitos 1:9dd7c64b4a64 1522 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1523
jngarlitos 1:9dd7c64b4a64 1524 switch (new_status) {
jngarlitos 1:9dd7c64b4a64 1525 case 1:
jngarlitos 1:9dd7c64b4a64 1526 ad77681_set_status_bit(device_adc, true);
jngarlitos 1:9dd7c64b4a64 1527 pc.printf(" Status bit enabled\n");
jngarlitos 1:9dd7c64b4a64 1528 break;
jngarlitos 1:9dd7c64b4a64 1529 case 2:
jngarlitos 1:9dd7c64b4a64 1530 ad77681_set_status_bit(device_adc, false);
jngarlitos 1:9dd7c64b4a64 1531 pc.printf(" Status bit disabled\n");
jngarlitos 1:9dd7c64b4a64 1532 break;
jngarlitos 1:9dd7c64b4a64 1533 default:
jngarlitos 1:9dd7c64b4a64 1534 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1535 break;
jngarlitos 1:9dd7c64b4a64 1536 }
jngarlitos 1:9dd7c64b4a64 1537 break;
jngarlitos 1:9dd7c64b4a64 1538 case 8:
jngarlitos 1:9dd7c64b4a64 1539 ad77681_set_conv_mode(device_adc, device_adc->conv_mode, device_adc->diag_mux_sel, false);// DIAG MUX NOT SELECTED
jngarlitos 1:9dd7c64b4a64 1540 pc.printf(" Measure mode selected\n");
jngarlitos 1:9dd7c64b4a64 1541 break;
jngarlitos 1:9dd7c64b4a64 1542 case 9:
jngarlitos 1:9dd7c64b4a64 1543 ad77681_set_conv_mode(device_adc, device_adc->conv_mode, device_adc->diag_mux_sel, true); // DIAG MUX SELECTED
jngarlitos 1:9dd7c64b4a64 1544 pc.printf(" Diagnostic mode selected\n");
jngarlitos 1:9dd7c64b4a64 1545 break;
jngarlitos 1:9dd7c64b4a64 1546 case 10:
jngarlitos 1:9dd7c64b4a64 1547 pc.printf(" CRC settings \n");
jngarlitos 1:9dd7c64b4a64 1548 pc.printf(" 1 - Disable CRC\n");
jngarlitos 1:9dd7c64b4a64 1549 pc.printf(" 2 - 8-bit polynomial CRC\n");
jngarlitos 1:9dd7c64b4a64 1550 pc.printf(" 3 - XOR based CRC\n");
jngarlitos 1:9dd7c64b4a64 1551
jngarlitos 1:9dd7c64b4a64 1552 getUserInput(&new_crc);
jngarlitos 1:9dd7c64b4a64 1553 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1554
jngarlitos 1:9dd7c64b4a64 1555 switch (new_crc) {
jngarlitos 1:9dd7c64b4a64 1556 case 1:
jngarlitos 1:9dd7c64b4a64 1557 ad77681_set_crc_sel(device_adc, AD77681_NO_CRC);
jngarlitos 1:9dd7c64b4a64 1558 pc.printf(" CRC disabled\n");
jngarlitos 1:9dd7c64b4a64 1559 break;
jngarlitos 1:9dd7c64b4a64 1560 case 2:
jngarlitos 1:9dd7c64b4a64 1561 ad77681_set_crc_sel(device_adc, AD77681_CRC);
jngarlitos 1:9dd7c64b4a64 1562 pc.printf(" 8-bit polynomial CRC method selected\n");
jngarlitos 1:9dd7c64b4a64 1563 break;
jngarlitos 1:9dd7c64b4a64 1564 case 3:
jngarlitos 1:9dd7c64b4a64 1565 ad77681_set_crc_sel(device_adc, AD77681_XOR);
jngarlitos 1:9dd7c64b4a64 1566 pc.printf(" XOR based CRC method selected\n");
jngarlitos 1:9dd7c64b4a64 1567 break;
jngarlitos 1:9dd7c64b4a64 1568 default:
jngarlitos 1:9dd7c64b4a64 1569 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1570 break;
jngarlitos 1:9dd7c64b4a64 1571 }
jngarlitos 1:9dd7c64b4a64 1572 break;
jngarlitos 1:9dd7c64b4a64 1573 default:
jngarlitos 1:9dd7c64b4a64 1574 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1575 break;
jngarlitos 1:9dd7c64b4a64 1576 }
jngarlitos 1:9dd7c64b4a64 1577 print_prompt();
jngarlitos 1:9dd7c64b4a64 1578 }
jngarlitos 1:9dd7c64b4a64 1579
jngarlitos 1:9dd7c64b4a64 1580 /**
jngarlitos 1:9dd7c64b4a64 1581 * Set diagnostic mode
jngarlitos 1:9dd7c64b4a64 1582 *
jngarlitos 1:9dd7c64b4a64 1583 */
jngarlitos 1:9dd7c64b4a64 1584 void static menu_16_set_adc_diagnostic_mode(void)
jngarlitos 1:9dd7c64b4a64 1585 {
jngarlitos 1:9dd7c64b4a64 1586 uint32_t new_diag_mode = 0;
jngarlitos 1:9dd7c64b4a64 1587
jngarlitos 1:9dd7c64b4a64 1588 pc.printf(" ADC diagnostic modes: \n");
jngarlitos 1:9dd7c64b4a64 1589 pc.printf(" 1 - Internal temperature sensor\n");
jngarlitos 1:9dd7c64b4a64 1590 pc.printf(" 2 - AIN shorted\n");
jngarlitos 1:9dd7c64b4a64 1591 pc.printf(" 3 - Positive full-scale\n");
jngarlitos 1:9dd7c64b4a64 1592 pc.printf(" 4 - Negative full-scale\n");
jngarlitos 1:9dd7c64b4a64 1593 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1594
jngarlitos 1:9dd7c64b4a64 1595 getUserInput(&new_diag_mode);
jngarlitos 1:9dd7c64b4a64 1596 pc.putc('\n');
jngarlitos 1:9dd7c64b4a64 1597
jngarlitos 1:9dd7c64b4a64 1598 switch (new_diag_mode) {
jngarlitos 1:9dd7c64b4a64 1599 case 1:
jngarlitos 1:9dd7c64b4a64 1600 ad77681_set_conv_mode(device_adc, device_adc->conv_mode, AD77681_TEMP_SENSOR, true);
jngarlitos 1:9dd7c64b4a64 1601 pc.printf(" Diagnostic mode: Internal temperature sensor selected\n");
jngarlitos 1:9dd7c64b4a64 1602 break;
jngarlitos 1:9dd7c64b4a64 1603 case 2:
jngarlitos 1:9dd7c64b4a64 1604 ad77681_set_conv_mode(device_adc, device_adc->conv_mode, AD77681_AIN_SHORT, true);
jngarlitos 1:9dd7c64b4a64 1605 pc.printf(" Diagnostic mode: AIN shorted selected\n");
jngarlitos 1:9dd7c64b4a64 1606 break;
jngarlitos 1:9dd7c64b4a64 1607 case 3:
jngarlitos 1:9dd7c64b4a64 1608 ad77681_set_conv_mode(device_adc, device_adc->conv_mode, AD77681_POSITIVE_FS, true);
jngarlitos 1:9dd7c64b4a64 1609 pc.printf(" Diagnostic mode: Positive full-scale selected\n");
jngarlitos 1:9dd7c64b4a64 1610 break;
jngarlitos 1:9dd7c64b4a64 1611 case 4:
jngarlitos 1:9dd7c64b4a64 1612 ad77681_set_conv_mode(device_adc, device_adc->conv_mode, AD77681_NEGATIVE_FS, true);
jngarlitos 1:9dd7c64b4a64 1613 pc.printf(" Diagnostic mode: Negative full-scale selected\n");
jngarlitos 1:9dd7c64b4a64 1614 break;
jngarlitos 1:9dd7c64b4a64 1615 default:
jngarlitos 1:9dd7c64b4a64 1616 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1617 break;
jngarlitos 1:9dd7c64b4a64 1618 }
jngarlitos 1:9dd7c64b4a64 1619 print_prompt();
jngarlitos 1:9dd7c64b4a64 1620 }
jngarlitos 1:9dd7c64b4a64 1621
jngarlitos 1:9dd7c64b4a64 1622 /**
jngarlitos 1:9dd7c64b4a64 1623 * Do the FFT
jngarlitos 1:9dd7c64b4a64 1624 *
jngarlitos 1:9dd7c64b4a64 1625 */
jngarlitos 1:9dd7c64b4a64 1626 void static menu_17_do_the_fft(void)
jngarlitos 1:9dd7c64b4a64 1627 {
jngarlitos 1:9dd7c64b4a64 1628 pc.printf(" FFT in progress...\n");
jngarlitos 1:9dd7c64b4a64 1629 measured_data.samples = FFT_data->fft_length * 2;
jngarlitos 1:9dd7c64b4a64 1630 measured_data.samples = 4096;
jngarlitos 1:9dd7c64b4a64 1631 measured_data.finish = false;
jngarlitos 1:9dd7c64b4a64 1632 measured_data.count = 0;
jngarlitos 1:9dd7c64b4a64 1633 pc.printf("Sampling....\n");
jngarlitos 1:9dd7c64b4a64 1634 cont_sampling();
jngarlitos 1:9dd7c64b4a64 1635 perform_FFT(measured_data.raw_data, FFT_data, FFT_meas, device_adc->sample_rate);
jngarlitos 1:9dd7c64b4a64 1636 pc.printf(" FFT Done!\n");
jngarlitos 1:9dd7c64b4a64 1637 measured_data.finish = false;
jngarlitos 1:9dd7c64b4a64 1638
jngarlitos 1:9dd7c64b4a64 1639 pc.printf("\n THD:\t\t%.3f dB", FFT_meas->THD);
jngarlitos 1:9dd7c64b4a64 1640 pc.printf("\n SNR:\t\t%.3f dB", FFT_meas->SNR);
jngarlitos 1:9dd7c64b4a64 1641 pc.printf("\n DR:\t\t%.3f dB", FFT_meas->DR);
jngarlitos 1:9dd7c64b4a64 1642 pc.printf("\n Fundamental:\t%.3f dBFS", FFT_meas->harmonics_mag_dbfs[0]);
jngarlitos 1:9dd7c64b4a64 1643 pc.printf("\n Fundamental:\t%.3f Hz", FFT_meas->harmonics_freq[0]*FFT_data->bin_width);
jngarlitos 1:9dd7c64b4a64 1644 pc.printf("\n RMS noise:\t%.6f uV", FFT_meas->RMS_noise * 1000000.0);
jngarlitos 1:9dd7c64b4a64 1645 pc.printf("\n LSB noise:\t%.3f", FFT_meas->transition_noise_LSB);
jngarlitos 1:9dd7c64b4a64 1646
jngarlitos 1:9dd7c64b4a64 1647 print_prompt();
jngarlitos 1:9dd7c64b4a64 1648 }
jngarlitos 1:9dd7c64b4a64 1649
jngarlitos 1:9dd7c64b4a64 1650 /**
jngarlitos 1:9dd7c64b4a64 1651 * Setting of the FFT module
jngarlitos 1:9dd7c64b4a64 1652 *
jngarlitos 1:9dd7c64b4a64 1653 */
jngarlitos 1:9dd7c64b4a64 1654 void static menu_18_fft_settings(void)
jngarlitos 1:9dd7c64b4a64 1655 {
jngarlitos 1:9dd7c64b4a64 1656 uint32_t new_menu_select, new_window, new_sample_count;
jngarlitos 1:9dd7c64b4a64 1657
jngarlitos 1:9dd7c64b4a64 1658 pc.printf(" FFT settings: \n");
jngarlitos 1:9dd7c64b4a64 1659 pc.printf(" 1 - Set window type\n");
jngarlitos 1:9dd7c64b4a64 1660 pc.printf(" 2 - Set sample count\n");
jngarlitos 1:9dd7c64b4a64 1661 pc.printf(" 3 - Print FFT plot\n");
jngarlitos 1:9dd7c64b4a64 1662 pc.printf(" Select an option: \n\n");
jngarlitos 1:9dd7c64b4a64 1663
jngarlitos 1:9dd7c64b4a64 1664 getUserInput(&new_menu_select);
jngarlitos 1:9dd7c64b4a64 1665
jngarlitos 1:9dd7c64b4a64 1666 switch (new_menu_select) {
jngarlitos 1:9dd7c64b4a64 1667 case 1:
jngarlitos 1:9dd7c64b4a64 1668 pc.printf(" Choose window type:\n");
jngarlitos 1:9dd7c64b4a64 1669 pc.printf(" 1 - 7-term Blackman-Harris\n");
jngarlitos 1:9dd7c64b4a64 1670 pc.printf(" 2 - Rectangular\n");
jngarlitos 1:9dd7c64b4a64 1671
jngarlitos 1:9dd7c64b4a64 1672 getUserInput(&new_window);
jngarlitos 1:9dd7c64b4a64 1673
jngarlitos 1:9dd7c64b4a64 1674 switch (new_window) {
jngarlitos 1:9dd7c64b4a64 1675 case 1:
jngarlitos 1:9dd7c64b4a64 1676 pc.printf(" 7-7-term Blackman-Harris window selected\n");
jngarlitos 1:9dd7c64b4a64 1677 FFT_data->window = BLACKMAN_HARRIS_7TERM;
jngarlitos 1:9dd7c64b4a64 1678 break;
jngarlitos 1:9dd7c64b4a64 1679 case 2:
jngarlitos 1:9dd7c64b4a64 1680 pc.printf(" Rectalngular window selected\n");
jngarlitos 1:9dd7c64b4a64 1681 FFT_data->window = RECTANGULAR;
jngarlitos 1:9dd7c64b4a64 1682 break;
jngarlitos 1:9dd7c64b4a64 1683 default:
jngarlitos 1:9dd7c64b4a64 1684 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1685 break;
jngarlitos 1:9dd7c64b4a64 1686 }
jngarlitos 1:9dd7c64b4a64 1687 break;
jngarlitos 1:9dd7c64b4a64 1688 case 2:
jngarlitos 1:9dd7c64b4a64 1689 pc.printf(" Set sample count:\n");
jngarlitos 1:9dd7c64b4a64 1690 pc.printf(" 1 - 4096 samples\n");
jngarlitos 1:9dd7c64b4a64 1691 pc.printf(" 2 - 1024 samples\n");
jngarlitos 1:9dd7c64b4a64 1692 pc.printf(" 3 - 256 samples\n");
jngarlitos 1:9dd7c64b4a64 1693 pc.printf(" 4 - 64 samples\n");
jngarlitos 1:9dd7c64b4a64 1694 pc.printf(" 5 - 16 samples\n");
jngarlitos 1:9dd7c64b4a64 1695
jngarlitos 1:9dd7c64b4a64 1696 getUserInput(&new_sample_count);
jngarlitos 1:9dd7c64b4a64 1697
jngarlitos 1:9dd7c64b4a64 1698 switch (new_sample_count) {
jngarlitos 1:9dd7c64b4a64 1699 case 1:
jngarlitos 1:9dd7c64b4a64 1700 pc.printf(" 4096 samples selected\n");
jngarlitos 1:9dd7c64b4a64 1701 FFT_init(4096, FFT_data); // Update the FFT module with a new sample count
jngarlitos 1:9dd7c64b4a64 1702 break;
jngarlitos 1:9dd7c64b4a64 1703 case 2:
jngarlitos 1:9dd7c64b4a64 1704 pc.printf(" 1024 samples selected\n");
jngarlitos 1:9dd7c64b4a64 1705 FFT_init(1024, FFT_data);
jngarlitos 1:9dd7c64b4a64 1706 break;
jngarlitos 1:9dd7c64b4a64 1707 case 3:
jngarlitos 1:9dd7c64b4a64 1708 pc.printf(" 256 samples selected\n");
jngarlitos 1:9dd7c64b4a64 1709 FFT_init(256, FFT_data);
jngarlitos 1:9dd7c64b4a64 1710 break;
jngarlitos 1:9dd7c64b4a64 1711 case 4:
jngarlitos 1:9dd7c64b4a64 1712 pc.printf(" 64 samples selected\n");
jngarlitos 1:9dd7c64b4a64 1713 FFT_init(64, FFT_data);
jngarlitos 1:9dd7c64b4a64 1714 break;
jngarlitos 1:9dd7c64b4a64 1715 case 5:
jngarlitos 1:9dd7c64b4a64 1716 pc.printf(" 16 samples selected\n");
jngarlitos 1:9dd7c64b4a64 1717 FFT_init(16, FFT_data);
jngarlitos 1:9dd7c64b4a64 1718 break;
jngarlitos 1:9dd7c64b4a64 1719 default:
jngarlitos 1:9dd7c64b4a64 1720 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1721 break;
jngarlitos 1:9dd7c64b4a64 1722 }
jngarlitos 1:9dd7c64b4a64 1723 break;
jngarlitos 1:9dd7c64b4a64 1724 case 3:
jngarlitos 1:9dd7c64b4a64 1725 if (FFT_data->fft_done == true) {
jngarlitos 1:9dd7c64b4a64 1726 pc.printf(" Printing FFT plot in dB:\n");
jngarlitos 1:9dd7c64b4a64 1727
jngarlitos 1:9dd7c64b4a64 1728 for (uint16_t i = 0; i < FFT_data->fft_length; i++)
jngarlitos 1:9dd7c64b4a64 1729 pc.printf("%.4f\n", FFT_data->fft_dB[i]);
jngarlitos 1:9dd7c64b4a64 1730 }
jngarlitos 1:9dd7c64b4a64 1731 else
jngarlitos 1:9dd7c64b4a64 1732 pc.printf(" Data not prepared\n");
jngarlitos 1:9dd7c64b4a64 1733 break;
jngarlitos 1:9dd7c64b4a64 1734 default:
jngarlitos 1:9dd7c64b4a64 1735 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1736 break;
jngarlitos 1:9dd7c64b4a64 1737 }
jngarlitos 1:9dd7c64b4a64 1738 print_prompt();
jngarlitos 1:9dd7c64b4a64 1739 }
jngarlitos 1:9dd7c64b4a64 1740
jngarlitos 1:9dd7c64b4a64 1741 /**
jngarlitos 1:9dd7c64b4a64 1742 * Set Gains and Offsets
jngarlitos 1:9dd7c64b4a64 1743 *
jngarlitos 1:9dd7c64b4a64 1744 */
jngarlitos 1:9dd7c64b4a64 1745 void static menu_19_gains_offsets(void)
jngarlitos 1:9dd7c64b4a64 1746 {
jngarlitos 1:9dd7c64b4a64 1747 uint32_t gain_offset, new_menu_select;
jngarlitos 1:9dd7c64b4a64 1748 int32_t ret;
jngarlitos 1:9dd7c64b4a64 1749
jngarlitos 1:9dd7c64b4a64 1750 pc.printf(" Gains and Offsets settings: \n");
jngarlitos 1:9dd7c64b4a64 1751 pc.printf(" 1 - Set gain\n");
jngarlitos 1:9dd7c64b4a64 1752 pc.printf(" 2 - Set offset\n");
jngarlitos 1:9dd7c64b4a64 1753 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1754
jngarlitos 1:9dd7c64b4a64 1755 getUserInput(&new_menu_select);
jngarlitos 1:9dd7c64b4a64 1756
jngarlitos 1:9dd7c64b4a64 1757 switch (new_menu_select) {
jngarlitos 1:9dd7c64b4a64 1758 case 1:
jngarlitos 1:9dd7c64b4a64 1759 pc.printf(" Insert new Gain value in decimal form\n");
jngarlitos 1:9dd7c64b4a64 1760 ret = getUserInput(&gain_offset);
jngarlitos 1:9dd7c64b4a64 1761
jngarlitos 1:9dd7c64b4a64 1762 if ((gain_offset <= 0xFFFFFF) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1763 ad77681_apply_gain(device_adc, gain_offset);
jngarlitos 1:9dd7c64b4a64 1764 pc.printf(" Value %d has been successfully inserted to the Gain register\n", gain_offset);
jngarlitos 1:9dd7c64b4a64 1765 } else
jngarlitos 1:9dd7c64b4a64 1766 pc.printf(" Invalid value\n");
jngarlitos 1:9dd7c64b4a64 1767 break;
jngarlitos 1:9dd7c64b4a64 1768 case 2:
jngarlitos 1:9dd7c64b4a64 1769 pc.printf(" Insert new Offset value in decimal form\n");
jngarlitos 1:9dd7c64b4a64 1770 ret = getUserInput(&gain_offset);
jngarlitos 1:9dd7c64b4a64 1771 if ((gain_offset <= 0xFFFFFF) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1772 ad77681_apply_offset(device_adc, gain_offset);
jngarlitos 1:9dd7c64b4a64 1773 pc.printf(" Value %d has been successfully inserted to the Offset register\n", gain_offset);
jngarlitos 1:9dd7c64b4a64 1774 } else
jngarlitos 1:9dd7c64b4a64 1775 pc.printf(" Invalid value\n");
jngarlitos 1:9dd7c64b4a64 1776 break;
jngarlitos 1:9dd7c64b4a64 1777 default:
jngarlitos 1:9dd7c64b4a64 1778 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1779 break;
jngarlitos 1:9dd7c64b4a64 1780 }
jngarlitos 1:9dd7c64b4a64 1781 print_prompt();
jngarlitos 1:9dd7c64b4a64 1782 }
jngarlitos 1:9dd7c64b4a64 1783
jngarlitos 1:9dd7c64b4a64 1784 /**
jngarlitos 1:9dd7c64b4a64 1785 * Chceck read and write functionaity by writing to and reading from scratchpad register
jngarlitos 1:9dd7c64b4a64 1786 *
jngarlitos 1:9dd7c64b4a64 1787 */
jngarlitos 1:9dd7c64b4a64 1788 void static menu_20_check_scratchpad(void)
jngarlitos 1:9dd7c64b4a64 1789 {
jngarlitos 1:9dd7c64b4a64 1790 int32_t ret;
jngarlitos 1:9dd7c64b4a64 1791 uint32_t ret_val;
jngarlitos 1:9dd7c64b4a64 1792 uint32_t new_menu_select;
jngarlitos 1:9dd7c64b4a64 1793 uint8_t chceck_sequence;
jngarlitos 1:9dd7c64b4a64 1794
jngarlitos 1:9dd7c64b4a64 1795 pc.printf(" Scratchpad check\n");
jngarlitos 1:9dd7c64b4a64 1796 pc.printf(" Insert 8bit number for scratchpad check: \n");
jngarlitos 1:9dd7c64b4a64 1797
jngarlitos 1:9dd7c64b4a64 1798 ret = getUserInput(&new_menu_select);
jngarlitos 1:9dd7c64b4a64 1799
jngarlitos 1:9dd7c64b4a64 1800 if ((new_menu_select <= 0xFF) && (new_menu_select >= 0) && (ret == SUCCESS)) {
jngarlitos 1:9dd7c64b4a64 1801 chceck_sequence = (uint8_t)(new_menu_select);
jngarlitos 1:9dd7c64b4a64 1802 ret_val = ad77681_scratchpad(device_adc, &chceck_sequence);
jngarlitos 1:9dd7c64b4a64 1803 pc.printf(" Insered sequence: %d\n Returned sequence: %d\n", new_menu_select, chceck_sequence);
jngarlitos 1:9dd7c64b4a64 1804 if (ret_val == SUCCESS)
jngarlitos 1:9dd7c64b4a64 1805 pc.printf(" SUCCESS!\n");
jngarlitos 1:9dd7c64b4a64 1806 else
jngarlitos 1:9dd7c64b4a64 1807 pc.printf(" FAILURE!\n");
jngarlitos 1:9dd7c64b4a64 1808 } else
jngarlitos 1:9dd7c64b4a64 1809 pc.printf(" Invalid value\n");
jngarlitos 1:9dd7c64b4a64 1810 print_prompt();
jngarlitos 1:9dd7c64b4a64 1811 }
jngarlitos 1:9dd7c64b4a64 1812
jngarlitos 1:9dd7c64b4a64 1813 /**
jngarlitos 1:9dd7c64b4a64 1814 * Start with the piezo accelerometer offset compensation
jngarlitos 1:9dd7c64b4a64 1815 * The offset compenzation process uses a successive approximation model
jngarlitos 1:9dd7c64b4a64 1816 * There is lot of averaging going on, because of quite noisy piezo accelerometer
jngarlitos 1:9dd7c64b4a64 1817 * It will take some time
jngarlitos 1:9dd7c64b4a64 1818 */
jngarlitos 1:9dd7c64b4a64 1819 void static menu_21_piezo_offset(void)
jngarlitos 1:9dd7c64b4a64 1820 {
jngarlitos 1:9dd7c64b4a64 1821 uint8_t ltc2606_res = 16;
jngarlitos 1:9dd7c64b4a64 1822 uint32_t dac_code = 0;
jngarlitos 1:9dd7c64b4a64 1823 uint32_t dac_code_arr[16];
jngarlitos 1:9dd7c64b4a64 1824 double mean_voltage = 0.0, min_voltage;
jngarlitos 1:9dd7c64b4a64 1825 double mean_voltage_arr[16];
jngarlitos 1:9dd7c64b4a64 1826 int8_t sar_loop, min_find, min_index;
jngarlitos 1:9dd7c64b4a64 1827 uint16_t SINC3_odr;
jngarlitos 1:9dd7c64b4a64 1828
jngarlitos 1:9dd7c64b4a64 1829 // Low power mode and MCLK/16
jngarlitos 1:9dd7c64b4a64 1830 ad77681_set_power_mode(device_adc, AD77681_ECO);
jngarlitos 1:9dd7c64b4a64 1831 ad77681_set_mclk_div(device_adc, AD77681_MCLK_DIV_16);
jngarlitos 1:9dd7c64b4a64 1832
jngarlitos 1:9dd7c64b4a64 1833 // 4SPS = 7999 SINC3, 10SPS = 3199 SINC3, 50SPS = 639 SINC3
jngarlitos 1:9dd7c64b4a64 1834 ad77681_SINC3_ODR(device_adc, &SINC3_odr, 4);
jngarlitos 1:9dd7c64b4a64 1835 // Set the oversamplig ratio to high value, to extract DC
jngarlitos 1:9dd7c64b4a64 1836 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_SINC3, SINC3_odr);
jngarlitos 1:9dd7c64b4a64 1837
jngarlitos 1:9dd7c64b4a64 1838 // successive approximation algorithm
jngarlitos 1:9dd7c64b4a64 1839 pc.printf("\nInitialize SAR loop (DAC MSB set to high)\n");
jngarlitos 1:9dd7c64b4a64 1840 // Set DAC code to half scale
jngarlitos 1:9dd7c64b4a64 1841 dac_code = (1 << (ltc2606_res - 1 ));
jngarlitos 1:9dd7c64b4a64 1842 // Update output of the DAC
jngarlitos 1:9dd7c64b4a64 1843 ltc26x6_write_code(device_dac, write_update_command, dac_code);
jngarlitos 1:9dd7c64b4a64 1844 // Wait for DAC output to settle
jngarlitos 1:9dd7c64b4a64 1845 wait_ms(500);
jngarlitos 1:9dd7c64b4a64 1846 // Set desired number of samples for every iteration
jngarlitos 1:9dd7c64b4a64 1847 measured_data.samples = 100;
jngarlitos 1:9dd7c64b4a64 1848 measured_data.finish = false;
jngarlitos 1:9dd7c64b4a64 1849 measured_data.count = 0;
jngarlitos 1:9dd7c64b4a64 1850 // Take X number of samples
jngarlitos 1:9dd7c64b4a64 1851 cont_sampling();
jngarlitos 1:9dd7c64b4a64 1852 // Get the mean voltage of taken samples stroed in the measured_data strucutre
jngarlitos 1:9dd7c64b4a64 1853 get_mean_voltage(&measured_data, &mean_voltage);
jngarlitos 1:9dd7c64b4a64 1854 // Print the mean ADC read voltage for a given DAC code
jngarlitos 1:9dd7c64b4a64 1855 pc.printf("DAC code:%x\t\tMean Voltage: %.6f\n", dac_code, mean_voltage);
jngarlitos 1:9dd7c64b4a64 1856 // Store the initial DAC code in the array
jngarlitos 1:9dd7c64b4a64 1857 dac_code_arr[ltc2606_res - 1] = dac_code;
jngarlitos 1:9dd7c64b4a64 1858 // Store the initial mean voltage in the array
jngarlitos 1:9dd7c64b4a64 1859 mean_voltage_arr[ltc2606_res - 1] = mean_voltage;
jngarlitos 1:9dd7c64b4a64 1860
jngarlitos 1:9dd7c64b4a64 1861 for ( sar_loop = ltc2606_res - 1; sar_loop > 0; sar_loop--) {
jngarlitos 1:9dd7c64b4a64 1862 // Check if the mean voltage is positive or negative
jngarlitos 1:9dd7c64b4a64 1863 if (mean_voltage > 0) {
jngarlitos 1:9dd7c64b4a64 1864 dac_code = dac_code + (1 << (sar_loop - 1));
jngarlitos 1:9dd7c64b4a64 1865 pc.printf("UP\n\n");
jngarlitos 1:9dd7c64b4a64 1866 } else {
jngarlitos 1:9dd7c64b4a64 1867 dac_code = dac_code - (1 << (sar_loop)) + (1 << (sar_loop-1));
jngarlitos 1:9dd7c64b4a64 1868 pc.printf("DOWN\n\n");
jngarlitos 1:9dd7c64b4a64 1869 }
jngarlitos 1:9dd7c64b4a64 1870 // Print loop coard
jngarlitos 1:9dd7c64b4a64 1871 pc.printf("SAR loop #: %d\n",sar_loop);
jngarlitos 1:9dd7c64b4a64 1872 // Update output of the DAC
jngarlitos 1:9dd7c64b4a64 1873 ltc26x6_write_code(device_dac, write_update_command, dac_code);
jngarlitos 1:9dd7c64b4a64 1874 // Wait for DAC output to settle
jngarlitos 1:9dd7c64b4a64 1875 wait_ms(500);
jngarlitos 1:9dd7c64b4a64 1876 // Clear data finish flag
jngarlitos 1:9dd7c64b4a64 1877 measured_data.finish = false;
jngarlitos 1:9dd7c64b4a64 1878 measured_data.count = 0;
jngarlitos 1:9dd7c64b4a64 1879 // Take X number of samples
jngarlitos 1:9dd7c64b4a64 1880 cont_sampling();
jngarlitos 1:9dd7c64b4a64 1881 // Get the mean voltage of taken samples stroed in the measured_data strucutre
jngarlitos 1:9dd7c64b4a64 1882 get_mean_voltage(&measured_data, &mean_voltage);
jngarlitos 1:9dd7c64b4a64 1883 pc.printf("DAC code:%x\t\tMean Voltage: %.6f\n", dac_code, mean_voltage);
jngarlitos 1:9dd7c64b4a64 1884 dac_code_arr[sar_loop - 1] = dac_code;
jngarlitos 1:9dd7c64b4a64 1885 mean_voltage_arr[sar_loop - 1] = mean_voltage;
jngarlitos 1:9dd7c64b4a64 1886 }
jngarlitos 1:9dd7c64b4a64 1887 min_voltage = abs(mean_voltage_arr[0]);
jngarlitos 1:9dd7c64b4a64 1888 for (min_find = 0; min_find < 16; min_find++) {
jngarlitos 1:9dd7c64b4a64 1889 if (min_voltage > abs(mean_voltage_arr[min_find])) {
jngarlitos 1:9dd7c64b4a64 1890 min_voltage = abs(mean_voltage_arr[min_find]);
jngarlitos 1:9dd7c64b4a64 1891 min_index = min_find;
jngarlitos 1:9dd7c64b4a64 1892 }
jngarlitos 1:9dd7c64b4a64 1893 }
jngarlitos 1:9dd7c64b4a64 1894 ltc26x6_write_code(device_dac, write_update_command, dac_code_arr[min_index]);
jngarlitos 1:9dd7c64b4a64 1895 // Wait for DAC output to settle
jngarlitos 1:9dd7c64b4a64 1896 wait_ms(500);
jngarlitos 1:9dd7c64b4a64 1897 // Print the final DAC code
jngarlitos 1:9dd7c64b4a64 1898 pc.printf("\nFinal DAC code set to:%x\t\tFinal Mean Voltage: %.6f\n", dac_code_arr[min_index], mean_voltage_arr[min_index]);
jngarlitos 1:9dd7c64b4a64 1899 // Set to original filter
jngarlitos 1:9dd7c64b4a64 1900 ad77681_set_filter_type(device_adc, AD77681_SINC5_FIR_DECx32, AD77681_FIR, 0);
jngarlitos 1:9dd7c64b4a64 1901 ad77681_update_sample_rate(device_adc);
jngarlitos 1:9dd7c64b4a64 1902 pc.printf("\nOffset compenzation done!\n");
jngarlitos 1:9dd7c64b4a64 1903 print_prompt();
jngarlitos 1:9dd7c64b4a64 1904 }
jngarlitos 1:9dd7c64b4a64 1905
jngarlitos 1:9dd7c64b4a64 1906 /**
jngarlitos 1:9dd7c64b4a64 1907 * Get mean from sampled data
jngarlitos 1:9dd7c64b4a64 1908 * @param mean_voltage Mean Voltage
jngarlitos 1:9dd7c64b4a64 1909 * @param measured_data The structure carying measured data
jngarlitos 1:9dd7c64b4a64 1910 */
jngarlitos 1:9dd7c64b4a64 1911 void static get_mean_voltage(struct adc_data *measured_data, double *mean_voltage)
jngarlitos 1:9dd7c64b4a64 1912 {
jngarlitos 1:9dd7c64b4a64 1913 int32_t shifted_data;
jngarlitos 1:9dd7c64b4a64 1914 double sum = 0, voltage = 0;
jngarlitos 1:9dd7c64b4a64 1915 uint16_t i;
jngarlitos 1:9dd7c64b4a64 1916
jngarlitos 1:9dd7c64b4a64 1917 for ( i = 0; i < measured_data->samples; i++) {
jngarlitos 1:9dd7c64b4a64 1918 ad77681_data_to_voltage(device_adc, &measured_data->raw_data[i], &voltage);
jngarlitos 1:9dd7c64b4a64 1919 sum += voltage;
jngarlitos 1:9dd7c64b4a64 1920 }
jngarlitos 1:9dd7c64b4a64 1921 *mean_voltage = (double)(sum / (double)(measured_data->samples));
jngarlitos 1:9dd7c64b4a64 1922 }
jngarlitos 1:9dd7c64b4a64 1923
jngarlitos 1:9dd7c64b4a64 1924 /**
jngarlitos 1:9dd7c64b4a64 1925 * Set output of the on-board DAC in codes or in voltage
jngarlitos 1:9dd7c64b4a64 1926 *
jngarlitos 1:9dd7c64b4a64 1927 */
jngarlitos 1:9dd7c64b4a64 1928 void static menu_22_set_DAC_output(void)
jngarlitos 1:9dd7c64b4a64 1929 {
jngarlitos 1:9dd7c64b4a64 1930 int16_t dac_status;
jngarlitos 1:9dd7c64b4a64 1931 uint16_t code ;
jngarlitos 1:9dd7c64b4a64 1932 uint32_t new_menu_select, new_dac;
jngarlitos 1:9dd7c64b4a64 1933 float dac_voltage;
jngarlitos 1:9dd7c64b4a64 1934 // Gain factor of the on-board DAC buffer, to have full 5V range(ADA4807-1ARJZ)
jngarlitos 1:9dd7c64b4a64 1935 // Non-inverting op-amp resistor ratio => 1 + (2.7 k ohm / 2.7 k ohm)
jngarlitos 1:9dd7c64b4a64 1936 float buffer_gain = 2;
jngarlitos 1:9dd7c64b4a64 1937
jngarlitos 1:9dd7c64b4a64 1938 pc.printf(" Set DAC output: \n");
jngarlitos 1:9dd7c64b4a64 1939 pc.printf(" 1 - Voltage\n");
jngarlitos 1:9dd7c64b4a64 1940 pc.printf(" 2 - Codes\n");
jngarlitos 1:9dd7c64b4a64 1941 pc.printf(" Select an option: \n");
jngarlitos 1:9dd7c64b4a64 1942
jngarlitos 1:9dd7c64b4a64 1943 getUserInput(&new_menu_select);
jngarlitos 1:9dd7c64b4a64 1944
jngarlitos 1:9dd7c64b4a64 1945 switch (new_menu_select) {
jngarlitos 1:9dd7c64b4a64 1946 case 1:
jngarlitos 1:9dd7c64b4a64 1947 pc.printf(" Set DAC output in mV: ");
jngarlitos 1:9dd7c64b4a64 1948 getUserInput(&new_dac);
jngarlitos 1:9dd7c64b4a64 1949
jngarlitos 1:9dd7c64b4a64 1950 dac_voltage = ((float)(new_dac) / 1000.0) / buffer_gain;
jngarlitos 1:9dd7c64b4a64 1951 ltc26x6_voltage_to_code(device_dac, dac_voltage, &code);
jngarlitos 1:9dd7c64b4a64 1952 ltc26x6_write_code(device_dac, write_update_command, code);
jngarlitos 1:9dd7c64b4a64 1953 if (dac_status == SUCCESS)
jngarlitos 1:9dd7c64b4a64 1954 pc.printf("%.3f V at Shift output\n\n", dac_voltage * buffer_gain);
jngarlitos 1:9dd7c64b4a64 1955 else if (dac_status == LTC26X6_CODE_OVERFLOW)
jngarlitos 1:9dd7c64b4a64 1956 pc.printf("%.3f V at Shift output, OVERFLOW!\n\n", dac_voltage * buffer_gain);
jngarlitos 1:9dd7c64b4a64 1957 else if (dac_status == LTC26X6_CODE_UNDERFLOW)
jngarlitos 1:9dd7c64b4a64 1958 pc.printf("%.3f V at Shift output, UNDERFLOW!\n\n", dac_voltage * buffer_gain);
jngarlitos 1:9dd7c64b4a64 1959 break;
jngarlitos 1:9dd7c64b4a64 1960 case 2:
jngarlitos 1:9dd7c64b4a64 1961 pc.printf(" Set DAC codes in decimal form: ");
jngarlitos 1:9dd7c64b4a64 1962 getUserInput(&new_dac);
jngarlitos 1:9dd7c64b4a64 1963 ltc26x6_write_code(device_dac, write_update_command, new_dac);
jngarlitos 1:9dd7c64b4a64 1964 pc.printf("%x at DAC output\n\n", new_dac);
jngarlitos 1:9dd7c64b4a64 1965 break;
jngarlitos 1:9dd7c64b4a64 1966 default:
jngarlitos 1:9dd7c64b4a64 1967 pc.printf(" Invalid option\n");
jngarlitos 1:9dd7c64b4a64 1968 break;
jngarlitos 1:9dd7c64b4a64 1969 }
jngarlitos 1:9dd7c64b4a64 1970 print_prompt();
jngarlitos 1:9dd7c64b4a64 1971 }
jngarlitos 1:9dd7c64b4a64 1972
jngarlitos 1:9dd7c64b4a64 1973 /**
jngarlitos 1:9dd7c64b4a64 1974 * Prints out an array in binary form
jngarlitos 1:9dd7c64b4a64 1975 *
jngarlitos 1:9dd7c64b4a64 1976 */
jngarlitos 1:9dd7c64b4a64 1977 void static print_binary(uint8_t number, char *binary_number)
jngarlitos 1:9dd7c64b4a64 1978 {
jngarlitos 1:9dd7c64b4a64 1979 for (int8_t i = 7; i >= 0; i--) {
jngarlitos 1:9dd7c64b4a64 1980 if (number & 1)
jngarlitos 1:9dd7c64b4a64 1981 binary_number[i] = '1';
jngarlitos 1:9dd7c64b4a64 1982 else
jngarlitos 1:9dd7c64b4a64 1983 binary_number[i] = '0';
jngarlitos 1:9dd7c64b4a64 1984 number >>= 1;
jngarlitos 1:9dd7c64b4a64 1985 }
jngarlitos 1:9dd7c64b4a64 1986 }
jngarlitos 1:9dd7c64b4a64 1987
jngarlitos 1:9dd7c64b4a64 1988 /**
jngarlitos 1:9dd7c64b4a64 1989 * Setup SDP-K1 GPIOs
jngarlitos 1:9dd7c64b4a64 1990 *
jngarlitos 1:9dd7c64b4a64 1991 *
jngarlitos 1:9dd7c64b4a64 1992 */
jngarlitos 1:9dd7c64b4a64 1993 void static sdpk1_gpio_setup(void)
jngarlitos 1:9dd7c64b4a64 1994 {
jngarlitos 1:9dd7c64b4a64 1995 // Enable DAC buffer & other buffer
jngarlitos 1:9dd7c64b4a64 1996 buffer_en = GPIO_HIGH;
jngarlitos 1:9dd7c64b4a64 1997 // Turn on onboard red LED
jngarlitos 1:9dd7c64b4a64 1998 led_red = GPIO_HIGH;
jngarlitos 1:9dd7c64b4a64 1999 // Turn on onboard blue LED
jngarlitos 1:9dd7c64b4a64 2000 led_blue = GPIO_HIGH;
jngarlitos 1:9dd7c64b4a64 2001 }