Example program for EVAL-CN0535-FMCZ

Dependencies:   platform_drivers AD77681

Committer:
jngarlitos
Date:
Mon Apr 12 07:44:03 2021 +0000
Revision:
2:998f1de78dae
Parent:
1:f3b5e79a8488
Update license of EVAL-CN0535-FMCZ example program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jngarlitos 2:998f1de78dae 1 /*!
jngarlitos 2:998f1de78dae 2 *****************************************************************************
jngarlitos 2:998f1de78dae 3 *@file: main.c
jngarlitos 2:998f1de78dae 4 *
jngarlitos 2:998f1de78dae 5 *@brief: main module for EVAL-CN0535-FMCZ example program
jngarlitos 2:998f1de78dae 6 *
jngarlitos 2:998f1de78dae 7 *@details: main module for EVAL-CN0535-FMCZ example program
jngarlitos 2:998f1de78dae 8 *-----------------------------------------------------------------------------
jngarlitos 2:998f1de78dae 9 *
jngarlitos 2:998f1de78dae 10 Copyright (c) 2021 Analog Devices, Inc.
jngarlitos 2:998f1de78dae 11 All rights reserved.
jngarlitos 2:998f1de78dae 12
jngarlitos 2:998f1de78dae 13 This software is proprietary to Analog Devices, Inc. and its licensors.
jngarlitos 2:998f1de78dae 14 By using this software you agree to the terms of the associated
jngarlitos 2:998f1de78dae 15 Analog Devices Software License Agreement.
jngarlitos 2:998f1de78dae 16 *****************************************************************************/
jngarlitos 2:998f1de78dae 17
jngarlitos 2:998f1de78dae 18 /*** includes ***/
jngarlitos 1:f3b5e79a8488 19 #include "mbed.h"
jngarlitos 1:f3b5e79a8488 20 #include "main.h"
jngarlitos 1:f3b5e79a8488 21 #include "app_config.h"
jngarlitos 1:f3b5e79a8488 22 #include "cn0535_init_params.h"
jngarlitos 2:998f1de78dae 23
jngarlitos 2:998f1de78dae 24 //Uncomment this to print CRC/XOR
jngarlitos 2:998f1de78dae 25 //#define CRC_DEBUG
jngarlitos 1:f3b5e79a8488 26
jngarlitos 1:f3b5e79a8488 27 // Descriptor of the main device - the ADC AD7768-1
jngarlitos 1:f3b5e79a8488 28 ad77681_dev *device;
jngarlitos 1:f3b5e79a8488 29 // Descriptor of the ADC AD7768-1 Status
jngarlitos 1:f3b5e79a8488 30 ad77681_status_registers *current_status;
jngarlitos 1:f3b5e79a8488 31 // Structure carying measured data, sampled by the ADC
jngarlitos 1:f3b5e79a8488 32 adc_data measured_data;
jngarlitos 1:f3b5e79a8488 33
jngarlitos 1:f3b5e79a8488 34
jngarlitos 1:f3b5e79a8488 35 // Initialize the serial object with TX and RX pins
jngarlitos 1:f3b5e79a8488 36 Serial pc(USBTX, USBRX);
jngarlitos 1:f3b5e79a8488 37 // Initialize the drdy pin as interrupt input
jngarlitos 1:f3b5e79a8488 38 InterruptIn drdy(DRDY_PIN, PullNone);
jngarlitos 1:f3b5e79a8488 39 // Initialize the adc_rst_pin pin as digital output
jngarlitos 1:f3b5e79a8488 40 DigitalOut adc_rst(ADC_RST_PIN);
jngarlitos 1:f3b5e79a8488 41 // Initialize the interrupt event variable
jngarlitos 1:f3b5e79a8488 42 volatile bool int_event= false;
jngarlitos 1:f3b5e79a8488 43
jngarlitos 1:f3b5e79a8488 44
jngarlitos 1:f3b5e79a8488 45 /*
jngarlitos 1:f3b5e79a8488 46 * ADC data recteption interrupt from DRDY
jngarlitos 1:f3b5e79a8488 47 *
jngarlitos 1:f3b5e79a8488 48 * Data reception from the ADC using interrupt generated by the ADC's DRDY (Data Ready) pin
jngarlitos 1:f3b5e79a8488 49 * Interrupt triggers falling edge of the active-high DRDY pulse
jngarlitos 1:f3b5e79a8488 50 * DRDY pulse is generated by the ADC and frequency of the DRDY pulse depends on the ADC settings:
jngarlitos 1:f3b5e79a8488 51 *
jngarlitos 1:f3b5e79a8488 52 * DRDY frequency = MCLK / ( MCLK_DIV * FILTER_OSR )
jngarlitos 1:f3b5e79a8488 53 *
jngarlitos 1:f3b5e79a8488 54 */
jngarlitos 1:f3b5e79a8488 55 void drdy_interrupt()
jngarlitos 1:f3b5e79a8488 56 {
jngarlitos 1:f3b5e79a8488 57 int_event = true;
jngarlitos 1:f3b5e79a8488 58
jngarlitos 1:f3b5e79a8488 59 if (measured_data.count == measured_data.samples) { // Desired numer of samples has been taken, set everything back
jngarlitos 1:f3b5e79a8488 60 drdy.disable_irq(); // Disable interrupt on DRDY pin
jngarlitos 1:f3b5e79a8488 61 measured_data.finish = true; // Desired number of samples has been taken
jngarlitos 1:f3b5e79a8488 62 measured_data.count = 0; // Set measured data counter to 0
jngarlitos 1:f3b5e79a8488 63 }
jngarlitos 1:f3b5e79a8488 64 }
jngarlitos 1:f3b5e79a8488 65
jngarlitos 1:f3b5e79a8488 66
jngarlitos 1:f3b5e79a8488 67 int main()
jngarlitos 1:f3b5e79a8488 68 {
jngarlitos 1:f3b5e79a8488 69 int32_t connected = FAILURE;
jngarlitos 1:f3b5e79a8488 70 uint32_t menu;
jngarlitos 1:f3b5e79a8488 71
jngarlitos 1:f3b5e79a8488 72 adc_hard_reset(); // Perform hard reset thru GPIO
jngarlitos 1:f3b5e79a8488 73 connected = ad77681_setup(&device, init_params, &current_status); // SETUP and check connection
jngarlitos 1:f3b5e79a8488 74
jngarlitos 1:f3b5e79a8488 75 if(connected == FAILURE)
jngarlitos 1:f3b5e79a8488 76 go_to_error();
jngarlitos 1:f3b5e79a8488 77
jngarlitos 1:f3b5e79a8488 78 adc_gpio_init(); // Initilized SDP-K1 GPIOS
jngarlitos 1:f3b5e79a8488 79 print_title();
jngarlitos 1:f3b5e79a8488 80 print_prompt();
jngarlitos 1:f3b5e79a8488 81
jngarlitos 1:f3b5e79a8488 82 //============ MAIN WHILE ====================
jngarlitos 1:f3b5e79a8488 83 while(1) {
jngarlitos 1:f3b5e79a8488 84 if (pc.readable()) { // Settings menu SWITCH
jngarlitos 1:f3b5e79a8488 85 getUserInput(&menu);
jngarlitos 1:f3b5e79a8488 86
jngarlitos 1:f3b5e79a8488 87 switch (menu) {
Kjansen45 0:ae894be1131f 88
jngarlitos 1:f3b5e79a8488 89 case 1:
jngarlitos 1:f3b5e79a8488 90 menu_1_set_pgia_gain_mode(); // Set PGIA gain or mode
jngarlitos 1:f3b5e79a8488 91 break;
jngarlitos 1:f3b5e79a8488 92 case 2:
jngarlitos 1:f3b5e79a8488 93 menu_2_set_fda_powermode(); // Set FDA power mode
jngarlitos 1:f3b5e79a8488 94 break;
jngarlitos 1:f3b5e79a8488 95 case 3:
jngarlitos 1:f3b5e79a8488 96 menu_3_set_ad77681_powermode(); // Set FDA power mode
jngarlitos 1:f3b5e79a8488 97 break;
jngarlitos 1:f3b5e79a8488 98 case 4:
jngarlitos 1:f3b5e79a8488 99 menu_4_set_ad77681_clock_divider(); // Set FDA power mode
jngarlitos 1:f3b5e79a8488 100 break;
jngarlitos 1:f3b5e79a8488 101 case 5:
jngarlitos 1:f3b5e79a8488 102 menu_5_set_ad77681_filter_type(); // Set ad7768-1 filter type
jngarlitos 1:f3b5e79a8488 103 break;
jngarlitos 1:f3b5e79a8488 104 case 6:
jngarlitos 1:f3b5e79a8488 105 menu_6_ad77681_AIN_buffers_controll(); // Set ad7768-1 AIN buffers
jngarlitos 1:f3b5e79a8488 106 break;
jngarlitos 1:f3b5e79a8488 107 case 7:
jngarlitos 1:f3b5e79a8488 108 menu_7_ad77681_REF_buffers_controll(); // Set ad7768-1 REF buffers
jngarlitos 1:f3b5e79a8488 109 break;
jngarlitos 1:f3b5e79a8488 110 case 8:
jngarlitos 1:f3b5e79a8488 111 menu_8_set_ad77681_vcm_setup(); // Set ad7768-1 VCM
jngarlitos 1:f3b5e79a8488 112 break;
jngarlitos 1:f3b5e79a8488 113 case 9:
jngarlitos 1:f3b5e79a8488 114 menu_9_set_ad77681_data_output_mode(); // Set ad7768-1 Data output mode
jngarlitos 1:f3b5e79a8488 115 break;
jngarlitos 1:f3b5e79a8488 116 case 10:
jngarlitos 1:f3b5e79a8488 117 menu_10_set_ad77681_diagnostic_mode(); // Set ad7768-1 Diagnostic mode
jngarlitos 1:f3b5e79a8488 118 break;
jngarlitos 1:f3b5e79a8488 119 case 11:
jngarlitos 1:f3b5e79a8488 120 menu_11_set_ad77681_gains_offsets(); // Set ad7768-1 gain and offset
jngarlitos 1:f3b5e79a8488 121 break;
jngarlitos 1:f3b5e79a8488 122 case 12:
jngarlitos 1:f3b5e79a8488 123 menu_12_ad77681_read_master_status(); // Read ad7768-1 Master status
jngarlitos 1:f3b5e79a8488 124 break;
jngarlitos 1:f3b5e79a8488 125 case 13:
jngarlitos 1:f3b5e79a8488 126 menu_13_ad77681_read_register(); // Read ad7768-1 registers
jngarlitos 1:f3b5e79a8488 127 break;
jngarlitos 1:f3b5e79a8488 128 case 14:
jngarlitos 1:f3b5e79a8488 129 menu_14_read_ad77681_single_conv_data(); // Read ad7768-1 single convertion data
jngarlitos 1:f3b5e79a8488 130 break;
jngarlitos 1:f3b5e79a8488 131 case 15:
jngarlitos 1:f3b5e79a8488 132 menu_15_read_ad77681_continuous_data(); // Read ad7768-1 continuous read data
jngarlitos 1:f3b5e79a8488 133 break;
jngarlitos 1:f3b5e79a8488 134 case 16:
jngarlitos 1:f3b5e79a8488 135 menu_16_print_ad77681_continuos_read_data();// Print ad7768-1 continuous read data
jngarlitos 1:f3b5e79a8488 136 break;
jngarlitos 1:f3b5e79a8488 137 case 17:
jngarlitos 1:f3b5e79a8488 138 menu_17_ad77681_check_scratchpad(); // Perform ad7768-1 scratch pad check
jngarlitos 1:f3b5e79a8488 139 break;
jngarlitos 1:f3b5e79a8488 140 case 18:
jngarlitos 1:f3b5e79a8488 141 menu_18_reset_ad77681_ADC(); // Reset ad7768-1
jngarlitos 1:f3b5e79a8488 142 break;
jngarlitos 1:f3b5e79a8488 143 case 19:
jngarlitos 1:f3b5e79a8488 144 menu_19_set_default_settings(); // Set Board defaul settings
jngarlitos 1:f3b5e79a8488 145 break;
jngarlitos 1:f3b5e79a8488 146 case 20:
jngarlitos 1:f3b5e79a8488 147 menu_20_mclk_vref(); // Set ad7768-1 MCLK and Vref Values
jngarlitos 1:f3b5e79a8488 148 break;
jngarlitos 1:f3b5e79a8488 149 default:
jngarlitos 1:f3b5e79a8488 150 pc.printf("Invalid option"); // Invalid Option
jngarlitos 1:f3b5e79a8488 151 print_prompt();
jngarlitos 1:f3b5e79a8488 152 break;
jngarlitos 1:f3b5e79a8488 153 }
jngarlitos 1:f3b5e79a8488 154 }
jngarlitos 1:f3b5e79a8488 155 }
jngarlitos 1:f3b5e79a8488 156 }
Kjansen45 0:ae894be1131f 157
jngarlitos 1:f3b5e79a8488 158 /**
jngarlitos 1:f3b5e79a8488 159 * Error warning, in case of unsuccessfull SPI connection
jngarlitos 1:f3b5e79a8488 160 *
jngarlitos 1:f3b5e79a8488 161 */
jngarlitos 1:f3b5e79a8488 162 void static go_to_error()
jngarlitos 1:f3b5e79a8488 163 {
jngarlitos 1:f3b5e79a8488 164 int32_t connected = FAILURE;
jngarlitos 1:f3b5e79a8488 165
jngarlitos 1:f3b5e79a8488 166 while (1) {
jngarlitos 1:f3b5e79a8488 167 pc.printf("ERROR: NOT CONNECTED\nCHECK YOUR PHYSICAL CONNECTION\n\n"); // When not connected, keep showing error message
jngarlitos 1:f3b5e79a8488 168 wait(5);
jngarlitos 1:f3b5e79a8488 169
jngarlitos 1:f3b5e79a8488 170 connected = ad77681_setup(&device, init_params, &current_status); // Keep trying to connect
jngarlitos 1:f3b5e79a8488 171 if (connected == SUCCESS) {
jngarlitos 1:f3b5e79a8488 172 pc.printf("SUCCESSFULLY RECONNECTED\n\n"); // If successfull reading from scratchpad, init the ADC and go back
jngarlitos 1:f3b5e79a8488 173 break;
jngarlitos 1:f3b5e79a8488 174 }
jngarlitos 1:f3b5e79a8488 175 }
jngarlitos 1:f3b5e79a8488 176 }
Kjansen45 0:ae894be1131f 177
jngarlitos 1:f3b5e79a8488 178 /**
jngarlitos 1:f3b5e79a8488 179 * Print title
jngarlitos 1:f3b5e79a8488 180 *
jngarlitos 1:f3b5e79a8488 181 */
jngarlitos 1:f3b5e79a8488 182 void static print_title()
jngarlitos 1:f3b5e79a8488 183 {
jngarlitos 1:f3b5e79a8488 184 pc.printf("\n\r");
jngarlitos 1:f3b5e79a8488 185 pc.printf("****************************************************************\n");
jngarlitos 1:f3b5e79a8488 186 pc.printf("* CN0535 Demonstration Program -- (mbed) *\n");
jngarlitos 1:f3b5e79a8488 187 pc.printf("* *\n");
jngarlitos 1:f3b5e79a8488 188 pc.printf("* This program demonstrates Universal Measurement Platform *\n");
jngarlitos 1:f3b5e79a8488 189 pc.printf("* using the AD7768-1 Precision 24-bit sigma-delta AD converter *\n");
jngarlitos 1:f3b5e79a8488 190 pc.printf("* *\n");
jngarlitos 1:f3b5e79a8488 191 pc.printf("* Set the baud rate to 115200 select the newline terminator. *\n");
jngarlitos 1:f3b5e79a8488 192 pc.printf("****************************************************************\n");
jngarlitos 1:f3b5e79a8488 193 }
jngarlitos 1:f3b5e79a8488 194
jngarlitos 1:f3b5e79a8488 195 /**
jngarlitos 1:f3b5e79a8488 196 * Print main menu to console
jngarlitos 1:f3b5e79a8488 197 *
jngarlitos 1:f3b5e79a8488 198 */
jngarlitos 1:f3b5e79a8488 199 void static print_prompt()
jngarlitos 1:f3b5e79a8488 200 {
jngarlitos 1:f3b5e79a8488 201 pc.printf("\n\nCommand Summary:\n\n");
jngarlitos 1:f3b5e79a8488 202 pc.printf(" 1 - Set LTC6373 PGIA Gain/Mode\n");
jngarlitos 1:f3b5e79a8488 203 pc.printf(" 2 - Set ADA4945 FDA Power Mode\n");
jngarlitos 1:f3b5e79a8488 204 pc.printf(" 3 - Set AD7768-1 power mode\n");
jngarlitos 1:f3b5e79a8488 205 pc.printf(" 4 - Set AD7768-1 MCLK clock divider\n");
jngarlitos 1:f3b5e79a8488 206 pc.printf(" 5 - Set AD7768-1 filter type\n");
jngarlitos 1:f3b5e79a8488 207 pc.printf(" 6 - Set AD7768-1 AIN buffers\n");
jngarlitos 1:f3b5e79a8488 208 pc.printf(" 7 - Set AD7768-1 REF buffers\n");
jngarlitos 1:f3b5e79a8488 209 pc.printf(" 8 - Set AD7768-1 VCM output\n");
jngarlitos 1:f3b5e79a8488 210 pc.printf(" 9 - Set AD7768-1 data output mode\n");
jngarlitos 1:f3b5e79a8488 211 pc.printf(" 10 - Set AD7768-1 diagnostic mode\n");
jngarlitos 1:f3b5e79a8488 212 pc.printf(" 11 - Set AD7768-1 Gains and Offsets\n");
jngarlitos 1:f3b5e79a8488 213 pc.printf(" 12 - Read AD7768-1 master status\n");
jngarlitos 1:f3b5e79a8488 214 pc.printf(" 13 - Read AD7768-1 desired register\n");
jngarlitos 1:f3b5e79a8488 215 pc.printf(" 14 - Read AD7768-1 data register\n");
jngarlitos 1:f3b5e79a8488 216 pc.printf(" 15 - Read AD7768-1 continuous mode data\n");
jngarlitos 1:f3b5e79a8488 217 pc.printf(" 16 - Print AD7768-1 Continuous mode measured data\n");
jngarlitos 1:f3b5e79a8488 218 pc.printf(" 17 - AD7768-1 Scratchpad Check \n");
jngarlitos 1:f3b5e79a8488 219 pc.printf(" 18 - Reset AD7768-1 ADC\n");
jngarlitos 1:f3b5e79a8488 220 pc.printf(" 19 - Set to Board Default Config\n");
jngarlitos 1:f3b5e79a8488 221 pc.printf(" 20 - Update Vref and MCLK values\n");
jngarlitos 1:f3b5e79a8488 222 pc.printf("\n\r");
jngarlitos 1:f3b5e79a8488 223 }
Kjansen45 0:ae894be1131f 224
jngarlitos 1:f3b5e79a8488 225 /**
jngarlitos 1:f3b5e79a8488 226 * Set LTC6373 PGIA Gain or Mode
jngarlitos 1:f3b5e79a8488 227 *
jngarlitos 1:f3b5e79a8488 228 */
jngarlitos 1:f3b5e79a8488 229 void static menu_1_set_pgia_gain_mode(void)
jngarlitos 1:f3b5e79a8488 230 {
jngarlitos 1:f3b5e79a8488 231 uint32_t new_pgia_gain;
jngarlitos 1:f3b5e79a8488 232 uint8_t value;
Kjansen45 0:ae894be1131f 233
jngarlitos 1:f3b5e79a8488 234 pc.printf(" Avaliable LT6373 PGIA Gains and Mode: \n");
jngarlitos 1:f3b5e79a8488 235 pc.printf(" 1 - Shutdown\n");
jngarlitos 1:f3b5e79a8488 236 pc.printf(" 2 - 0.25V/V\n");
jngarlitos 1:f3b5e79a8488 237 pc.printf(" 3 - 0.50V/V\n");
jngarlitos 1:f3b5e79a8488 238 pc.printf(" 4 - 1V/V\n");
jngarlitos 1:f3b5e79a8488 239 pc.printf(" 5 - 2V/V\n");
jngarlitos 1:f3b5e79a8488 240 pc.printf(" 6 - 4V/V\n");
jngarlitos 1:f3b5e79a8488 241 pc.printf(" 7 - 8V/V\n");
jngarlitos 1:f3b5e79a8488 242 pc.printf(" 8 - 16V/V\n");
jngarlitos 1:f3b5e79a8488 243 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 244
jngarlitos 1:f3b5e79a8488 245 getUserInput(&new_pgia_gain);
jngarlitos 1:f3b5e79a8488 246 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 247
jngarlitos 1:f3b5e79a8488 248 switch (new_pgia_gain) {
Kjansen45 0:ae894be1131f 249
jngarlitos 1:f3b5e79a8488 250 case 1:
jngarlitos 1:f3b5e79a8488 251 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 252 value |= 7;
jngarlitos 1:f3b5e79a8488 253 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 254 pc.printf(" PGIA Shutdown selected\n");
jngarlitos 1:f3b5e79a8488 255 break;
jngarlitos 1:f3b5e79a8488 256 case 2:
jngarlitos 1:f3b5e79a8488 257 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 258 value |= 6;
jngarlitos 1:f3b5e79a8488 259 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 260 pc.printf(" PGIA gain: 0.25V/V selected\n");
jngarlitos 1:f3b5e79a8488 261 break;
jngarlitos 1:f3b5e79a8488 262 case 3:
jngarlitos 1:f3b5e79a8488 263 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 264 value |= 5;
jngarlitos 1:f3b5e79a8488 265 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 266 pc.printf(" PGIA gain: 0.5V/V selected\n");
jngarlitos 1:f3b5e79a8488 267 break;
jngarlitos 1:f3b5e79a8488 268 case 4:
jngarlitos 1:f3b5e79a8488 269 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 270 value |= 4;
jngarlitos 1:f3b5e79a8488 271 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 272 pc.printf(" PGIA gain: 1V/V selected\n");
jngarlitos 1:f3b5e79a8488 273 break;
jngarlitos 1:f3b5e79a8488 274 case 5:
jngarlitos 1:f3b5e79a8488 275 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 276 value |= 3;
jngarlitos 1:f3b5e79a8488 277 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 278 pc.printf(" PGIA gain: 2V/V selected\n");
jngarlitos 1:f3b5e79a8488 279 break;
jngarlitos 1:f3b5e79a8488 280 case 6:
jngarlitos 1:f3b5e79a8488 281 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 282 value |= 2;
jngarlitos 1:f3b5e79a8488 283 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 284 pc.printf(" PGIA gain: 4V/V selected\n");
jngarlitos 1:f3b5e79a8488 285 break;
jngarlitos 1:f3b5e79a8488 286 case 7:
jngarlitos 1:f3b5e79a8488 287 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 288 value |= 1;
jngarlitos 1:f3b5e79a8488 289 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 290 pc.printf(" PGIA gain: 8V/V selected\n");
jngarlitos 1:f3b5e79a8488 291 break;
jngarlitos 1:f3b5e79a8488 292 case 8:
jngarlitos 1:f3b5e79a8488 293 ad77681_spi_read_mask(device, AD77681_REG_GPIO_WRITE, AD77681_GPIO_WRITE_3_MSK, &value);
jngarlitos 1:f3b5e79a8488 294 value |= 0;
jngarlitos 1:f3b5e79a8488 295 ad77681_gpio_write(device,value, AD77681_ALL_GPIOS);
jngarlitos 1:f3b5e79a8488 296 pc.printf(" PGIA gain: 16V/V selected\n");
jngarlitos 1:f3b5e79a8488 297 break;
jngarlitos 1:f3b5e79a8488 298 default:
jngarlitos 1:f3b5e79a8488 299 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 300 break;
jngarlitos 1:f3b5e79a8488 301 }
jngarlitos 1:f3b5e79a8488 302 print_prompt();
Kjansen45 0:ae894be1131f 303 }
Kjansen45 0:ae894be1131f 304
jngarlitos 1:f3b5e79a8488 305 /**
jngarlitos 1:f3b5e79a8488 306 * Set ADA4945 FDA Mode
jngarlitos 1:f3b5e79a8488 307 *
jngarlitos 1:f3b5e79a8488 308 */
jngarlitos 1:f3b5e79a8488 309 void static menu_2_set_fda_powermode(void)
jngarlitos 1:f3b5e79a8488 310 {
jngarlitos 1:f3b5e79a8488 311 uint32_t new_fda_powermode;
jngarlitos 1:f3b5e79a8488 312 uint8_t value;
jngarlitos 1:f3b5e79a8488 313
jngarlitos 1:f3b5e79a8488 314 pc.printf(" Avaliable LT6373 PGIA Gains and Mode: \n");
jngarlitos 1:f3b5e79a8488 315 pc.printf(" 1 - Full Power Mode\n");
jngarlitos 1:f3b5e79a8488 316 pc.printf(" 2 - Low Power Moden");
jngarlitos 1:f3b5e79a8488 317 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 318
jngarlitos 1:f3b5e79a8488 319 getUserInput(&new_fda_powermode);
jngarlitos 1:f3b5e79a8488 320 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 321
jngarlitos 1:f3b5e79a8488 322 switch (new_fda_powermode) {
jngarlitos 1:f3b5e79a8488 323
jngarlitos 1:f3b5e79a8488 324 case 1:
jngarlitos 1:f3b5e79a8488 325 value = 1;
jngarlitos 1:f3b5e79a8488 326 ad77681_gpio_write(device,value, AD77681_GPIO3);
jngarlitos 1:f3b5e79a8488 327 pc.printf(" FDA Full Power Mode selected\n");
jngarlitos 1:f3b5e79a8488 328 break;
jngarlitos 1:f3b5e79a8488 329 case 2:
jngarlitos 1:f3b5e79a8488 330 value = 0;
jngarlitos 1:f3b5e79a8488 331 ad77681_gpio_write(device,value, AD77681_GPIO3);
jngarlitos 1:f3b5e79a8488 332 pc.printf(" FDA Low Power Mode selected\n");
jngarlitos 1:f3b5e79a8488 333 break;
jngarlitos 1:f3b5e79a8488 334 default:
jngarlitos 1:f3b5e79a8488 335 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 336 break;
jngarlitos 1:f3b5e79a8488 337 }
jngarlitos 1:f3b5e79a8488 338 print_prompt();
jngarlitos 1:f3b5e79a8488 339 }
jngarlitos 1:f3b5e79a8488 340
jngarlitos 1:f3b5e79a8488 341 /**
jngarlitos 1:f3b5e79a8488 342 * Set AD7768-1 power mode
jngarlitos 1:f3b5e79a8488 343 *
jngarlitos 1:f3b5e79a8488 344 */
jngarlitos 1:f3b5e79a8488 345 void static menu_3_set_ad77681_powermode(void)
jngarlitos 1:f3b5e79a8488 346 {
jngarlitos 1:f3b5e79a8488 347 uint32_t new_ad77681_pwr_mode;
jngarlitos 1:f3b5e79a8488 348
jngarlitos 1:f3b5e79a8488 349 pc.printf(" Avaliable AD7768-1 power modes: \n");
jngarlitos 1:f3b5e79a8488 350 pc.printf(" 1 - Low power mode\n");
jngarlitos 1:f3b5e79a8488 351 pc.printf(" 2 - Median power mode\n");
jngarlitos 1:f3b5e79a8488 352 pc.printf(" 3 - Fast power mode\n");
jngarlitos 1:f3b5e79a8488 353 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 354
jngarlitos 1:f3b5e79a8488 355 getUserInput(&new_ad77681_pwr_mode);
jngarlitos 1:f3b5e79a8488 356 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 357
jngarlitos 1:f3b5e79a8488 358 switch (new_ad77681_pwr_mode) {
jngarlitos 1:f3b5e79a8488 359
jngarlitos 1:f3b5e79a8488 360 case 1:
jngarlitos 1:f3b5e79a8488 361 ad77681_set_power_mode(device, AD77681_ECO);
jngarlitos 1:f3b5e79a8488 362 pc.printf(" AD7768-1 Low power mode selected\n");
jngarlitos 1:f3b5e79a8488 363 break;
jngarlitos 1:f3b5e79a8488 364 case 2:
jngarlitos 1:f3b5e79a8488 365 ad77681_set_power_mode(device, AD77681_MEDIAN);
jngarlitos 1:f3b5e79a8488 366 pc.printf(" AD7768-1 Median power mode selected\n");
jngarlitos 1:f3b5e79a8488 367 break;
jngarlitos 1:f3b5e79a8488 368 case 3:
jngarlitos 1:f3b5e79a8488 369 ad77681_set_power_mode(device, AD77681_FAST);
jngarlitos 1:f3b5e79a8488 370 pc.printf(" AD7768-1 Fast power mode selected\n");
jngarlitos 1:f3b5e79a8488 371 break;
jngarlitos 1:f3b5e79a8488 372 default:
jngarlitos 1:f3b5e79a8488 373 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 374 break;
jngarlitos 1:f3b5e79a8488 375 }
jngarlitos 1:f3b5e79a8488 376 print_prompt();
jngarlitos 1:f3b5e79a8488 377 }
jngarlitos 1:f3b5e79a8488 378
jngarlitos 1:f3b5e79a8488 379 /**
jngarlitos 1:f3b5e79a8488 380 * Set AD7768-1 clock divider
jngarlitos 1:f3b5e79a8488 381 *
jngarlitos 1:f3b5e79a8488 382 */
jngarlitos 1:f3b5e79a8488 383 void static menu_4_set_ad77681_clock_divider(void)
jngarlitos 1:f3b5e79a8488 384 {
jngarlitos 1:f3b5e79a8488 385 uint32_t new_ad77681_mclk_div;
jngarlitos 1:f3b5e79a8488 386
jngarlitos 1:f3b5e79a8488 387 pc.printf(" Avaliable AD7768-1 MCLK divider options: \n");
jngarlitos 1:f3b5e79a8488 388 pc.printf(" 1 - MCLK/16\n");
jngarlitos 1:f3b5e79a8488 389 pc.printf(" 2 - MCLK/8\n");
jngarlitos 1:f3b5e79a8488 390 pc.printf(" 3 - MCLK/4\n");
jngarlitos 1:f3b5e79a8488 391 pc.printf(" 4 - MCLK/2\n");
jngarlitos 1:f3b5e79a8488 392 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 393
jngarlitos 1:f3b5e79a8488 394 getUserInput(&new_ad77681_mclk_div);
jngarlitos 1:f3b5e79a8488 395 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 396
jngarlitos 1:f3b5e79a8488 397 switch (new_ad77681_mclk_div) {
jngarlitos 1:f3b5e79a8488 398
jngarlitos 1:f3b5e79a8488 399 case 1:
jngarlitos 1:f3b5e79a8488 400 ad77681_set_mclk_div(device, AD77681_MCLK_DIV_16);
jngarlitos 1:f3b5e79a8488 401 pc.printf(" AD7768-1 MCLK/16 selected\n");
jngarlitos 1:f3b5e79a8488 402 break;
jngarlitos 1:f3b5e79a8488 403 case 2:
jngarlitos 1:f3b5e79a8488 404 ad77681_set_mclk_div(device, AD77681_MCLK_DIV_8);
jngarlitos 1:f3b5e79a8488 405 pc.printf(" AD7768-1 MCLK/8 selected\n");
jngarlitos 1:f3b5e79a8488 406 break;
jngarlitos 1:f3b5e79a8488 407 case 3:
jngarlitos 1:f3b5e79a8488 408 ad77681_set_mclk_div(device, AD77681_MCLK_DIV_4);
jngarlitos 1:f3b5e79a8488 409 pc.printf(" AD7768-1 MCLK/4 selected\n");
jngarlitos 1:f3b5e79a8488 410 break;
jngarlitos 1:f3b5e79a8488 411 case 4:
jngarlitos 1:f3b5e79a8488 412 ad77681_set_mclk_div(device, AD77681_MCLK_DIV_2);
jngarlitos 1:f3b5e79a8488 413 pc.printf(" AD7768-1 MCLK/2 selected\n");
jngarlitos 1:f3b5e79a8488 414 break;
jngarlitos 1:f3b5e79a8488 415 default:
jngarlitos 1:f3b5e79a8488 416 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 417 break;
jngarlitos 1:f3b5e79a8488 418 }
jngarlitos 1:f3b5e79a8488 419
jngarlitos 1:f3b5e79a8488 420 ad77681_update_sample_rate(device); // Update the sample rate after changing the MCLK divider
jngarlitos 1:f3b5e79a8488 421 print_prompt();
jngarlitos 1:f3b5e79a8488 422 }
jngarlitos 1:f3b5e79a8488 423
jngarlitos 1:f3b5e79a8488 424 /**
jngarlitos 1:f3b5e79a8488 425 * Set filter type
jngarlitos 1:f3b5e79a8488 426 *
jngarlitos 1:f3b5e79a8488 427 */
jngarlitos 1:f3b5e79a8488 428 void static menu_5_set_ad77681_filter_type(void)
Kjansen45 0:ae894be1131f 429 {
jngarlitos 1:f3b5e79a8488 430 pc.printf(" Avaliable AD7768-1 Filter Type options: \n");
jngarlitos 1:f3b5e79a8488 431 pc.printf(" 1 - SINC3 Fileter\n");
jngarlitos 1:f3b5e79a8488 432 pc.printf(" 2 - SINC5 Filter\n");
jngarlitos 1:f3b5e79a8488 433 pc.printf(" 3 - Low ripple FIR Filter\n");
jngarlitos 1:f3b5e79a8488 434 pc.printf(" 4 - SINC3 50/60Hz rejection\n");
jngarlitos 1:f3b5e79a8488 435 pc.printf(" 5 - User-defined FIR filter\n");
jngarlitos 1:f3b5e79a8488 436 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 437
jngarlitos 1:f3b5e79a8488 438 uint32_t new_filter = 0;
jngarlitos 1:f3b5e79a8488 439 int32_t ret;
jngarlitos 1:f3b5e79a8488 440
jngarlitos 1:f3b5e79a8488 441 getUserInput(&new_filter);
jngarlitos 1:f3b5e79a8488 442 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 443
jngarlitos 1:f3b5e79a8488 444 switch (new_filter) {
jngarlitos 1:f3b5e79a8488 445
jngarlitos 1:f3b5e79a8488 446 case 1:
jngarlitos 1:f3b5e79a8488 447 set_SINC3_filter();
jngarlitos 1:f3b5e79a8488 448 break;
jngarlitos 1:f3b5e79a8488 449 case 2:
jngarlitos 1:f3b5e79a8488 450 set_SINC5_filter();
jngarlitos 1:f3b5e79a8488 451 break;
jngarlitos 1:f3b5e79a8488 452 case 3:
jngarlitos 1:f3b5e79a8488 453 set_FIR_filter();
jngarlitos 1:f3b5e79a8488 454 break;
jngarlitos 1:f3b5e79a8488 455 case 4:
jngarlitos 1:f3b5e79a8488 456 set_50HZ_rej();
jngarlitos 1:f3b5e79a8488 457 break;
jngarlitos 1:f3b5e79a8488 458 case 5:
jngarlitos 1:f3b5e79a8488 459 set_user_defined_FIR();
jngarlitos 1:f3b5e79a8488 460 break;
jngarlitos 1:f3b5e79a8488 461 default:
jngarlitos 1:f3b5e79a8488 462 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 463 break;
jngarlitos 1:f3b5e79a8488 464 }
jngarlitos 1:f3b5e79a8488 465
jngarlitos 1:f3b5e79a8488 466 ad77681_update_sample_rate(device); // Update the sample rate after changing the Filter type
jngarlitos 1:f3b5e79a8488 467 print_prompt();
jngarlitos 1:f3b5e79a8488 468 }
jngarlitos 1:f3b5e79a8488 469
jngarlitos 1:f3b5e79a8488 470 /**
jngarlitos 1:f3b5e79a8488 471 * Set SINC3 filter
jngarlitos 1:f3b5e79a8488 472 *
jngarlitos 1:f3b5e79a8488 473 */
jngarlitos 1:f3b5e79a8488 474 void static set_SINC3_filter(void)
jngarlitos 1:f3b5e79a8488 475 {
jngarlitos 1:f3b5e79a8488 476 uint32_t new_sinc3 = 0, new_sinc5 = 0;
jngarlitos 1:f3b5e79a8488 477 int32_t ret;
jngarlitos 1:f3b5e79a8488 478
jngarlitos 1:f3b5e79a8488 479 pc.printf(" AD7768-1 SINC3 filter Oversampling ratios: \n");
jngarlitos 1:f3b5e79a8488 480 pc.printf(" OSR is calculated as (x + 1)*32\n");
jngarlitos 1:f3b5e79a8488 481 pc.printf(" x is SINC3 OSR register value\n");
jngarlitos 1:f3b5e79a8488 482 pc.printf(" Please input a value from 0 to 8192 = 2^13\n :");
jngarlitos 1:f3b5e79a8488 483
jngarlitos 1:f3b5e79a8488 484 ret = getUserInput(&new_sinc3);
jngarlitos 1:f3b5e79a8488 485
jngarlitos 1:f3b5e79a8488 486 if ((new_sinc3 >= 0) && (new_sinc3 <= 8192) && (ret == SUCCESS)) {
jngarlitos 1:f3b5e79a8488 487 pc.printf("%d\n", new_sinc3);
jngarlitos 1:f3b5e79a8488 488
jngarlitos 1:f3b5e79a8488 489 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx32, AD77681_SINC3, new_sinc3);
jngarlitos 1:f3b5e79a8488 490 pc.printf(" SINC3 OSR is set to %d\n", (new_sinc3 + 1) * 32);
jngarlitos 1:f3b5e79a8488 491 } else {
jngarlitos 1:f3b5e79a8488 492 pc.printf("%d\n", new_sinc3);
jngarlitos 1:f3b5e79a8488 493 pc.printf(" Invalid option - too large number\n");
jngarlitos 1:f3b5e79a8488 494 }
jngarlitos 1:f3b5e79a8488 495 }
jngarlitos 1:f3b5e79a8488 496
jngarlitos 1:f3b5e79a8488 497 /**
jngarlitos 1:f3b5e79a8488 498 * Set SINC5 filter
jngarlitos 1:f3b5e79a8488 499 *
jngarlitos 1:f3b5e79a8488 500 */
jngarlitos 1:f3b5e79a8488 501 void static set_SINC5_filter(void)
jngarlitos 1:f3b5e79a8488 502 {
jngarlitos 1:f3b5e79a8488 503 uint32_t new_sinc5;
jngarlitos 1:f3b5e79a8488 504
jngarlitos 1:f3b5e79a8488 505 pc.printf(" AD7768-1 SINC5 filter Oversampling ratios: \n");
jngarlitos 1:f3b5e79a8488 506 pc.printf(" 1 - Oversampled by 8\n");
jngarlitos 1:f3b5e79a8488 507 pc.printf(" 2 - Oversampled by 16\n");
jngarlitos 1:f3b5e79a8488 508 pc.printf(" 3 - Oversampled by 32\n");
jngarlitos 1:f3b5e79a8488 509 pc.printf(" 4 - Oversampled by 64\n");
jngarlitos 1:f3b5e79a8488 510 pc.printf(" 5 - Oversampled by 128\n");
jngarlitos 1:f3b5e79a8488 511 pc.printf(" 6 - Oversampled by 256\n");
jngarlitos 1:f3b5e79a8488 512 pc.printf(" 7 - Oversampled by 512\n");
jngarlitos 1:f3b5e79a8488 513 pc.printf(" 8 - Oversampled by 1024\n");
jngarlitos 1:f3b5e79a8488 514 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 515
jngarlitos 1:f3b5e79a8488 516 getUserInput(&new_sinc5);
jngarlitos 1:f3b5e79a8488 517 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 518
jngarlitos 1:f3b5e79a8488 519 switch (new_sinc5) {
jngarlitos 1:f3b5e79a8488 520 case 1:
jngarlitos 1:f3b5e79a8488 521 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx32, AD77681_SINC5_DECx8, 0);
jngarlitos 1:f3b5e79a8488 522 pc.printf(" SINC5 with OSRx8 set\n");
jngarlitos 1:f3b5e79a8488 523 break;
jngarlitos 1:f3b5e79a8488 524 case 2:
jngarlitos 1:f3b5e79a8488 525 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx32, AD77681_SINC5_DECx16, 0);
jngarlitos 1:f3b5e79a8488 526 pc.printf(" SINC5 with OSRx16 set\n");
jngarlitos 1:f3b5e79a8488 527 break;
jngarlitos 1:f3b5e79a8488 528 case 3:
jngarlitos 1:f3b5e79a8488 529 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx32, AD77681_SINC5, 0);
jngarlitos 1:f3b5e79a8488 530 pc.printf(" SINC5 with OSRx32 set\n");
jngarlitos 1:f3b5e79a8488 531 break;
jngarlitos 1:f3b5e79a8488 532 case 4:
jngarlitos 1:f3b5e79a8488 533 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx64, AD77681_SINC5, 0);
jngarlitos 1:f3b5e79a8488 534 pc.printf(" SINC5 with OSRx64 set\n");
jngarlitos 1:f3b5e79a8488 535 break;
jngarlitos 1:f3b5e79a8488 536 case 5:
jngarlitos 1:f3b5e79a8488 537 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx128, AD77681_SINC5, 0);
jngarlitos 1:f3b5e79a8488 538 pc.printf(" SINC5 with OSRx128 set\n");
jngarlitos 1:f3b5e79a8488 539 break;
jngarlitos 1:f3b5e79a8488 540 case 6:
jngarlitos 1:f3b5e79a8488 541 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx256, AD77681_SINC5, 0);
jngarlitos 1:f3b5e79a8488 542 pc.printf(" SINC5 with OSRx256 set\n");
jngarlitos 1:f3b5e79a8488 543 break;
jngarlitos 1:f3b5e79a8488 544 case 7:
jngarlitos 1:f3b5e79a8488 545 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx512, AD77681_SINC5, 0);
jngarlitos 1:f3b5e79a8488 546 pc.printf(" SINC5 with OSRx512 set\n");
jngarlitos 1:f3b5e79a8488 547 break;
jngarlitos 1:f3b5e79a8488 548 case 8:
jngarlitos 1:f3b5e79a8488 549 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx1024, AD77681_SINC5, 0);
jngarlitos 1:f3b5e79a8488 550 pc.printf(" SINC5 with OSRx1024 set\n");
jngarlitos 1:f3b5e79a8488 551 break;
jngarlitos 1:f3b5e79a8488 552 default:
jngarlitos 1:f3b5e79a8488 553 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 554 break;
jngarlitos 1:f3b5e79a8488 555 }
jngarlitos 1:f3b5e79a8488 556 }
jngarlitos 1:f3b5e79a8488 557
jngarlitos 1:f3b5e79a8488 558 /**
jngarlitos 1:f3b5e79a8488 559 * Set FIR filter
jngarlitos 1:f3b5e79a8488 560 *
jngarlitos 1:f3b5e79a8488 561 */
jngarlitos 1:f3b5e79a8488 562 void static set_FIR_filter(void)
jngarlitos 1:f3b5e79a8488 563 {
jngarlitos 1:f3b5e79a8488 564 uint32_t new_fir;
jngarlitos 1:f3b5e79a8488 565
jngarlitos 1:f3b5e79a8488 566 pc.printf(" AD7768-1 FIR filter Oversampling ratios: \n");
jngarlitos 1:f3b5e79a8488 567 pc.printf(" 1 - Oversampled by 32\n");
jngarlitos 1:f3b5e79a8488 568 pc.printf(" 2 - Oversampled by 64\n");
jngarlitos 1:f3b5e79a8488 569 pc.printf(" 3 - Oversampled by 128\n");
jngarlitos 1:f3b5e79a8488 570 pc.printf(" 4 - Oversampled by 256\n");
jngarlitos 1:f3b5e79a8488 571 pc.printf(" 5 - Oversampled by 512\n");
jngarlitos 1:f3b5e79a8488 572 pc.printf(" 6 - Oversampled by 1024\n");
jngarlitos 1:f3b5e79a8488 573 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 574
jngarlitos 1:f3b5e79a8488 575 getUserInput(&new_fir);
jngarlitos 1:f3b5e79a8488 576 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 577
jngarlitos 1:f3b5e79a8488 578 switch (new_fir) {
jngarlitos 1:f3b5e79a8488 579 case 1:
jngarlitos 1:f3b5e79a8488 580 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx32, AD77681_FIR, 0);
jngarlitos 1:f3b5e79a8488 581 pc.printf(" FIR with OSRx32 set\n");
jngarlitos 1:f3b5e79a8488 582 break;
jngarlitos 1:f3b5e79a8488 583 case 2:
jngarlitos 1:f3b5e79a8488 584 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx64, AD77681_FIR, 0);
jngarlitos 1:f3b5e79a8488 585 pc.printf(" FIR with OSRx64 set\n");
jngarlitos 1:f3b5e79a8488 586 break;
jngarlitos 1:f3b5e79a8488 587 case 3:
jngarlitos 1:f3b5e79a8488 588 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx128, AD77681_FIR, 0);
jngarlitos 1:f3b5e79a8488 589 pc.printf(" FIR with OSRx128 set\n");
jngarlitos 1:f3b5e79a8488 590 break;
jngarlitos 1:f3b5e79a8488 591 case 4:
jngarlitos 1:f3b5e79a8488 592 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx256, AD77681_FIR, 0);
jngarlitos 1:f3b5e79a8488 593 pc.printf(" FIR with OSRx256 set\n");
jngarlitos 1:f3b5e79a8488 594 break;
jngarlitos 1:f3b5e79a8488 595 case 5:
jngarlitos 1:f3b5e79a8488 596 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx512, AD77681_FIR, 0);
jngarlitos 1:f3b5e79a8488 597 pc.printf(" FIR with OSRx512 set\n");
jngarlitos 1:f3b5e79a8488 598 break;
jngarlitos 1:f3b5e79a8488 599 case 6:
jngarlitos 1:f3b5e79a8488 600 ad77681_set_filter_type(device, AD77681_SINC5_FIR_DECx1024, AD77681_FIR, 0);
jngarlitos 1:f3b5e79a8488 601 pc.printf(" FIR with OSRx1024 set\n");
jngarlitos 1:f3b5e79a8488 602 break;
jngarlitos 1:f3b5e79a8488 603 default:
jngarlitos 1:f3b5e79a8488 604 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 605 break;
jngarlitos 1:f3b5e79a8488 606 }
jngarlitos 1:f3b5e79a8488 607 }
jngarlitos 1:f3b5e79a8488 608
jngarlitos 1:f3b5e79a8488 609 /**
jngarlitos 1:f3b5e79a8488 610 * Set 50HZ rejection bit when SINC3 is being used
jngarlitos 1:f3b5e79a8488 611 *
jngarlitos 1:f3b5e79a8488 612 */
jngarlitos 1:f3b5e79a8488 613 void static set_50HZ_rej(void)
jngarlitos 1:f3b5e79a8488 614 {
jngarlitos 1:f3b5e79a8488 615 uint32_t new_50Hz;
jngarlitos 1:f3b5e79a8488 616
jngarlitos 1:f3b5e79a8488 617 pc.printf(" AD7768-1 SINC3 50/60Hz rejection: \n");
jngarlitos 1:f3b5e79a8488 618 pc.printf(" 1 - 50/60Hz rejection enable \n");
jngarlitos 1:f3b5e79a8488 619 pc.printf(" 2 - 50/60Hz rejection disable \n");
jngarlitos 1:f3b5e79a8488 620 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 621
jngarlitos 1:f3b5e79a8488 622 getUserInput(&new_50Hz);
jngarlitos 1:f3b5e79a8488 623 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 624
jngarlitos 1:f3b5e79a8488 625 switch (new_50Hz) {
jngarlitos 1:f3b5e79a8488 626 case 1:
jngarlitos 1:f3b5e79a8488 627 ad77681_set_50HZ_rejection(device, ENABLE);
jngarlitos 1:f3b5e79a8488 628 pc.printf(" SINC3 50/60Hz rejection enabled\n");
jngarlitos 1:f3b5e79a8488 629 break;
jngarlitos 1:f3b5e79a8488 630 case 2:
jngarlitos 1:f3b5e79a8488 631 ad77681_set_50HZ_rejection(device, DISABLE);
jngarlitos 1:f3b5e79a8488 632 pc.printf(" SINC3 50/60Hz rejection disabled\n");
jngarlitos 1:f3b5e79a8488 633 break;
jngarlitos 1:f3b5e79a8488 634 default:
jngarlitos 1:f3b5e79a8488 635 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 636 break;
Kjansen45 0:ae894be1131f 637 }
Kjansen45 0:ae894be1131f 638 }
Kjansen45 0:ae894be1131f 639
jngarlitos 1:f3b5e79a8488 640 /**
jngarlitos 1:f3b5e79a8488 641 * Insert user-defined FIR filter coeffs
jngarlitos 1:f3b5e79a8488 642 *
jngarlitos 1:f3b5e79a8488 643 */
jngarlitos 1:f3b5e79a8488 644 void static set_user_defined_FIR(void)
jngarlitos 1:f3b5e79a8488 645 {
jngarlitos 1:f3b5e79a8488 646 const uint8_t coeff_reg_length = 56; // Maximum allowed number of coefficients in the coeff register
jngarlitos 1:f3b5e79a8488 647
jngarlitos 1:f3b5e79a8488 648 pc.printf(" AD7768-1 User Defined FIR filter\n");
jngarlitos 1:f3b5e79a8488 649
jngarlitos 1:f3b5e79a8488 650 if ((ARRAY_SIZE(programmable_FIR) <= coeff_reg_length) && (count_of_active_coeffs <= coeff_reg_length)) {
jngarlitos 1:f3b5e79a8488 651 pc.printf(" Aplying user-defined FIR filter coefficients from 'cn0535_init_params.h' programmable_FIR[56] \n");
jngarlitos 1:f3b5e79a8488 652 ad77681_programmable_filter(device, programmable_FIR, count_of_active_coeffs);
jngarlitos 1:f3b5e79a8488 653 pc.printf(" Coeffs inserted successfully\n");
jngarlitos 1:f3b5e79a8488 654 } else
jngarlitos 1:f3b5e79a8488 655 pc.printf(" Incorrect count of coefficients in 'cn0535_init_params.h' programmable_FIR[56]\n");
jngarlitos 1:f3b5e79a8488 656 }
jngarlitos 1:f3b5e79a8488 657
jngarlitos 1:f3b5e79a8488 658 /**
jngarlitos 1:f3b5e79a8488 659 * AIN and REF buffers controll
jngarlitos 1:f3b5e79a8488 660 *
jngarlitos 1:f3b5e79a8488 661 */
jngarlitos 1:f3b5e79a8488 662 void static menu_6_ad77681_AIN_buffers_controll(void)
jngarlitos 1:f3b5e79a8488 663 {
jngarlitos 1:f3b5e79a8488 664 uint32_t new_AD77681_REF_buffer = 0;
jngarlitos 1:f3b5e79a8488 665
jngarlitos 1:f3b5e79a8488 666 pc.printf(" AD7768-1 Analog IN precharge buffers settings: \n");
jngarlitos 1:f3b5e79a8488 667 pc.printf(" 1 - Turn ON both precharge buffers\n");
jngarlitos 1:f3b5e79a8488 668 pc.printf(" 2 - Turn OFF both precharge buffers\n");
jngarlitos 1:f3b5e79a8488 669 pc.printf(" 3 - Turn ON AIN- precharge buffer\n");
jngarlitos 1:f3b5e79a8488 670 pc.printf(" 4 - Turn OFF AIN- precharge buffer\n");
jngarlitos 1:f3b5e79a8488 671 pc.printf(" 5 - Turn ON AIN+ precharge buffer\n");
jngarlitos 1:f3b5e79a8488 672 pc.printf(" 6 - Turn OFF AIN+ precharge buffer\n");
jngarlitos 1:f3b5e79a8488 673 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 674
jngarlitos 1:f3b5e79a8488 675
jngarlitos 1:f3b5e79a8488 676 getUserInput(&new_AD77681_REF_buffer);
jngarlitos 1:f3b5e79a8488 677 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 678
jngarlitos 1:f3b5e79a8488 679 switch (new_AD77681_REF_buffer) {
jngarlitos 1:f3b5e79a8488 680 case 1:
jngarlitos 1:f3b5e79a8488 681 ad77681_set_AINn_buffer(device, AD77681_AINn_ENABLED);
jngarlitos 1:f3b5e79a8488 682 ad77681_set_AINp_buffer(device, AD77681_AINp_ENABLED);
jngarlitos 1:f3b5e79a8488 683 pc.printf(" AIN+ and AIN- enabled\n");
jngarlitos 1:f3b5e79a8488 684 break;
jngarlitos 1:f3b5e79a8488 685 case 2:
jngarlitos 1:f3b5e79a8488 686 ad77681_set_AINn_buffer(device, AD77681_AINn_DISABLED);
jngarlitos 1:f3b5e79a8488 687 ad77681_set_AINp_buffer(device, AD77681_AINp_DISABLED);
jngarlitos 1:f3b5e79a8488 688 pc.printf(" AIN+ and AIN- disabled\n");
jngarlitos 1:f3b5e79a8488 689 break;
jngarlitos 1:f3b5e79a8488 690 case 3:
jngarlitos 1:f3b5e79a8488 691 ad77681_set_AINn_buffer(device, AD77681_AINn_ENABLED);
jngarlitos 1:f3b5e79a8488 692 pc.printf(" AIN- Enabled\n");
jngarlitos 1:f3b5e79a8488 693 break;
jngarlitos 1:f3b5e79a8488 694 case 4:
jngarlitos 1:f3b5e79a8488 695 ad77681_set_AINn_buffer(device, AD77681_AINn_DISABLED);
jngarlitos 1:f3b5e79a8488 696 pc.printf(" AIN- Disabled\n");
jngarlitos 1:f3b5e79a8488 697 break;
jngarlitos 1:f3b5e79a8488 698 case 5:
jngarlitos 1:f3b5e79a8488 699 ad77681_set_AINp_buffer(device, AD77681_AINp_ENABLED);
jngarlitos 1:f3b5e79a8488 700 pc.printf(" AIN+ Enabled\n");
jngarlitos 1:f3b5e79a8488 701 break;
jngarlitos 1:f3b5e79a8488 702 case 6:
jngarlitos 1:f3b5e79a8488 703 ad77681_set_AINp_buffer(device, AD77681_AINp_DISABLED);
jngarlitos 1:f3b5e79a8488 704 pc.printf(" AIN+ Disabled\n");
jngarlitos 1:f3b5e79a8488 705 break;
jngarlitos 1:f3b5e79a8488 706 default:
jngarlitos 1:f3b5e79a8488 707 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 708 break;
jngarlitos 1:f3b5e79a8488 709 }
jngarlitos 1:f3b5e79a8488 710 print_prompt();
jngarlitos 1:f3b5e79a8488 711 }
jngarlitos 1:f3b5e79a8488 712
jngarlitos 1:f3b5e79a8488 713 /**
jngarlitos 1:f3b5e79a8488 714 * AIN and REF buffers controll
jngarlitos 1:f3b5e79a8488 715 *
jngarlitos 1:f3b5e79a8488 716 */
jngarlitos 1:f3b5e79a8488 717 void static menu_7_ad77681_REF_buffers_controll(void)
jngarlitos 1:f3b5e79a8488 718 {
jngarlitos 1:f3b5e79a8488 719
jngarlitos 1:f3b5e79a8488 720 uint32_t new_REF_buffer = 0;
jngarlitos 1:f3b5e79a8488 721
jngarlitos 1:f3b5e79a8488 722 pc.printf(" REF buffers settings: \n");
jngarlitos 1:f3b5e79a8488 723 pc.printf(" 1 - Full REF- reference buffer\n");
jngarlitos 1:f3b5e79a8488 724 pc.printf(" 2 - Full REF+ reference buffer\n");
jngarlitos 1:f3b5e79a8488 725 pc.printf(" 3 - Unbuffered REF- reference buffer\n");
jngarlitos 1:f3b5e79a8488 726 pc.printf(" 4 - Unbuffered REF+ reference buffer\n");
jngarlitos 1:f3b5e79a8488 727 pc.printf(" 5 - Precharge REF- reference buffer\n");
jngarlitos 1:f3b5e79a8488 728 pc.printf(" 6 - Precharge REF+ reference buffer\n");
jngarlitos 1:f3b5e79a8488 729 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 730
jngarlitos 1:f3b5e79a8488 731 getUserInput(&new_REF_buffer);
jngarlitos 1:f3b5e79a8488 732 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 733
jngarlitos 1:f3b5e79a8488 734 switch (new_REF_buffer) {
jngarlitos 1:f3b5e79a8488 735 case 1:
jngarlitos 1:f3b5e79a8488 736 ad77681_set_REFn_buffer(device, AD77681_BUFn_FULL_BUFFER_ON);
jngarlitos 1:f3b5e79a8488 737 pc.printf(" Fully buffered REF-\n");
jngarlitos 1:f3b5e79a8488 738 break;
jngarlitos 1:f3b5e79a8488 739 case 2:
jngarlitos 1:f3b5e79a8488 740 ad77681_set_REFp_buffer(device, AD77681_BUFp_FULL_BUFFER_ON);
jngarlitos 1:f3b5e79a8488 741 pc.printf(" Fully buffered REF+\n");
jngarlitos 1:f3b5e79a8488 742 break;
jngarlitos 1:f3b5e79a8488 743 case 3:
jngarlitos 1:f3b5e79a8488 744 ad77681_set_REFn_buffer(device, AD77681_BUFn_DISABLED);
jngarlitos 1:f3b5e79a8488 745 pc.printf(" Unbuffered REF-\n");
jngarlitos 1:f3b5e79a8488 746 break;
jngarlitos 1:f3b5e79a8488 747 case 4:
jngarlitos 1:f3b5e79a8488 748 ad77681_set_REFp_buffer(device, AD77681_BUFp_DISABLED);
jngarlitos 1:f3b5e79a8488 749 pc.printf(" Unbuffered REF+\n");
jngarlitos 1:f3b5e79a8488 750 break;
jngarlitos 1:f3b5e79a8488 751 case 5:
jngarlitos 1:f3b5e79a8488 752 ad77681_set_REFn_buffer(device, AD77681_BUFn_ENABLED);
jngarlitos 1:f3b5e79a8488 753 pc.printf(" Precharge buffer on REF-\n");
jngarlitos 1:f3b5e79a8488 754 break;
jngarlitos 1:f3b5e79a8488 755 case 6:
jngarlitos 1:f3b5e79a8488 756 ad77681_set_REFp_buffer(device, AD77681_BUFp_ENABLED);
jngarlitos 1:f3b5e79a8488 757 pc.printf(" Precharge buffer on REF+\n");
jngarlitos 1:f3b5e79a8488 758 break;
jngarlitos 1:f3b5e79a8488 759 default:
jngarlitos 1:f3b5e79a8488 760 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 761 break;
jngarlitos 1:f3b5e79a8488 762
jngarlitos 1:f3b5e79a8488 763 }
jngarlitos 1:f3b5e79a8488 764 print_prompt();
jngarlitos 1:f3b5e79a8488 765 }
jngarlitos 1:f3b5e79a8488 766
jngarlitos 1:f3b5e79a8488 767 /**
jngarlitos 1:f3b5e79a8488 768 * VCM output controll
jngarlitos 1:f3b5e79a8488 769 *
jngarlitos 1:f3b5e79a8488 770 */
jngarlitos 1:f3b5e79a8488 771 void static menu_8_set_ad77681_vcm_setup(void)
jngarlitos 1:f3b5e79a8488 772 {
jngarlitos 1:f3b5e79a8488 773 uint32_t new_vcm = 0;
jngarlitos 1:f3b5e79a8488 774
jngarlitos 1:f3b5e79a8488 775 pc.printf(" Avaliable VCM output voltage levels: \n");
jngarlitos 1:f3b5e79a8488 776 pc.printf(" 1 - VCM = (AVDD1-AVSS)/2\n");
jngarlitos 1:f3b5e79a8488 777 pc.printf(" 2 - VCM = 2.5V\n");
jngarlitos 1:f3b5e79a8488 778 pc.printf(" 3 - VCM = 2.05V\n");
jngarlitos 1:f3b5e79a8488 779 pc.printf(" 4 - VCM = 1.9V\n");
jngarlitos 1:f3b5e79a8488 780 pc.printf(" 5 - VCM = 1.65V\n");
jngarlitos 1:f3b5e79a8488 781 pc.printf(" 6 - VCM = 1.1V\n");
jngarlitos 1:f3b5e79a8488 782 pc.printf(" 7 - VCM = 0.9V\n");
jngarlitos 1:f3b5e79a8488 783 pc.printf(" 8 - VCM off\n");
jngarlitos 1:f3b5e79a8488 784 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 785
jngarlitos 1:f3b5e79a8488 786 getUserInput(&new_vcm);
jngarlitos 1:f3b5e79a8488 787 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 788
jngarlitos 1:f3b5e79a8488 789 switch (new_vcm) {
jngarlitos 1:f3b5e79a8488 790
jngarlitos 1:f3b5e79a8488 791 case 1:
jngarlitos 1:f3b5e79a8488 792 ad77681_set_VCM_output(device, AD77681_VCM_HALF_VCC);
jngarlitos 1:f3b5e79a8488 793 pc.printf(" VCM set to half of the Vcc\n");
jngarlitos 1:f3b5e79a8488 794 break;
jngarlitos 1:f3b5e79a8488 795 case 2:
jngarlitos 1:f3b5e79a8488 796 ad77681_set_VCM_output(device, AD77681_VCM_2_5V);
jngarlitos 1:f3b5e79a8488 797 pc.printf(" VCM set to 2.5V\n");
jngarlitos 1:f3b5e79a8488 798 break;
jngarlitos 1:f3b5e79a8488 799 case 3:
jngarlitos 1:f3b5e79a8488 800 ad77681_set_VCM_output(device, AD77681_VCM_2_05V);
jngarlitos 1:f3b5e79a8488 801 pc.printf(" VCM set to 2.05V\n");
jngarlitos 1:f3b5e79a8488 802 break;
jngarlitos 1:f3b5e79a8488 803 case 4:
jngarlitos 1:f3b5e79a8488 804 ad77681_set_VCM_output(device, AD77681_VCM_1_9V);
jngarlitos 1:f3b5e79a8488 805 pc.printf(" VCM set to 1.9V\n");
jngarlitos 1:f3b5e79a8488 806 break;
jngarlitos 1:f3b5e79a8488 807 case 5:
jngarlitos 1:f3b5e79a8488 808 ad77681_set_VCM_output(device, AD77681_VCM_1_65V);
jngarlitos 1:f3b5e79a8488 809 pc.printf(" VCM set to 1.65V\n");
jngarlitos 1:f3b5e79a8488 810 break;
jngarlitos 1:f3b5e79a8488 811 case 6:
jngarlitos 1:f3b5e79a8488 812 ad77681_set_VCM_output(device, AD77681_VCM_1_1V);
jngarlitos 1:f3b5e79a8488 813 pc.printf(" VCM set to 1.1V\n");
jngarlitos 1:f3b5e79a8488 814 break;
jngarlitos 1:f3b5e79a8488 815 case 7:
jngarlitos 1:f3b5e79a8488 816 ad77681_set_VCM_output(device, AD77681_VCM_0_9V);
jngarlitos 1:f3b5e79a8488 817 pc.printf(" VCM set to 0.9V\n");
jngarlitos 1:f3b5e79a8488 818 break;
jngarlitos 1:f3b5e79a8488 819 case 8:
jngarlitos 1:f3b5e79a8488 820 ad77681_set_VCM_output(device, AD77681_VCM_OFF);
jngarlitos 1:f3b5e79a8488 821 pc.printf(" VCM OFF\n");
jngarlitos 1:f3b5e79a8488 822 break;
jngarlitos 1:f3b5e79a8488 823 default:
jngarlitos 1:f3b5e79a8488 824 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 825 break;
jngarlitos 1:f3b5e79a8488 826 }
jngarlitos 1:f3b5e79a8488 827 print_prompt();
jngarlitos 1:f3b5e79a8488 828 }
jngarlitos 1:f3b5e79a8488 829
jngarlitos 1:f3b5e79a8488 830 /**
jngarlitos 1:f3b5e79a8488 831 * Set data output mode
jngarlitos 1:f3b5e79a8488 832 *
jngarlitos 1:f3b5e79a8488 833 */
jngarlitos 1:f3b5e79a8488 834 void static menu_9_set_ad77681_data_output_mode(void)
jngarlitos 1:f3b5e79a8488 835 {
jngarlitos 1:f3b5e79a8488 836 uint32_t new_data_mode = 0, new_length = 0, new_status = 0, new_crc = 0;
jngarlitos 1:f3b5e79a8488 837
jngarlitos 1:f3b5e79a8488 838 pc.printf(" ADC data outpup modes: \n");
jngarlitos 1:f3b5e79a8488 839 pc.printf(" 1 - Continuous: waiting for DRDY\n");
jngarlitos 1:f3b5e79a8488 840 pc.printf(" 2 - Continuous one shot: waiting for SYNC_IN\n");
jngarlitos 1:f3b5e79a8488 841 pc.printf(" 3 - Single-conversion standby\n");
jngarlitos 1:f3b5e79a8488 842 pc.printf(" 4 - Periodic standby\n");
jngarlitos 1:f3b5e79a8488 843 pc.printf(" 5 - Standby mode\n");
jngarlitos 1:f3b5e79a8488 844 pc.printf(" 6 - 16bit or 24bit data format\n");
jngarlitos 1:f3b5e79a8488 845 pc.printf(" 7 - Status bit output\n");
jngarlitos 1:f3b5e79a8488 846 pc.printf(" 8 - Switch form diag mode to measure\n");
jngarlitos 1:f3b5e79a8488 847 pc.printf(" 9 - Switch form measure to diag mode\n");
jngarlitos 1:f3b5e79a8488 848 pc.printf(" 10 - Set CRC type\n");
jngarlitos 1:f3b5e79a8488 849 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 850
jngarlitos 1:f3b5e79a8488 851 getUserInput(&new_data_mode);
jngarlitos 1:f3b5e79a8488 852 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 853
jngarlitos 1:f3b5e79a8488 854 switch (new_data_mode) {
jngarlitos 1:f3b5e79a8488 855 case 1:
jngarlitos 1:f3b5e79a8488 856 ad77681_set_conv_mode(device, AD77681_CONV_CONTINUOUS, device->diag_mux_sel, device->conv_diag_sel); // DIAG MUX NOT SELECTED
jngarlitos 1:f3b5e79a8488 857 pc.printf(" Continuous mode set\n");
jngarlitos 1:f3b5e79a8488 858 break;
jngarlitos 1:f3b5e79a8488 859 case 2:
jngarlitos 1:f3b5e79a8488 860 ad77681_set_conv_mode(device, AD77681_CONV_ONE_SHOT, device->diag_mux_sel, device->conv_diag_sel);
jngarlitos 1:f3b5e79a8488 861 pc.printf(" Continuous one shot conversion set\n");
jngarlitos 1:f3b5e79a8488 862 break;
jngarlitos 1:f3b5e79a8488 863 case 3:
jngarlitos 1:f3b5e79a8488 864 ad77681_set_conv_mode(device, AD77681_CONV_SINGLE, device->diag_mux_sel, device->conv_diag_sel);
jngarlitos 1:f3b5e79a8488 865 pc.printf(" Single conversion standby mode set\n");
jngarlitos 1:f3b5e79a8488 866 break;
jngarlitos 1:f3b5e79a8488 867 case 4:
jngarlitos 1:f3b5e79a8488 868 ad77681_set_conv_mode(device, AD77681_CONV_PERIODIC, device->diag_mux_sel, device->conv_diag_sel);
jngarlitos 1:f3b5e79a8488 869 pc.printf(" Periodiec standby mode set\n");
jngarlitos 1:f3b5e79a8488 870 break;
jngarlitos 1:f3b5e79a8488 871 case 5:
jngarlitos 1:f3b5e79a8488 872 ad77681_set_conv_mode(device, AD77681_CONV_STANDBY, device->diag_mux_sel, device->conv_diag_sel);
jngarlitos 1:f3b5e79a8488 873 pc.printf(" Standby mode set\n");
jngarlitos 1:f3b5e79a8488 874 break;
jngarlitos 1:f3b5e79a8488 875 case 6:
jngarlitos 1:f3b5e79a8488 876 pc.printf(" Conversion length select: \n");
jngarlitos 1:f3b5e79a8488 877 pc.printf(" 1 - 24bit length\n");
jngarlitos 1:f3b5e79a8488 878 pc.printf(" 2 - 16bit length\n");
jngarlitos 1:f3b5e79a8488 879
jngarlitos 1:f3b5e79a8488 880 getUserInput(&new_length);
jngarlitos 1:f3b5e79a8488 881 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 882
jngarlitos 1:f3b5e79a8488 883 switch (new_length) {
jngarlitos 1:f3b5e79a8488 884 case 1:
jngarlitos 1:f3b5e79a8488 885 ad77681_set_convlen(device, AD77681_CONV_24BIT);
jngarlitos 1:f3b5e79a8488 886 pc.printf(" 24bit data output format selected\n");
jngarlitos 1:f3b5e79a8488 887 break;
jngarlitos 1:f3b5e79a8488 888 case 2:
jngarlitos 1:f3b5e79a8488 889 ad77681_set_convlen(device, AD77681_CONV_16BIT);
jngarlitos 1:f3b5e79a8488 890 pc.printf(" 16bit data output format selected\n");
jngarlitos 1:f3b5e79a8488 891 break;
jngarlitos 1:f3b5e79a8488 892 default:
jngarlitos 1:f3b5e79a8488 893 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 894 break;
jngarlitos 1:f3b5e79a8488 895 }
jngarlitos 1:f3b5e79a8488 896 break;
jngarlitos 1:f3b5e79a8488 897 case 7:
jngarlitos 1:f3b5e79a8488 898 pc.printf(" Status bit output: \n");
jngarlitos 1:f3b5e79a8488 899 pc.printf(" 1 - Enable status bit after each ADC conversion\n");
jngarlitos 1:f3b5e79a8488 900 pc.printf(" 2 - Disable status bit after each ADC conversion\n");
jngarlitos 1:f3b5e79a8488 901
jngarlitos 1:f3b5e79a8488 902 getUserInput(&new_status);
jngarlitos 1:f3b5e79a8488 903 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 904
jngarlitos 1:f3b5e79a8488 905 switch (new_status) {
jngarlitos 1:f3b5e79a8488 906 case 1:
jngarlitos 1:f3b5e79a8488 907 ad77681_set_status_bit(device, true);
jngarlitos 1:f3b5e79a8488 908 pc.printf(" Status bit enabled\n");
jngarlitos 1:f3b5e79a8488 909 break;
jngarlitos 1:f3b5e79a8488 910 case 2:
jngarlitos 1:f3b5e79a8488 911 ad77681_set_status_bit(device, false);
jngarlitos 1:f3b5e79a8488 912 pc.printf(" Status bit disabled\n");
jngarlitos 1:f3b5e79a8488 913 break;
jngarlitos 1:f3b5e79a8488 914 default:
jngarlitos 1:f3b5e79a8488 915 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 916 break;
jngarlitos 1:f3b5e79a8488 917 }
jngarlitos 1:f3b5e79a8488 918
jngarlitos 1:f3b5e79a8488 919 break;
jngarlitos 1:f3b5e79a8488 920 case 8:
jngarlitos 1:f3b5e79a8488 921 ad77681_set_conv_mode(device, device->conv_mode, device->diag_mux_sel, false); // DIAG MUX NOT SELECTED
jngarlitos 1:f3b5e79a8488 922 pc.printf(" Measure mode selected\n");
jngarlitos 1:f3b5e79a8488 923 break;
jngarlitos 1:f3b5e79a8488 924 case 9:
jngarlitos 1:f3b5e79a8488 925 ad77681_set_conv_mode(device, device->conv_mode, device->diag_mux_sel, true); // DIAG MUX SELECTED
jngarlitos 1:f3b5e79a8488 926 pc.printf(" Diagnostic mode selected\n");
jngarlitos 1:f3b5e79a8488 927 break;
jngarlitos 1:f3b5e79a8488 928 case 10:
jngarlitos 1:f3b5e79a8488 929 pc.printf(" CRC settings \n");
jngarlitos 1:f3b5e79a8488 930 pc.printf(" 1 - Disable CRC\n");
jngarlitos 1:f3b5e79a8488 931 pc.printf(" 2 - 8-bit polynomial CRC\n");
jngarlitos 1:f3b5e79a8488 932 pc.printf(" 3 - XOR based CRC\n");
jngarlitos 1:f3b5e79a8488 933
jngarlitos 1:f3b5e79a8488 934 getUserInput(&new_crc);
jngarlitos 1:f3b5e79a8488 935 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 936
jngarlitos 1:f3b5e79a8488 937 switch (new_crc) {
jngarlitos 1:f3b5e79a8488 938 case 1:
jngarlitos 1:f3b5e79a8488 939 if(ad77681_set_crc_sel(device, AD77681_NO_CRC)==SUCCESS)
jngarlitos 1:f3b5e79a8488 940 pc.printf(" CRC disabled\n");
jngarlitos 1:f3b5e79a8488 941 else
jngarlitos 1:f3b5e79a8488 942 pc.printf("Command Failed\n");
jngarlitos 1:f3b5e79a8488 943 break;
jngarlitos 1:f3b5e79a8488 944 case 2:
jngarlitos 1:f3b5e79a8488 945 ad77681_set_crc_sel(device, AD77681_CRC);
jngarlitos 1:f3b5e79a8488 946 pc.printf(" 8-bit polynomial CRC method selected\n");
jngarlitos 1:f3b5e79a8488 947 break;
jngarlitos 1:f3b5e79a8488 948 case 3:
jngarlitos 1:f3b5e79a8488 949 ad77681_set_crc_sel(device, AD77681_XOR);
jngarlitos 1:f3b5e79a8488 950 pc.printf(" XOR based CRC method selected\n");
jngarlitos 1:f3b5e79a8488 951 break;
jngarlitos 1:f3b5e79a8488 952 default:
jngarlitos 1:f3b5e79a8488 953 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 954 break;
jngarlitos 1:f3b5e79a8488 955 }
jngarlitos 1:f3b5e79a8488 956 break;
jngarlitos 1:f3b5e79a8488 957
jngarlitos 1:f3b5e79a8488 958 default:
jngarlitos 1:f3b5e79a8488 959 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 960 break;
jngarlitos 1:f3b5e79a8488 961 }
jngarlitos 1:f3b5e79a8488 962 print_prompt();
jngarlitos 1:f3b5e79a8488 963 }
jngarlitos 1:f3b5e79a8488 964
jngarlitos 1:f3b5e79a8488 965 /**
jngarlitos 1:f3b5e79a8488 966 * Set diagnostic mode
jngarlitos 1:f3b5e79a8488 967 *
jngarlitos 1:f3b5e79a8488 968 */
jngarlitos 1:f3b5e79a8488 969 void static menu_10_set_ad77681_diagnostic_mode(void)
jngarlitos 1:f3b5e79a8488 970 {
jngarlitos 1:f3b5e79a8488 971 uint32_t new_diag_mode = 0;
jngarlitos 1:f3b5e79a8488 972
jngarlitos 1:f3b5e79a8488 973 pc.printf(" ADC diagnostic modes: \n");
jngarlitos 1:f3b5e79a8488 974 pc.printf(" 1 - Internal temperature sensor\n");
jngarlitos 1:f3b5e79a8488 975 pc.printf(" 2 - AIN shorted\n");
jngarlitos 1:f3b5e79a8488 976 pc.printf(" 3 - Positive full-scale\n");
jngarlitos 1:f3b5e79a8488 977 pc.printf(" 4 - Negative full-scale\n");
jngarlitos 1:f3b5e79a8488 978 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 979
jngarlitos 1:f3b5e79a8488 980 getUserInput(&new_diag_mode);
jngarlitos 1:f3b5e79a8488 981 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 982
jngarlitos 1:f3b5e79a8488 983 switch (new_diag_mode) {
jngarlitos 1:f3b5e79a8488 984 case 1:
jngarlitos 1:f3b5e79a8488 985 ad77681_set_conv_mode(device, device->conv_mode, AD77681_TEMP_SENSOR, true);
jngarlitos 1:f3b5e79a8488 986 pc.printf(" Diagnostic mode: Internal temperature sensor selected\n");
jngarlitos 1:f3b5e79a8488 987 break;
jngarlitos 1:f3b5e79a8488 988 case 2:
jngarlitos 1:f3b5e79a8488 989 ad77681_set_conv_mode(device, device->conv_mode, AD77681_AIN_SHORT, true);
jngarlitos 1:f3b5e79a8488 990 pc.printf(" Diagnostic mode: AIN shorted selected\n");
jngarlitos 1:f3b5e79a8488 991 break;
jngarlitos 1:f3b5e79a8488 992 case 3:
jngarlitos 1:f3b5e79a8488 993 ad77681_set_conv_mode(device, device->conv_mode, AD77681_POSITIVE_FS, true);
jngarlitos 1:f3b5e79a8488 994 pc.printf(" Diagnostic mode: Positive full-scale selected\n");
jngarlitos 1:f3b5e79a8488 995 break;
jngarlitos 1:f3b5e79a8488 996 case 4:
jngarlitos 1:f3b5e79a8488 997 ad77681_set_conv_mode(device, device->conv_mode, AD77681_NEGATIVE_FS, true);
jngarlitos 1:f3b5e79a8488 998 pc.printf(" Diagnostic mode: Negative full-scale selected\n");
jngarlitos 1:f3b5e79a8488 999 break;
jngarlitos 1:f3b5e79a8488 1000 default:
jngarlitos 1:f3b5e79a8488 1001 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1002 break;
jngarlitos 1:f3b5e79a8488 1003 }
jngarlitos 1:f3b5e79a8488 1004 print_prompt();
jngarlitos 1:f3b5e79a8488 1005 }
jngarlitos 1:f3b5e79a8488 1006
jngarlitos 1:f3b5e79a8488 1007 /**
jngarlitos 1:f3b5e79a8488 1008 * Set Gains and Offsets
jngarlitos 1:f3b5e79a8488 1009 *
jngarlitos 1:f3b5e79a8488 1010 */
jngarlitos 1:f3b5e79a8488 1011 void static menu_11_set_ad77681_gains_offsets(void)
jngarlitos 1:f3b5e79a8488 1012 {
jngarlitos 1:f3b5e79a8488 1013 uint32_t gain_offset, ret;
jngarlitos 1:f3b5e79a8488 1014 uint32_t new_menu_select;
jngarlitos 1:f3b5e79a8488 1015
jngarlitos 1:f3b5e79a8488 1016 pc.printf(" Gains and Offsets settings: \n");
jngarlitos 1:f3b5e79a8488 1017 pc.printf(" 1 - Set gain\n");
jngarlitos 1:f3b5e79a8488 1018 pc.printf(" 2 - Set offset\n");
jngarlitos 1:f3b5e79a8488 1019 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 1020
jngarlitos 1:f3b5e79a8488 1021 getUserInput(&new_menu_select);
jngarlitos 1:f3b5e79a8488 1022 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1023
jngarlitos 1:f3b5e79a8488 1024 switch (new_menu_select) {
jngarlitos 1:f3b5e79a8488 1025 case 1:
jngarlitos 1:f3b5e79a8488 1026 pc.printf(" Insert new Gain value in decimal form\n");
jngarlitos 1:f3b5e79a8488 1027 ret = getUserInput(&gain_offset);
jngarlitos 1:f3b5e79a8488 1028
jngarlitos 1:f3b5e79a8488 1029 if ((gain_offset <= 0xFFFFFF) && (ret == SUCCESS)) {
jngarlitos 1:f3b5e79a8488 1030 ad77681_apply_gain(device, gain_offset);
jngarlitos 1:f3b5e79a8488 1031 pc.printf(" Value %d has been successfully inserted to the Gain register\n", gain_offset);
jngarlitos 1:f3b5e79a8488 1032 } else
jngarlitos 1:f3b5e79a8488 1033 pc.printf(" Invalid value\n");
jngarlitos 1:f3b5e79a8488 1034 break;
jngarlitos 1:f3b5e79a8488 1035 case 2:
jngarlitos 1:f3b5e79a8488 1036 pc.printf(" Insert new Offset value in decimal form\n");
jngarlitos 1:f3b5e79a8488 1037 ret = getUserInput(&gain_offset);
jngarlitos 1:f3b5e79a8488 1038
jngarlitos 1:f3b5e79a8488 1039 if ((gain_offset <= 0xFFFFFF) && (ret == SUCCESS)) {
jngarlitos 1:f3b5e79a8488 1040 ad77681_apply_offset(device, gain_offset);
jngarlitos 1:f3b5e79a8488 1041 pc.printf(" Value %d has been successfully inserted to the Offset register\n", gain_offset);
jngarlitos 1:f3b5e79a8488 1042 } else
jngarlitos 1:f3b5e79a8488 1043 pc.printf(" Invalid value\n");
jngarlitos 1:f3b5e79a8488 1044 break;
jngarlitos 1:f3b5e79a8488 1045 default:
jngarlitos 1:f3b5e79a8488 1046 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1047 break;
jngarlitos 1:f3b5e79a8488 1048 }
jngarlitos 1:f3b5e79a8488 1049 print_prompt();
jngarlitos 1:f3b5e79a8488 1050 }
jngarlitos 1:f3b5e79a8488 1051
jngarlitos 1:f3b5e79a8488 1052 /**
jngarlitos 1:f3b5e79a8488 1053 * Read ADC status from status registers
jngarlitos 1:f3b5e79a8488 1054 *
jngarlitos 1:f3b5e79a8488 1055 */
jngarlitos 1:f3b5e79a8488 1056 void static menu_12_ad77681_read_master_status(void)
jngarlitos 1:f3b5e79a8488 1057 {
jngarlitos 1:f3b5e79a8488 1058 uint8_t reg_read_buf[3];
jngarlitos 1:f3b5e79a8488 1059 char binary_number[8];
jngarlitos 1:f3b5e79a8488 1060
jngarlitos 1:f3b5e79a8488 1061 ad77681_status(device, current_status); // Read AD7768-1 Status
jngarlitos 1:f3b5e79a8488 1062 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1063 pc.printf("== MASTER STATUS REGISER\n");
jngarlitos 1:f3b5e79a8488 1064 pc.printf("Master error: %s\n", ((current_status->master_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1065 pc.printf("ADC error: %s\n", ((current_status->adc_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1066 pc.printf("Dig error: %s\n", ((current_status->dig_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1067 pc.printf("Ext. clock: %s\n", ((current_status->adc_err_ext_clk_qual == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1068 pc.printf("Filter saturated: %s\n", ((current_status->adc_filt_saturated == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1069 pc.printf("Filter not settled: %s\n", ((current_status->adc_filt_not_settled == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1070 pc.printf("SPI error: %s\n", ((current_status->spi_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1071 pc.printf("POR Flag: %s\n", ((current_status->por_flag == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1072
jngarlitos 1:f3b5e79a8488 1073 if (current_status->spi_error == 1) {
jngarlitos 1:f3b5e79a8488 1074 pc.printf("\n== SPI DIAG STATUS REGISER\n");
jngarlitos 1:f3b5e79a8488 1075 pc.printf("SPI ignore error: %s\n", ((current_status->spi_ignore == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1076 pc.printf("SPI clock count error: %s\n", ((current_status->spi_clock_count == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1077 pc.printf("SPI read error: %s\n", ((current_status->spi_read_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1078 pc.printf("SPI write error: %s\n", ((current_status->spi_write_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1079 pc.printf("SPI CRC error: %s\n", ((current_status->spi_crc_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1080 }
jngarlitos 1:f3b5e79a8488 1081
jngarlitos 1:f3b5e79a8488 1082 if (current_status->adc_error == 1) {
jngarlitos 1:f3b5e79a8488 1083 pc.printf("\n== ADC DIAG STATUS REGISER\n");
jngarlitos 1:f3b5e79a8488 1084 pc.printf("DLDO PSM error: %s\n", ((current_status->dldo_psm_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1085 pc.printf("ALDO PSM error: %s\n", ((current_status->aldo_psm_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1086 pc.printf("REF DET error: %s\n", ((current_status->ref_det_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1087 pc.printf("FILT SAT error: %s\n", ((current_status->filt_sat_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1088 pc.printf("FILT NOT SET error: %s\n", ((current_status->filt_not_set_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1089 pc.printf("EXT CLK QUAL error: %s\n", ((current_status->ext_clk_qual_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1090 }
jngarlitos 1:f3b5e79a8488 1091
jngarlitos 1:f3b5e79a8488 1092 if (current_status->dig_error == 1) {
jngarlitos 1:f3b5e79a8488 1093 pc.printf("\n== DIGITAL DIAG STATUS REGISER\n");
jngarlitos 1:f3b5e79a8488 1094 pc.printf("Memory map CRC error: %s\n", ((current_status->memoy_map_crc_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1095 pc.printf("RAM CRC error: %s\n", ((current_status->ram_crc_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1096 pc.printf("FUSE CRC error: %s\n", ((current_status->fuse_crc_error == 0) ? "OK" : "FAULT"));
jngarlitos 1:f3b5e79a8488 1097 }
jngarlitos 1:f3b5e79a8488 1098
jngarlitos 1:f3b5e79a8488 1099 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1100 print_prompt();
jngarlitos 1:f3b5e79a8488 1101 }
jngarlitos 1:f3b5e79a8488 1102
jngarlitos 1:f3b5e79a8488 1103 /**
jngarlitos 1:f3b5e79a8488 1104 * Register read
jngarlitos 1:f3b5e79a8488 1105 *
jngarlitos 1:f3b5e79a8488 1106 */
jngarlitos 1:f3b5e79a8488 1107 void static menu_13_ad77681_read_register(void)
jngarlitos 1:f3b5e79a8488 1108 {
jngarlitos 1:f3b5e79a8488 1109 uint32_t new_reg_to_read = 0;
jngarlitos 1:f3b5e79a8488 1110 uint8_t reg_read_buf[3], read_adc_data[6], hex_number = 0;
jngarlitos 1:f3b5e79a8488 1111 uint8_t HI = 0, MID = 0, LO = 0;
jngarlitos 1:f3b5e79a8488 1112 char binary_number[8];
jngarlitos 1:f3b5e79a8488 1113
jngarlitos 1:f3b5e79a8488 1114 pc.printf(" Read desired register: \n");
jngarlitos 1:f3b5e79a8488 1115 pc.printf(" 1 - 0x03 - Chip type\n");
jngarlitos 1:f3b5e79a8488 1116 pc.printf(" 2 - 0x14 - Interface format\n");
jngarlitos 1:f3b5e79a8488 1117 pc.printf(" 3 - 0x15 - Power clock\n");
jngarlitos 1:f3b5e79a8488 1118 pc.printf(" 4 - 0x16 - Analog\n");
jngarlitos 1:f3b5e79a8488 1119 pc.printf(" 5 - 0x17 - Analog2\n");
jngarlitos 1:f3b5e79a8488 1120 pc.printf(" 6 - 0x18 - Conversion\n");
jngarlitos 1:f3b5e79a8488 1121 pc.printf(" 7 - 0x19 - Digital filter\n");
jngarlitos 1:f3b5e79a8488 1122 pc.printf(" 8 - 0x1A - SINC3 Dec. rate MSB\n");
jngarlitos 1:f3b5e79a8488 1123 pc.printf(" 9 - 0x1B - SINC3 Dec. rate LSB\n");
jngarlitos 1:f3b5e79a8488 1124 pc.printf(" 10 - 0x1C - Duty cycle ratio\n");
jngarlitos 1:f3b5e79a8488 1125 pc.printf(" 11 - 0x1D - Sync, Reset\n");
jngarlitos 1:f3b5e79a8488 1126 pc.printf(" 12 - 0x1E - GPIO Controll\n");
jngarlitos 1:f3b5e79a8488 1127 pc.printf(" 13 - 0x1F - GPIO Write\n");
jngarlitos 1:f3b5e79a8488 1128 pc.printf(" 14 - 0x20 - GPIO Read\n");
jngarlitos 1:f3b5e79a8488 1129 pc.printf(" 15 - 0x21 - 0x23 - Offset register\n");
jngarlitos 1:f3b5e79a8488 1130 pc.printf(" 16 - 0x24 - 0x26 - Gain register\n");
jngarlitos 1:f3b5e79a8488 1131 pc.printf(" 17 - 0x2C - ADC Data\n");
jngarlitos 1:f3b5e79a8488 1132 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 1133
jngarlitos 1:f3b5e79a8488 1134 getUserInput(&new_reg_to_read);
jngarlitos 1:f3b5e79a8488 1135 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1136
jngarlitos 1:f3b5e79a8488 1137 switch (new_reg_to_read) {
jngarlitos 1:f3b5e79a8488 1138
jngarlitos 1:f3b5e79a8488 1139 case 1:
jngarlitos 1:f3b5e79a8488 1140 ad77681_spi_reg_read(device, AD77681_REG_CHIP_TYPE, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1141 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1142 pc.printf(" Value of 0x03 - Chip type register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1143 break;
jngarlitos 1:f3b5e79a8488 1144 case 2:
jngarlitos 1:f3b5e79a8488 1145 ad77681_spi_reg_read(device, AD77681_REG_INTERFACE_FORMAT, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1146 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1147 pc.printf(" Value of 0x14 - Interface format register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1148 break;
jngarlitos 1:f3b5e79a8488 1149 case 3:
jngarlitos 1:f3b5e79a8488 1150 ad77681_spi_reg_read(device, AD77681_REG_POWER_CLOCK, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1151 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1152 pc.printf(" Value of 0x15 - Power clock register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1153 break;
jngarlitos 1:f3b5e79a8488 1154 case 4:
jngarlitos 1:f3b5e79a8488 1155 ad77681_spi_reg_read(device, AD77681_REG_ANALOG, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1156 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1157 pc.printf(" Value of 0x16 - Anlaog register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1158 break;
jngarlitos 1:f3b5e79a8488 1159 case 5:
jngarlitos 1:f3b5e79a8488 1160 ad77681_spi_reg_read(device, AD77681_REG_ANALOG2, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1161 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1162 pc.printf(" Value of 0x17 - Analog2 regster is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1163 break;
jngarlitos 1:f3b5e79a8488 1164 case 6:
jngarlitos 1:f3b5e79a8488 1165 ad77681_spi_reg_read(device, AD77681_REG_CONVERSION, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1166 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1167 pc.printf(" Value of 0x18 - Conversion register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1168 break;
jngarlitos 1:f3b5e79a8488 1169 case 7:
jngarlitos 1:f3b5e79a8488 1170 ad77681_spi_reg_read(device, AD77681_REG_DIGITAL_FILTER, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1171 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1172 pc.printf(" Value of 0x19 - Digital filter register is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1173 break;
jngarlitos 1:f3b5e79a8488 1174 case 8:
jngarlitos 1:f3b5e79a8488 1175 ad77681_spi_reg_read(device, AD77681_REG_SINC3_DEC_RATE_MSB, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1176 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1177 pc.printf(" Value of 0x1A - SINC3 Dec. rate MSB is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1178 break;
jngarlitos 1:f3b5e79a8488 1179 case 9:
jngarlitos 1:f3b5e79a8488 1180 ad77681_spi_reg_read(device, AD77681_REG_SINC3_DEC_RATE_LSB, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1181 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1182 pc.printf(" Value of 0x1B - SINC3 Dec. rate LSB is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1183 break;
jngarlitos 1:f3b5e79a8488 1184 case 10:
jngarlitos 1:f3b5e79a8488 1185 ad77681_spi_reg_read(device, AD77681_REG_DUTY_CYCLE_RATIO, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1186 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1187 pc.printf(" Value of 0x1C - Duty cycle ratio 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1188 break;
jngarlitos 1:f3b5e79a8488 1189 case 11:
jngarlitos 1:f3b5e79a8488 1190 ad77681_spi_reg_read(device, AD77681_REG_SYNC_RESET, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1191 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1192 pc.printf(" Value of 0x1D - Sync, Reset 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1193 break;
jngarlitos 1:f3b5e79a8488 1194 case 12:
jngarlitos 1:f3b5e79a8488 1195 ad77681_spi_reg_read(device, AD77681_REG_GPIO_CONTROL, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1196 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1197 pc.printf(" Value of 0x1E - GPIO Controll is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1198 break;
jngarlitos 1:f3b5e79a8488 1199 case 13:
jngarlitos 1:f3b5e79a8488 1200 ad77681_spi_reg_read(device, AD77681_REG_GPIO_WRITE, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1201 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1202 pc.printf(" Value of 0x1F - GPIO Write is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1203 break;
jngarlitos 1:f3b5e79a8488 1204 case 14:
jngarlitos 1:f3b5e79a8488 1205 ad77681_spi_reg_read(device, AD77681_REG_GPIO_READ, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1206 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1207 pc.printf(" Value of 0x20 - GPIO Read is: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1208 break;
jngarlitos 1:f3b5e79a8488 1209 case 15:
jngarlitos 1:f3b5e79a8488 1210 ad77681_spi_reg_read(device, AD77681_REG_OFFSET_HI, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1211 HI = reg_read_buf[1];
jngarlitos 1:f3b5e79a8488 1212
jngarlitos 1:f3b5e79a8488 1213 ad77681_spi_reg_read(device, AD77681_REG_OFFSET_MID, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1214 MID = reg_read_buf[1];
jngarlitos 1:f3b5e79a8488 1215
jngarlitos 1:f3b5e79a8488 1216 ad77681_spi_reg_read(device, AD77681_REG_OFFSET_LO, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1217 LO = reg_read_buf[1];
jngarlitos 1:f3b5e79a8488 1218
jngarlitos 1:f3b5e79a8488 1219 pc.printf(" Value of 0x21 - 0x23 - Offset register is: 0x%x %x %x\n", HI, MID, LO);
jngarlitos 1:f3b5e79a8488 1220 break;
jngarlitos 1:f3b5e79a8488 1221 case 16:
jngarlitos 1:f3b5e79a8488 1222 ad77681_spi_reg_read(device, AD77681_REG_GAIN_HI, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1223 HI = reg_read_buf[1];
jngarlitos 1:f3b5e79a8488 1224
jngarlitos 1:f3b5e79a8488 1225 ad77681_spi_reg_read(device, AD77681_REG_GAIN_MID, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1226 MID = reg_read_buf[1];
jngarlitos 1:f3b5e79a8488 1227
jngarlitos 1:f3b5e79a8488 1228 ad77681_spi_reg_read(device, AD77681_REG_GAIN_LO, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1229 LO = reg_read_buf[1];
jngarlitos 1:f3b5e79a8488 1230
jngarlitos 1:f3b5e79a8488 1231 pc.printf(" Value of 0x24 - 0x26 - Gain register is: 0x%x %x %x\n", HI, MID, LO);
jngarlitos 1:f3b5e79a8488 1232 break;
jngarlitos 1:f3b5e79a8488 1233 case 17:
jngarlitos 1:f3b5e79a8488 1234 ad77681_spi_read_adc_data(device, read_adc_data, AD77681_REGISTER_DATA_READ);
jngarlitos 1:f3b5e79a8488 1235 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:f3b5e79a8488 1236 break;
jngarlitos 1:f3b5e79a8488 1237 case 18:
jngarlitos 1:f3b5e79a8488 1238 ad77681_spi_reg_read(device, AD77681_REG_INTERFACE_FORMAT, reg_read_buf);
jngarlitos 1:f3b5e79a8488 1239 print_binary(reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1240 pc.printf(" Value of 0x14 -REG_INTERFACE_FORMATis: 0x%x 0b%s\n", reg_read_buf[1], binary_number);
jngarlitos 1:f3b5e79a8488 1241 break;
jngarlitos 1:f3b5e79a8488 1242 default :
jngarlitos 1:f3b5e79a8488 1243 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1244 break;
jngarlitos 1:f3b5e79a8488 1245 }
jngarlitos 1:f3b5e79a8488 1246 print_prompt();
jngarlitos 1:f3b5e79a8488 1247 }
jngarlitos 1:f3b5e79a8488 1248
jngarlitos 1:f3b5e79a8488 1249 /**
jngarlitos 1:f3b5e79a8488 1250 * Print measured data and transfered to voltage
jngarlitos 1:f3b5e79a8488 1251 *
jngarlitos 1:f3b5e79a8488 1252 */
jngarlitos 1:f3b5e79a8488 1253 void static menu_14_read_ad77681_single_conv_data(void)
jngarlitos 1:f3b5e79a8488 1254 {
jngarlitos 1:f3b5e79a8488 1255
jngarlitos 1:f3b5e79a8488 1256 uint8_t adc_reg[6];
jngarlitos 1:f3b5e79a8488 1257 uint32_t raw_code;
jngarlitos 1:f3b5e79a8488 1258 int32_t converted_data;
jngarlitos 1:f3b5e79a8488 1259 double voltage;
jngarlitos 1:f3b5e79a8488 1260 int32_t shifted_data;
jngarlitos 1:f3b5e79a8488 1261 char buf[15];
jngarlitos 1:f3b5e79a8488 1262
jngarlitos 1:f3b5e79a8488 1263 ad77681_spi_read_adc_data(device, adc_reg, AD77681_REGISTER_DATA_READ);
jngarlitos 1:f3b5e79a8488 1264 raw_code = (adc_reg[1] << 16) | (adc_reg[2] << 8) | (adc_reg[3] << 0);
jngarlitos 1:f3b5e79a8488 1265 // Printing Voltage
jngarlitos 1:f3b5e79a8488 1266 pc.printf("\n\nVoltage\n");
jngarlitos 1:f3b5e79a8488 1267 ad77681_data_to_voltage(device, &raw_code, &voltage);
jngarlitos 1:f3b5e79a8488 1268 sprintf(buf, "%.9f \n",voltage);
jngarlitos 1:f3b5e79a8488 1269 pc.printf(buf);
jngarlitos 1:f3b5e79a8488 1270 memset(buf, 0, sizeof(buf));//clears buffer
jngarlitos 1:f3b5e79a8488 1271
jngarlitos 1:f3b5e79a8488 1272 // Printing Raw Code
jngarlitos 1:f3b5e79a8488 1273 pc.printf("\n\nRaw Code\n");
jngarlitos 1:f3b5e79a8488 1274 pc.printf("%d\n", raw_code);
jngarlitos 1:f3b5e79a8488 1275
jngarlitos 1:f3b5e79a8488 1276 // Printing Shifted Code
jngarlitos 1:f3b5e79a8488 1277 pc.printf("\n\nShifted Code\n");
jngarlitos 1:f3b5e79a8488 1278 if (raw_code & 0x800000)
jngarlitos 1:f3b5e79a8488 1279 shifted_data = (int32_t)((0xFF << 24) | raw_code);
jngarlitos 1:f3b5e79a8488 1280 else
jngarlitos 1:f3b5e79a8488 1281 shifted_data = (int32_t)((0x00 << 24) | raw_code);
jngarlitos 1:f3b5e79a8488 1282 pc.printf("%d\n", shifted_data + AD7768_HALF_SCALE);
jngarlitos 1:f3b5e79a8488 1283
jngarlitos 1:f3b5e79a8488 1284 print_prompt();
jngarlitos 1:f3b5e79a8488 1285 }
jngarlitos 1:f3b5e79a8488 1286
jngarlitos 1:f3b5e79a8488 1287 /**
jngarlitos 1:f3b5e79a8488 1288 * Read ADC data
jngarlitos 1:f3b5e79a8488 1289 *
jngarlitos 1:f3b5e79a8488 1290 */
jngarlitos 1:f3b5e79a8488 1291 void static menu_15_read_ad77681_continuous_data(void)
jngarlitos 1:f3b5e79a8488 1292 {
jngarlitos 1:f3b5e79a8488 1293 uint8_t buf[6];
jngarlitos 1:f3b5e79a8488 1294 uint32_t new_sample_count = 0;
jngarlitos 1:f3b5e79a8488 1295 int32_t ret;
jngarlitos 1:f3b5e79a8488 1296
jngarlitos 1:f3b5e79a8488 1297 pc.printf(" Read Continuous ADC Data");
jngarlitos 1:f3b5e79a8488 1298 pc.printf(" Input number of samples (1 to 4096): \n");
jngarlitos 1:f3b5e79a8488 1299 ret = getUserInput(&new_sample_count); // Get user input
jngarlitos 1:f3b5e79a8488 1300
jngarlitos 1:f3b5e79a8488 1301 if ((new_sample_count <= 4096) && (ret == SUCCESS) ) {
jngarlitos 1:f3b5e79a8488 1302 pc.printf("\n%d of samples\n", new_sample_count); // Print Desired Measurement Count
jngarlitos 1:f3b5e79a8488 1303 measured_data.samples = (uint16_t)(new_sample_count);
jngarlitos 1:f3b5e79a8488 1304 measured_data.finish = false;
jngarlitos 1:f3b5e79a8488 1305 measured_data.count = 0;
jngarlitos 1:f3b5e79a8488 1306 pc.printf("Sampling....\n");
jngarlitos 1:f3b5e79a8488 1307 ad77681_set_continuos_read(device, AD77681_CONTINUOUS_READ_ENABLE);
jngarlitos 1:f3b5e79a8488 1308 __enable_irq(); // Enable all interupts
jngarlitos 1:f3b5e79a8488 1309 drdy.enable_irq(); // Enable interrupt on DRDY pin
jngarlitos 1:f3b5e79a8488 1310 drdy.fall(&drdy_interrupt); // Interrupt on falling edne of DRDY
jngarlitos 1:f3b5e79a8488 1311
jngarlitos 1:f3b5e79a8488 1312 while (!measured_data.finish) { // While loop. Waiting for the measurements to be completed
jngarlitos 1:f3b5e79a8488 1313 if (int_event==true) { // Checks if Interrupt Occurred
jngarlitos 1:f3b5e79a8488 1314 ad77681_spi_read_adc_data(device, buf, AD77681_CONTINUOUS_DATA_READ); // Read the continuous read data
jngarlitos 1:f3b5e79a8488 1315 if (device->conv_len == AD77681_CONV_24BIT) // 24bit format
jngarlitos 1:f3b5e79a8488 1316 measured_data.raw_data[measured_data.count] = (buf[0] << 16 | buf[1] << 8 | buf[2]<< 0); // Combining the SPI buffers
jngarlitos 1:f3b5e79a8488 1317 else // 16bit format
jngarlitos 1:f3b5e79a8488 1318 measured_data.raw_data[measured_data.count] = (buf[0] << 8 | buf[1]<< 0); // Combining the SPI buffers
jngarlitos 1:f3b5e79a8488 1319 measured_data.count++; // Increment Measured Data Counter
jngarlitos 1:f3b5e79a8488 1320 int_event=false; // Set int event flag after reading the Data
jngarlitos 1:f3b5e79a8488 1321 }
jngarlitos 1:f3b5e79a8488 1322 }
jngarlitos 1:f3b5e79a8488 1323 ad77681_set_continuos_read(device, AD77681_CONTINUOUS_READ_DISABLE); // Disable continuous ADC read
jngarlitos 1:f3b5e79a8488 1324 pc.printf("Done Sampling....\n");
jngarlitos 1:f3b5e79a8488 1325 }
jngarlitos 1:f3b5e79a8488 1326
jngarlitos 1:f3b5e79a8488 1327 else {
jngarlitos 1:f3b5e79a8488 1328 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1329 }
jngarlitos 1:f3b5e79a8488 1330 print_prompt();
jngarlitos 1:f3b5e79a8488 1331 }
jngarlitos 1:f3b5e79a8488 1332
jngarlitos 1:f3b5e79a8488 1333 /**
jngarlitos 1:f3b5e79a8488 1334 * Print measured data and transfered to voltage
jngarlitos 1:f3b5e79a8488 1335 *
jngarlitos 1:f3b5e79a8488 1336 */
jngarlitos 1:f3b5e79a8488 1337 void static menu_16_print_ad77681_continuos_read_data(void)
jngarlitos 1:f3b5e79a8488 1338 {
jngarlitos 1:f3b5e79a8488 1339 double voltage;
jngarlitos 1:f3b5e79a8488 1340 int32_t shifted_data;
jngarlitos 1:f3b5e79a8488 1341 uint16_t i;
jngarlitos 1:f3b5e79a8488 1342 char buf[15];
jngarlitos 1:f3b5e79a8488 1343
jngarlitos 1:f3b5e79a8488 1344 if (measured_data.finish) {
jngarlitos 1:f3b5e79a8488 1345 // Printing Voltage
jngarlitos 1:f3b5e79a8488 1346 pc.printf("\n\nVoltage\n");
jngarlitos 1:f3b5e79a8488 1347 for ( i = 0; i < measured_data.samples; i++) {
jngarlitos 1:f3b5e79a8488 1348 ad77681_data_to_voltage(device, &measured_data.raw_data[i], &voltage);
jngarlitos 1:f3b5e79a8488 1349 sprintf(buf, "%.9f \n",voltage);
jngarlitos 1:f3b5e79a8488 1350 pc.printf(buf);
jngarlitos 1:f3b5e79a8488 1351 memset(buf, 0, sizeof(buf));//clears buffer
jngarlitos 1:f3b5e79a8488 1352 }
jngarlitos 1:f3b5e79a8488 1353 // Printing Codes
jngarlitos 1:f3b5e79a8488 1354 pc.printf("\n\nCodes\n");
jngarlitos 1:f3b5e79a8488 1355 for(i = 0 ; i < measured_data.samples ; i++) {
jngarlitos 1:f3b5e79a8488 1356 if (measured_data.raw_data[i] & 0x800000)
jngarlitos 1:f3b5e79a8488 1357 shifted_data = (int32_t)((0xFF << 24) | measured_data.raw_data[i]);
jngarlitos 1:f3b5e79a8488 1358 else
jngarlitos 1:f3b5e79a8488 1359 shifted_data = (int32_t)((0x00 << 24) | measured_data.raw_data[i]);
jngarlitos 1:f3b5e79a8488 1360
jngarlitos 1:f3b5e79a8488 1361 pc.printf("%d\n", shifted_data + AD7768_HALF_SCALE);
jngarlitos 1:f3b5e79a8488 1362 }
jngarlitos 1:f3b5e79a8488 1363 // Printing Raw Date
jngarlitos 1:f3b5e79a8488 1364 pc.printf("\n\nRaw data\n");
jngarlitos 1:f3b5e79a8488 1365 for (i = 0; i < measured_data.samples; i++)
jngarlitos 1:f3b5e79a8488 1366 pc.printf("%d\n", measured_data.raw_data[i]);
jngarlitos 1:f3b5e79a8488 1367 // Set measured_data.finish to false after Printing
jngarlitos 1:f3b5e79a8488 1368 measured_data.finish = false;
jngarlitos 1:f3b5e79a8488 1369 } else
jngarlitos 1:f3b5e79a8488 1370 pc.printf("Data not prepared\n");
jngarlitos 1:f3b5e79a8488 1371 print_prompt();
jngarlitos 1:f3b5e79a8488 1372 }
jngarlitos 1:f3b5e79a8488 1373
jngarlitos 1:f3b5e79a8488 1374 /**
jngarlitos 1:f3b5e79a8488 1375 * Chceck read and write functionaity by writing to and reading from scratchpad register
jngarlitos 1:f3b5e79a8488 1376 *
jngarlitos 1:f3b5e79a8488 1377 */
jngarlitos 1:f3b5e79a8488 1378 void static menu_17_ad77681_check_scratchpad(void)
jngarlitos 1:f3b5e79a8488 1379 {
jngarlitos 1:f3b5e79a8488 1380 uint32_t new_menu_select;
jngarlitos 1:f3b5e79a8488 1381 uint8_t chceck_sequence;
jngarlitos 1:f3b5e79a8488 1382 int32_t ret;
jngarlitos 1:f3b5e79a8488 1383
jngarlitos 1:f3b5e79a8488 1384 pc.printf(" Scratchpad check\n");
jngarlitos 1:f3b5e79a8488 1385 pc.printf(" Insert 8bit number for scratchpad check: \n");
jngarlitos 1:f3b5e79a8488 1386
jngarlitos 1:f3b5e79a8488 1387 ret = getUserInput(&new_menu_select); // Get user input
jngarlitos 1:f3b5e79a8488 1388
jngarlitos 1:f3b5e79a8488 1389 if ((new_menu_select <= 0xFF) && (new_menu_select >= 0) && (ret == SUCCESS)) {
jngarlitos 1:f3b5e79a8488 1390 chceck_sequence = (uint8_t)(new_menu_select);
jngarlitos 1:f3b5e79a8488 1391 ret = ad77681_scratchpad(device, &chceck_sequence); // Write and read Scratch Pad
jngarlitos 1:f3b5e79a8488 1392 pc.printf(" Insered sequence: %d\n Returned sequence: %d\n", new_menu_select, chceck_sequence);
jngarlitos 1:f3b5e79a8488 1393 if (ret == SUCCESS)
jngarlitos 1:f3b5e79a8488 1394 pc.printf(" SUCCESS!\n");
jngarlitos 1:f3b5e79a8488 1395 else
jngarlitos 1:f3b5e79a8488 1396 pc.printf(" FAILURE!\n");
jngarlitos 1:f3b5e79a8488 1397 } else
jngarlitos 1:f3b5e79a8488 1398 pc.printf(" Invalid value\n");
jngarlitos 1:f3b5e79a8488 1399 print_prompt();
jngarlitos 1:f3b5e79a8488 1400 }
jngarlitos 1:f3b5e79a8488 1401
jngarlitos 1:f3b5e79a8488 1402 void static menu_18_reset_ad77681_ADC(void)
jngarlitos 1:f3b5e79a8488 1403 {
jngarlitos 1:f3b5e79a8488 1404 uint32_t new_reset_option = 0;
jngarlitos 1:f3b5e79a8488 1405
jngarlitos 1:f3b5e79a8488 1406 pc.printf(" ADC reset opportunities: \n");
jngarlitos 1:f3b5e79a8488 1407 pc.printf(" 1 - Soft reset - over SPI\n");
jngarlitos 1:f3b5e79a8488 1408 pc.printf(" 2 - Hard reset - uing RESET pin\n");
jngarlitos 1:f3b5e79a8488 1409 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 1410
jngarlitos 1:f3b5e79a8488 1411 getUserInput(&new_reset_option);
jngarlitos 1:f3b5e79a8488 1412 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1413
jngarlitos 1:f3b5e79a8488 1414 switch (new_reset_option) {
jngarlitos 1:f3b5e79a8488 1415 case 1:
jngarlitos 1:f3b5e79a8488 1416 ad77681_soft_reset(device); // Perform soft reset thru SPI write
jngarlitos 1:f3b5e79a8488 1417 pc.printf(" ADC after soft reset\n");
jngarlitos 1:f3b5e79a8488 1418 break;
jngarlitos 1:f3b5e79a8488 1419 case 2:
jngarlitos 1:f3b5e79a8488 1420 adc_hard_reset(); // Perform hard reset thru GPIO
jngarlitos 1:f3b5e79a8488 1421 pc.printf(" ADC after hard reset\n");
jngarlitos 1:f3b5e79a8488 1422 break;
jngarlitos 1:f3b5e79a8488 1423 default:
jngarlitos 1:f3b5e79a8488 1424 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1425 break;
jngarlitos 1:f3b5e79a8488 1426 }
jngarlitos 1:f3b5e79a8488 1427 print_prompt();
jngarlitos 1:f3b5e79a8488 1428 }
jngarlitos 1:f3b5e79a8488 1429
jngarlitos 1:f3b5e79a8488 1430 /**
jngarlitos 1:f3b5e79a8488 1431 * Rest and set the Board to default setting
jngarlitos 1:f3b5e79a8488 1432 *
jngarlitos 1:f3b5e79a8488 1433 */
jngarlitos 1:f3b5e79a8488 1434 void static menu_19_set_default_settings(void)
jngarlitos 1:f3b5e79a8488 1435 {
jngarlitos 1:f3b5e79a8488 1436
jngarlitos 1:f3b5e79a8488 1437 int32_t default_settings_flag;
jngarlitos 1:f3b5e79a8488 1438
jngarlitos 1:f3b5e79a8488 1439 adc_hard_reset(); // Perform hard reset thru GPIO
jngarlitos 1:f3b5e79a8488 1440 default_settings_flag = ad77681_setup(&device, init_params, &current_status); // SETUP and check connection
jngarlitos 1:f3b5e79a8488 1441 adc_gpio_init(); // Initilized SDP-K1 GPIOS
jngarlitos 1:f3b5e79a8488 1442
jngarlitos 1:f3b5e79a8488 1443 if (default_settings_flag == SUCCESS)
jngarlitos 1:f3b5e79a8488 1444 pc.printf("\n Default settings successfull loaded\n");
jngarlitos 1:f3b5e79a8488 1445 else
jngarlitos 1:f3b5e79a8488 1446 pc.printf("\n Error in settings, please reset the ADC\n");
jngarlitos 1:f3b5e79a8488 1447 print_prompt();
jngarlitos 1:f3b5e79a8488 1448 }
jngarlitos 1:f3b5e79a8488 1449
jngarlitos 1:f3b5e79a8488 1450 /**
jngarlitos 1:f3b5e79a8488 1451 * Set Vref anc MCLK as "exteranl" values, depending on you setup
jngarlitos 1:f3b5e79a8488 1452 *
jngarlitos 1:f3b5e79a8488 1453 */
jngarlitos 1:f3b5e79a8488 1454 void static menu_20_mclk_vref(void)
jngarlitos 1:f3b5e79a8488 1455 {
jngarlitos 1:f3b5e79a8488 1456 uint32_t input = 0, new_settings = 0;
jngarlitos 1:f3b5e79a8488 1457 int32_t ret;
jngarlitos 1:f3b5e79a8488 1458
jngarlitos 1:f3b5e79a8488 1459 pc.printf(" Set Vref and Mclk: \n");
jngarlitos 1:f3b5e79a8488 1460 pc.printf(" 1 - Change Vref\n");
jngarlitos 1:f3b5e79a8488 1461 pc.printf(" 2 - Change MCLK\n");
jngarlitos 1:f3b5e79a8488 1462 pc.printf(" Select an option: \n");
jngarlitos 1:f3b5e79a8488 1463
jngarlitos 1:f3b5e79a8488 1464 getUserInput(&new_settings);
jngarlitos 1:f3b5e79a8488 1465 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1466
jngarlitos 1:f3b5e79a8488 1467 switch (new_settings) {
jngarlitos 1:f3b5e79a8488 1468 case 1:
jngarlitos 1:f3b5e79a8488 1469 pc.printf(" Change Vref from %d mV to [mV]: ", device->vref); // Vref change
jngarlitos 1:f3b5e79a8488 1470 ret = getUserInput(&input);
jngarlitos 1:f3b5e79a8488 1471
jngarlitos 1:f3b5e79a8488 1472 if ((input >= 1000) && (input <= 5000) && (ret == SUCCESS)) {
jngarlitos 1:f3b5e79a8488 1473 pc.printf("\n New Vref value is %d mV", input);
jngarlitos 1:f3b5e79a8488 1474 device->vref = input;
jngarlitos 1:f3b5e79a8488 1475 } else
jngarlitos 1:f3b5e79a8488 1476 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1477
jngarlitos 1:f3b5e79a8488 1478 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1479 break;
jngarlitos 1:f3b5e79a8488 1480
jngarlitos 1:f3b5e79a8488 1481 case 2:
jngarlitos 1:f3b5e79a8488 1482 pc.printf(" Change MCLK from %d kHz to [kHz]: ", device->mclk); // MCLK change
jngarlitos 1:f3b5e79a8488 1483 ret = getUserInput(&input);
jngarlitos 1:f3b5e79a8488 1484 if ((input >= 10000) && (input <= 50000) && (ret == SUCCESS)) {
jngarlitos 1:f3b5e79a8488 1485 pc.printf("\n New MCLK value is %d kHz\n", input);
jngarlitos 1:f3b5e79a8488 1486 device->vref = input;
jngarlitos 1:f3b5e79a8488 1487 ad77681_update_sample_rate(device); // Update the sample rate after changinig the MCLK
jngarlitos 1:f3b5e79a8488 1488 } else
jngarlitos 1:f3b5e79a8488 1489 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1490
jngarlitos 1:f3b5e79a8488 1491 pc.putc('\n');
jngarlitos 1:f3b5e79a8488 1492 break;
jngarlitos 1:f3b5e79a8488 1493 default:
jngarlitos 1:f3b5e79a8488 1494 pc.printf(" Invalid option\n");
jngarlitos 1:f3b5e79a8488 1495 break;
jngarlitos 1:f3b5e79a8488 1496 }
jngarlitos 1:f3b5e79a8488 1497 print_prompt();
jngarlitos 1:f3b5e79a8488 1498 }
jngarlitos 1:f3b5e79a8488 1499
jngarlitos 1:f3b5e79a8488 1500 /**
jngarlitos 1:f3b5e79a8488 1501 * Prints out an array in binary form
jngarlitos 1:f3b5e79a8488 1502 *
jngarlitos 1:f3b5e79a8488 1503 */
jngarlitos 1:f3b5e79a8488 1504 void static print_binary(uint8_t number, char *binary_number)
jngarlitos 1:f3b5e79a8488 1505 {
jngarlitos 1:f3b5e79a8488 1506 for (int8_t i = 7; i >= 0; i--) {
jngarlitos 1:f3b5e79a8488 1507 if (number & 1)
jngarlitos 1:f3b5e79a8488 1508 binary_number[i] = '1';
jngarlitos 1:f3b5e79a8488 1509 else
jngarlitos 1:f3b5e79a8488 1510 binary_number[i] = '0';
jngarlitos 1:f3b5e79a8488 1511 number >>= 1;
jngarlitos 1:f3b5e79a8488 1512 }
jngarlitos 1:f3b5e79a8488 1513 }
jngarlitos 1:f3b5e79a8488 1514
jngarlitos 1:f3b5e79a8488 1515 /**
jngarlitos 1:f3b5e79a8488 1516 * Read user input from uart
jngarlitos 1:f3b5e79a8488 1517 * *UserInput = 0 if failure
jngarlitos 1:f3b5e79a8488 1518 *
jngarlitos 1:f3b5e79a8488 1519 */
jngarlitos 1:f3b5e79a8488 1520 int32_t static getUserInput(uint32_t *UserInput)
jngarlitos 1:f3b5e79a8488 1521 {
jngarlitos 1:f3b5e79a8488 1522 long uart_val;
jngarlitos 1:f3b5e79a8488 1523 int32_t ret;
jngarlitos 1:f3b5e79a8488 1524
jngarlitos 1:f3b5e79a8488 1525 ret = pc.scanf("%ld", &uart_val); // Return 1 = OK, Return 0 = Fail
jngarlitos 1:f3b5e79a8488 1526
jngarlitos 1:f3b5e79a8488 1527 if((ret == 0) || (uart_val < 0)) { // Failure if uart_val is negative, or non-digit
jngarlitos 1:f3b5e79a8488 1528 *UserInput = 0;
jngarlitos 1:f3b5e79a8488 1529 return FAILURE;
jngarlitos 1:f3b5e79a8488 1530 }
jngarlitos 1:f3b5e79a8488 1531 *UserInput = (uint32_t)(uart_val);
jngarlitos 1:f3b5e79a8488 1532 return SUCCESS;
jngarlitos 1:f3b5e79a8488 1533 }
jngarlitos 1:f3b5e79a8488 1534
jngarlitos 1:f3b5e79a8488 1535 /**
jngarlitos 1:f3b5e79a8488 1536 * ADC hard reset thru SDP-K1 GPIO
jngarlitos 1:f3b5e79a8488 1537 *
jngarlitos 1:f3b5e79a8488 1538 */
jngarlitos 1:f3b5e79a8488 1539 void static adc_hard_reset()
jngarlitos 1:f3b5e79a8488 1540 {
jngarlitos 1:f3b5e79a8488 1541 adc_rst=0; // Set ADC reset pin to Low
jngarlitos 1:f3b5e79a8488 1542 mdelay(100); // Delay 100ms
jngarlitos 1:f3b5e79a8488 1543 adc_rst=1; // Set ADC reset pin to High
jngarlitos 1:f3b5e79a8488 1544 mdelay(100); // Delay 100ms
jngarlitos 1:f3b5e79a8488 1545 }
jngarlitos 1:f3b5e79a8488 1546
jngarlitos 1:f3b5e79a8488 1547 /**
jngarlitos 1:f3b5e79a8488 1548 * ADC hard reset thru SDP-K1 GPIO
jngarlitos 1:f3b5e79a8488 1549 *
jngarlitos 1:f3b5e79a8488 1550 */
jngarlitos 1:f3b5e79a8488 1551 void static adc_gpio_init()
jngarlitos 1:f3b5e79a8488 1552 {
jngarlitos 1:f3b5e79a8488 1553 ad77681_global_gpio(device, AD77681_GLOBAL_GPIO_ENABLE); // Enable AD7768-1 GPIO pins
jngarlitos 1:f3b5e79a8488 1554 ad77681_gpio_inout(device, AD77681_GPIO_CNTRL_ALL_GPIOS_OP_EN(0x0F), AD77681_ALL_GPIOS); // Set AD7768-1 GPIO1 - GPIO3 as Output
jngarlitos 1:f3b5e79a8488 1555 ad77681_gpio_write(device,AD77681_GPIO_CNTRL_ALL_GPIOS_OP_EN(0x05), AD77681_ALL_GPIOS); // Set FDA to Low Power mode and PGIA Gain to 1
jngarlitos 1:f3b5e79a8488 1556 }