Example program for EVAL-TempSense-ARDZ boards.

Dependencies:   platform_drivers

Committer:
Kjansen
Date:
Fri Sep 24 15:22:13 2021 +0100
Revision:
7:3e5f6cca357e
1.) Updated the project repository structure
2.) Made modifications in the code to align with the latest no-OS drivers and the platform drivers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kjansen 7:3e5f6cca357e 1 /*****************************************************************************
Kjansen 7:3e5f6cca357e 2 * @file main.cpp
Kjansen 7:3e5f6cca357e 3 * @brief EVAL-TempSense-ARDZ example program
Kjansen 7:3e5f6cca357e 4 * @author ssmith (sean.smith@analog.com)
Kjansen 7:3e5f6cca357e 5 ******************************************************************************
Kjansen 7:3e5f6cca357e 6 * Copyright (c) 2019, 2021 Analog Devices, Inc.
Kjansen 7:3e5f6cca357e 7 *
Kjansen 7:3e5f6cca357e 8 * All rights reserved.
Kjansen 7:3e5f6cca357e 9 *
Kjansen 7:3e5f6cca357e 10 * Redistribution and use in source and binary forms, with or without
Kjansen 7:3e5f6cca357e 11 * modification, are permitted provided that the following conditions are met:
Kjansen 7:3e5f6cca357e 12 * - Redistributions of source code must retain the above copyright notice,
Kjansen 7:3e5f6cca357e 13 * this list of conditions and the following disclaimer.
Kjansen 7:3e5f6cca357e 14 * - Redistributions in binary form must reproduce the above copyright notice,
Kjansen 7:3e5f6cca357e 15 * this list of conditions and the following disclaimer in the documentation
Kjansen 7:3e5f6cca357e 16 * and/or other materials provided with the distribution.
Kjansen 7:3e5f6cca357e 17 * - Modified versions of the software must be conspicuously marked as such.
Kjansen 7:3e5f6cca357e 18 * - This software is licensed solely and exclusively for use with
Kjansen 7:3e5f6cca357e 19 * processors/products manufactured by or for Analog Devices, Inc.
Kjansen 7:3e5f6cca357e 20 * - This software may not be combined or merged with other code in any manner
Kjansen 7:3e5f6cca357e 21 * that would cause the software to become subject to terms and
Kjansen 7:3e5f6cca357e 22 * conditions which differ from those listed here.
Kjansen 7:3e5f6cca357e 23 * - Neither the name of Analog Devices, Inc. nor the names of its
Kjansen 7:3e5f6cca357e 24 * contributors may be used to endorse or promote products derived
Kjansen 7:3e5f6cca357e 25 * from this software without specific prior written permission.
Kjansen 7:3e5f6cca357e 26 * - The use of this software may or may not infringe the patent rights
Kjansen 7:3e5f6cca357e 27 * of one or more patent holders. This license does not release you from
Kjansen 7:3e5f6cca357e 28 * the requirement that you obtain separate licenses from these patent
Kjansen 7:3e5f6cca357e 29 * holders to use this software.
Kjansen 7:3e5f6cca357e 30 *
Kjansen 7:3e5f6cca357e 31 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS"
Kjansen 7:3e5f6cca357e 32 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
Kjansen 7:3e5f6cca357e 33 * NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A
Kjansen 7:3e5f6cca357e 34 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES,
Kjansen 7:3e5f6cca357e 35 * INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Kjansen 7:3e5f6cca357e 36 * SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
Kjansen 7:3e5f6cca357e 37 * (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF
Kjansen 7:3e5f6cca357e 38 * INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; PROCUREMENT OF SUBSTITUTE
Kjansen 7:3e5f6cca357e 39 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Kjansen 7:3e5f6cca357e 40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Kjansen 7:3e5f6cca357e 41 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Kjansen 7:3e5f6cca357e 42 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Kjansen 7:3e5f6cca357e 43 * POSSIBILITY OF SUCH DAMAGE.
Kjansen 7:3e5f6cca357e 44 *
Kjansen 7:3e5f6cca357e 45 * 20180927-7CBSD SLA
Kjansen 7:3e5f6cca357e 46 *****************************************************************************/
Kjansen 7:3e5f6cca357e 47 #include <cstdio>
Kjansen 7:3e5f6cca357e 48 #include <mbed.h>
Kjansen 7:3e5f6cca357e 49 #include <cmath>
Kjansen 7:3e5f6cca357e 50
Kjansen 7:3e5f6cca357e 51 #include "app_config.h"
Kjansen 7:3e5f6cca357e 52 #include "spi.h"
Kjansen 7:3e5f6cca357e 53 #include "i2c.h"
Kjansen 7:3e5f6cca357e 54 #include "error.h"
Kjansen 7:3e5f6cca357e 55 #include "i2c_extra.h"
Kjansen 7:3e5f6cca357e 56 #include "spi_extra.h"
Kjansen 7:3e5f6cca357e 57
Kjansen 7:3e5f6cca357e 58 #ifdef __cplusplus
Kjansen 7:3e5f6cca357e 59 extern "C"
Kjansen 7:3e5f6cca357e 60 {
Kjansen 7:3e5f6cca357e 61 #endif
Kjansen 7:3e5f6cca357e 62 #include "delay.h"
Kjansen 7:3e5f6cca357e 63 #include "platform_support.h"
Kjansen 7:3e5f6cca357e 64 #include "adt7420.h"
Kjansen 7:3e5f6cca357e 65 #include "adt7xxx_support.h"
Kjansen 7:3e5f6cca357e 66 #ifdef __cplusplus
Kjansen 7:3e5f6cca357e 67 }
Kjansen 7:3e5f6cca357e 68 #endif // __cplusplus
Kjansen 7:3e5f6cca357e 69
Kjansen 7:3e5f6cca357e 70 #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
Kjansen 7:3e5f6cca357e 71
Kjansen 7:3e5f6cca357e 72 #define TEMP_MIN -40
Kjansen 7:3e5f6cca357e 73 #define TEMP_MAX 150
Kjansen 7:3e5f6cca357e 74 #define MAX_HYST_TEMP 15
Kjansen 7:3e5f6cca357e 75 #define MIN_HYST_TEMP 0
Kjansen 7:3e5f6cca357e 76
Kjansen 7:3e5f6cca357e 77 #define RESET_DELAY 500
Kjansen 7:3e5f6cca357e 78 #define WAIT_MENU_TIME 1000
Kjansen 7:3e5f6cca357e 79 #define NOT_USED 0
Kjansen 7:3e5f6cca357e 80
Kjansen 7:3e5f6cca357e 81 static void print_title(void);
Kjansen 7:3e5f6cca357e 82 static void print_prompt(void);
Kjansen 7:3e5f6cca357e 83 static uint8_t select_device();
Kjansen 7:3e5f6cca357e 84 static void print_active_device(int ext_int_value);
Kjansen 7:3e5f6cca357e 85 static int get_menu_select(uint8_t *menu_select);
Kjansen 7:3e5f6cca357e 86 static uint8_t read_temperature();
Kjansen 7:3e5f6cca357e 87 static uint8_t set_resolution();
Kjansen 7:3e5f6cca357e 88 static uint8_t set_op_mode();
Kjansen 7:3e5f6cca357e 89 static uint8_t bunch_of_temps();
Kjansen 7:3e5f6cca357e 90 static uint8_t readback_reg();
Kjansen 7:3e5f6cca357e 91 static uint8_t reset_interface();
Kjansen 7:3e5f6cca357e 92 static uint8_t write_to_setpoint_reg();
Kjansen 7:3e5f6cca357e 93 static uint8_t set_fault_queue();
Kjansen 7:3e5f6cca357e 94 static uint8_t set_ct_int_config();
Kjansen 7:3e5f6cca357e 95 static void microcontroller_reset();
Kjansen 7:3e5f6cca357e 96 static int input_check(int input_val,
Kjansen 7:3e5f6cca357e 97 int lowest_accepted_val,
Kjansen 7:3e5f6cca357e 98 int highest_accepted_val,
Kjansen 7:3e5f6cca357e 99 int invalid_check);
Kjansen 7:3e5f6cca357e 100
Kjansen 7:3e5f6cca357e 101
Kjansen 7:3e5f6cca357e 102 /******************************************************************************/
Kjansen 7:3e5f6cca357e 103 /************************** Variables Declarations ****************************/
Kjansen 7:3e5f6cca357e 104 /******************************************************************************/
Kjansen 7:3e5f6cca357e 105
Kjansen 7:3e5f6cca357e 106 // Initialize the extra parameters for I2C initialization
Kjansen 7:3e5f6cca357e 107 mbed_i2c_init_param i2c_init_extra_params = {
Kjansen 7:3e5f6cca357e 108 .i2c_sda_pin = I2C_SDA,
Kjansen 7:3e5f6cca357e 109 .i2c_scl_pin = I2C_SCL
Kjansen 7:3e5f6cca357e 110 };
Kjansen 7:3e5f6cca357e 111
Kjansen 7:3e5f6cca357e 112 i2c_init_param i2c_params = {
Kjansen 7:3e5f6cca357e 113 .max_speed_hz = 100000, // i2c max speed (hz)
Kjansen 7:3e5f6cca357e 114 .slave_address = INT_I2C_ADDRESS, // i2c slave address
Kjansen 7:3e5f6cca357e 115 .extra = &i2c_init_extra_params // I2C extra init parameters
Kjansen 7:3e5f6cca357e 116 };
Kjansen 7:3e5f6cca357e 117
Kjansen 7:3e5f6cca357e 118 // Initialize the extra parameters for SPI initialization
Kjansen 7:3e5f6cca357e 119 mbed_spi_init_param spi_init_extra_params = {
Kjansen 7:3e5f6cca357e 120 .spi_miso_pin = SPI_MISO,
Kjansen 7:3e5f6cca357e 121 .spi_mosi_pin = SPI_MOSI,
Kjansen 7:3e5f6cca357e 122 .spi_clk_pin = SPI_SCK
Kjansen 7:3e5f6cca357e 123 };
Kjansen 7:3e5f6cca357e 124
Kjansen 7:3e5f6cca357e 125 spi_init_param spi_params = {
Kjansen 7:3e5f6cca357e 126 .max_speed_hz = 1000000, //SPI frequency (Hz)
Kjansen 7:3e5f6cca357e 127 .chip_select = SPI_CS, //Chip Select
Kjansen 7:3e5f6cca357e 128 .mode = SPI_MODE_3, //CPOL/CPHA settings for your device
Kjansen 7:3e5f6cca357e 129 .extra = &spi_init_extra_params // SPI extra init parameters
Kjansen 7:3e5f6cca357e 130 };
Kjansen 7:3e5f6cca357e 131
Kjansen 7:3e5f6cca357e 132 adt7420_init_param init_params = {
Kjansen 7:3e5f6cca357e 133 .resolution_setting = NOT_USED, //Resolution setting
Kjansen 7:3e5f6cca357e 134 .active_device = ACTIVE_DEVICE //Set this in app_config.h
Kjansen 7:3e5f6cca357e 135 };
Kjansen 7:3e5f6cca357e 136
Kjansen 7:3e5f6cca357e 137 adt7420_dev *device;
Kjansen 7:3e5f6cca357e 138
Kjansen 7:3e5f6cca357e 139 registers_e registers;
Kjansen 7:3e5f6cca357e 140
Kjansen 7:3e5f6cca357e 141 int32_t connected = -1;
Kjansen 7:3e5f6cca357e 142 uint8_t device_id = 0;
Kjansen 7:3e5f6cca357e 143
Kjansen 7:3e5f6cca357e 144
Kjansen 7:3e5f6cca357e 145 int main()
Kjansen 7:3e5f6cca357e 146 {
Kjansen 7:3e5f6cca357e 147 uint8_t menu_select = 0;
Kjansen 7:3e5f6cca357e 148
Kjansen 7:3e5f6cca357e 149 print_title();
Kjansen 7:3e5f6cca357e 150
Kjansen 7:3e5f6cca357e 151 device_id = select_device();
Kjansen 7:3e5f6cca357e 152
Kjansen 7:3e5f6cca357e 153 connected = adt7420_init(&device, init_params);
Kjansen 7:3e5f6cca357e 154
Kjansen 7:3e5f6cca357e 155 if (connected != SUCCESS) {
Kjansen 7:3e5f6cca357e 156 printf(EOL EOL " Connection to device failed :(" EOL);
Kjansen 7:3e5f6cca357e 157 printf(" ...Restarting application... " EOL);
Kjansen 7:3e5f6cca357e 158 mdelay(WAIT_MENU_TIME);
Kjansen 7:3e5f6cca357e 159 microcontroller_reset();
Kjansen 7:3e5f6cca357e 160 } else {
Kjansen 7:3e5f6cca357e 161 printf(EOL EOL " Connection to device succeeded!" EOL);
Kjansen 7:3e5f6cca357e 162 }
Kjansen 7:3e5f6cca357e 163
Kjansen 7:3e5f6cca357e 164 while (connected == SUCCESS) {
Kjansen 7:3e5f6cca357e 165 menu_select = 0;
Kjansen 7:3e5f6cca357e 166 print_active_device(device_id);
Kjansen 7:3e5f6cca357e 167 print_prompt();
Kjansen 7:3e5f6cca357e 168
Kjansen 7:3e5f6cca357e 169 if (get_menu_select(&menu_select) == FAILURE)
Kjansen 7:3e5f6cca357e 170 printf(EOL "***** Returning to main menu *****" EOL);
Kjansen 7:3e5f6cca357e 171 else {
Kjansen 7:3e5f6cca357e 172 switch (menu_select) {
Kjansen 7:3e5f6cca357e 173 case 1:
Kjansen 7:3e5f6cca357e 174 read_temperature();
Kjansen 7:3e5f6cca357e 175 break;
Kjansen 7:3e5f6cca357e 176 case 2:
Kjansen 7:3e5f6cca357e 177 set_resolution();
Kjansen 7:3e5f6cca357e 178 break;
Kjansen 7:3e5f6cca357e 179 case 3:
Kjansen 7:3e5f6cca357e 180 set_op_mode();
Kjansen 7:3e5f6cca357e 181 break;
Kjansen 7:3e5f6cca357e 182 case 4:
Kjansen 7:3e5f6cca357e 183 bunch_of_temps();
Kjansen 7:3e5f6cca357e 184 break;
Kjansen 7:3e5f6cca357e 185 case 5:
Kjansen 7:3e5f6cca357e 186 readback_reg();
Kjansen 7:3e5f6cca357e 187 break;
Kjansen 7:3e5f6cca357e 188 case 6:
Kjansen 7:3e5f6cca357e 189 reset_interface();
Kjansen 7:3e5f6cca357e 190 break;
Kjansen 7:3e5f6cca357e 191 case 7:
Kjansen 7:3e5f6cca357e 192 write_to_setpoint_reg();
Kjansen 7:3e5f6cca357e 193 break;
Kjansen 7:3e5f6cca357e 194 case 8:
Kjansen 7:3e5f6cca357e 195 set_fault_queue();
Kjansen 7:3e5f6cca357e 196 break;
Kjansen 7:3e5f6cca357e 197 case 9:
Kjansen 7:3e5f6cca357e 198 set_ct_int_config();
Kjansen 7:3e5f6cca357e 199 break;
Kjansen 7:3e5f6cca357e 200 case 10:
Kjansen 7:3e5f6cca357e 201 /*Restore device registers to default values before restarting microcontroller*/
Kjansen 7:3e5f6cca357e 202 reset_interface();
Kjansen 7:3e5f6cca357e 203 microcontroller_reset();
Kjansen 7:3e5f6cca357e 204 break;
Kjansen 7:3e5f6cca357e 205 default:
Kjansen 7:3e5f6cca357e 206 printf("Invalid option" EOL);
Kjansen 7:3e5f6cca357e 207 break;
Kjansen 7:3e5f6cca357e 208 }
Kjansen 7:3e5f6cca357e 209 }
Kjansen 7:3e5f6cca357e 210 mdelay(WAIT_MENU_TIME); //wait 1 second
Kjansen 7:3e5f6cca357e 211 }
Kjansen 7:3e5f6cca357e 212 }
Kjansen 7:3e5f6cca357e 213
Kjansen 7:3e5f6cca357e 214
Kjansen 7:3e5f6cca357e 215 /*******************************************************************************
Kjansen 7:3e5f6cca357e 216 * @brief Prints the title block.
Kjansen 7:3e5f6cca357e 217 *******************************************************************************/
Kjansen 7:3e5f6cca357e 218 void print_title()
Kjansen 7:3e5f6cca357e 219 {
Kjansen 7:3e5f6cca357e 220 printf("*****************************************************************" EOL);
Kjansen 7:3e5f6cca357e 221 printf("* EVAL-TempeSense-ARDZ Demonstration Program *" EOL);
Kjansen 7:3e5f6cca357e 222 printf("* *" EOL);
Kjansen 7:3e5f6cca357e 223 printf("* This program demonstrates communication with the ADT7xx *" EOL);
Kjansen 7:3e5f6cca357e 224 printf("* High-Accuracy digital temperature sensor family *" EOL);
Kjansen 7:3e5f6cca357e 225 printf("* It works with both SPI & I2C versions *" EOL);
Kjansen 7:3e5f6cca357e 226 printf("* *" EOL);
Kjansen 7:3e5f6cca357e 227 printf("*****************************************************************" EOL);
Kjansen 7:3e5f6cca357e 228 }
Kjansen 7:3e5f6cca357e 229
Kjansen 7:3e5f6cca357e 230 /*******************************************************************************
Kjansen 7:3e5f6cca357e 231 * @brief Prints the "main menu" prompt to the console.
Kjansen 7:3e5f6cca357e 232 *******************************************************************************/
Kjansen 7:3e5f6cca357e 233 void print_prompt()
Kjansen 7:3e5f6cca357e 234 {
Kjansen 7:3e5f6cca357e 235 printf(EOL EOL "Command Summary:" EOL);
Kjansen 7:3e5f6cca357e 236 printf(" 1 -Read temperature" EOL);
Kjansen 7:3e5f6cca357e 237 printf(" 2 -Set resolution" EOL);
Kjansen 7:3e5f6cca357e 238 printf(" 3 -Set operation mode" EOL);
Kjansen 7:3e5f6cca357e 239 printf(" 4 -Poll temperature" EOL);
Kjansen 7:3e5f6cca357e 240 printf(" 5 -Read a register" EOL);
Kjansen 7:3e5f6cca357e 241 printf(" 6 -Reset the interface" EOL);
Kjansen 7:3e5f6cca357e 242 printf(" 7 -Write to a setpoint register" EOL);
Kjansen 7:3e5f6cca357e 243 printf(" 8 -Set Fault Queue configuration" EOL);
Kjansen 7:3e5f6cca357e 244 printf(" 9 -Set CT/INT polarity and mode" EOL);
Kjansen 7:3e5f6cca357e 245 printf(" 10 -Full System Reset" EOL);
Kjansen 7:3e5f6cca357e 246 printf(EOL);
Kjansen 7:3e5f6cca357e 247 }
Kjansen 7:3e5f6cca357e 248
Kjansen 7:3e5f6cca357e 249 static int get_menu_select(uint8_t *menu_select)
Kjansen 7:3e5f6cca357e 250 {
Kjansen 7:3e5f6cca357e 251 int invalid_check = scanf("%d",(int *) menu_select);
Kjansen 7:3e5f6cca357e 252 return input_check(*menu_select, 1, 10, invalid_check);
Kjansen 7:3e5f6cca357e 253 }
Kjansen 7:3e5f6cca357e 254
Kjansen 7:3e5f6cca357e 255 /*******************************************************************************
Kjansen 7:3e5f6cca357e 256 * @brief - Select the serial interface (SPI/I2C) and device
Kjansen 7:3e5f6cca357e 257 * based on the part family.
Kjansen 7:3e5f6cca357e 258 * - Only one device and interface can be active.
Kjansen 7:3e5f6cca357e 259 * Example: ADT7320 - SPI (Internal or Remote device)
Kjansen 7:3e5f6cca357e 260 * ADT7420 - I2C (Internal or Remote device)
Kjansen 7:3e5f6cca357e 261 *
Kjansen 7:3e5f6cca357e 262 * @param None
Kjansen 7:3e5f6cca357e 263 *
Kjansen 7:3e5f6cca357e 264 * @return new_dev - Return device selected
Kjansen 7:3e5f6cca357e 265 * Example: 1 - Internal(Main PCB)
Kjansen 7:3e5f6cca357e 266 * 2 - Remote (External PCB)
Kjansen 7:3e5f6cca357e 267 *******************************************************************************/
Kjansen 7:3e5f6cca357e 268 uint8_t select_device()
Kjansen 7:3e5f6cca357e 269 {
Kjansen 7:3e5f6cca357e 270 printf("Please select interface by choosing a device:" EOL);
Kjansen 7:3e5f6cca357e 271 printf(" 1- ADT7320 (SPI)" EOL);
Kjansen 7:3e5f6cca357e 272 printf(" 2- ADT7420 (I2C)" EOL);
Kjansen 7:3e5f6cca357e 273 printf(" Select an option: ");
Kjansen 7:3e5f6cca357e 274
Kjansen 7:3e5f6cca357e 275 int invalid_check, new_interface = 0;
Kjansen 7:3e5f6cca357e 276 invalid_check = scanf("%d", &new_interface);
Kjansen 7:3e5f6cca357e 277
Kjansen 7:3e5f6cca357e 278 //Prompts for user input while correct interface is not selected
Kjansen 7:3e5f6cca357e 279 while (input_check(new_interface, 1, 2, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 280 printf("Please select interface by choosing a device:" EOL);
Kjansen 7:3e5f6cca357e 281 printf(" 1- ADT7320 (SPI)" EOL);
Kjansen 7:3e5f6cca357e 282 printf(" 2- ADT7420 (I2C)" EOL);
Kjansen 7:3e5f6cca357e 283 printf(" Select an option: ");
Kjansen 7:3e5f6cca357e 284 invalid_check = scanf("%d", &new_interface);
Kjansen 7:3e5f6cca357e 285 }
Kjansen 7:3e5f6cca357e 286 printf("%d", new_interface);
Kjansen 7:3e5f6cca357e 287
Kjansen 7:3e5f6cca357e 288 switch (new_interface) {
Kjansen 7:3e5f6cca357e 289 case 1:
Kjansen 7:3e5f6cca357e 290 printf(" ADT7320 sensor selected!" EOL EOL);
Kjansen 7:3e5f6cca357e 291 init_params.active_device = ID_ADT7320;
Kjansen 7:3e5f6cca357e 292 init_params.interface_init.spi_init = spi_params;
Kjansen 7:3e5f6cca357e 293 break;
Kjansen 7:3e5f6cca357e 294 case 2:
Kjansen 7:3e5f6cca357e 295 printf(" ADT7420 sensor selected!" EOL EOL);
Kjansen 7:3e5f6cca357e 296 init_params.active_device = ID_ADT7420;
Kjansen 7:3e5f6cca357e 297 init_params.interface_init.i2c_init = i2c_params;
Kjansen 7:3e5f6cca357e 298 break;
Kjansen 7:3e5f6cca357e 299 }
Kjansen 7:3e5f6cca357e 300
Kjansen 7:3e5f6cca357e 301 printf("Available devices:" EOL);
Kjansen 7:3e5f6cca357e 302 printf(" 1- Internal (Main PCB)" EOL);
Kjansen 7:3e5f6cca357e 303 printf(" 2- Remote (External PCB)" EOL);
Kjansen 7:3e5f6cca357e 304 printf(" Select an option: ");
Kjansen 7:3e5f6cca357e 305
Kjansen 7:3e5f6cca357e 306 int new_dev = 0;
Kjansen 7:3e5f6cca357e 307 invalid_check = scanf("%d", &new_dev);
Kjansen 7:3e5f6cca357e 308
Kjansen 7:3e5f6cca357e 309 //Prompts for user input while correct device is not selected
Kjansen 7:3e5f6cca357e 310 while (input_check(new_dev, 1, 2, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 311 printf("Device select:" EOL);
Kjansen 7:3e5f6cca357e 312 printf(" 1- Internal (Main PCB)" EOL);
Kjansen 7:3e5f6cca357e 313 printf(" 2- Remote (External PCB)" EOL);
Kjansen 7:3e5f6cca357e 314 printf(" Select an option: ");
Kjansen 7:3e5f6cca357e 315 invalid_check = scanf("%d", &new_dev);
Kjansen 7:3e5f6cca357e 316 }
Kjansen 7:3e5f6cca357e 317
Kjansen 7:3e5f6cca357e 318 printf("%d", new_dev);
Kjansen 7:3e5f6cca357e 319
Kjansen 7:3e5f6cca357e 320 switch (new_dev) {
Kjansen 7:3e5f6cca357e 321 case 1:
Kjansen 7:3e5f6cca357e 322 printf(" Internal sensor selected!");
Kjansen 7:3e5f6cca357e 323 init_params.interface_init.i2c_init.slave_address = INT_I2C_ADDRESS;
Kjansen 7:3e5f6cca357e 324 init_params.interface_init.spi_init.chip_select = SPI_CS;
Kjansen 7:3e5f6cca357e 325 break;
Kjansen 7:3e5f6cca357e 326 case 2:
Kjansen 7:3e5f6cca357e 327 printf(" External sensor selected!");
Kjansen 7:3e5f6cca357e 328 init_params.interface_init.i2c_init.slave_address = EXT_I2C_ADDRESS;
Kjansen 7:3e5f6cca357e 329 init_params.interface_init.spi_init.chip_select = SPI_CSE;
Kjansen 7:3e5f6cca357e 330 break;
Kjansen 7:3e5f6cca357e 331 }
Kjansen 7:3e5f6cca357e 332
Kjansen 7:3e5f6cca357e 333 return new_dev;
Kjansen 7:3e5f6cca357e 334 }
Kjansen 7:3e5f6cca357e 335
Kjansen 7:3e5f6cca357e 336 /*******************************************************************************
Kjansen 7:3e5f6cca357e 337 * @brief - Reads and prints the temperature in Celsius Degree
Kjansen 7:3e5f6cca357e 338 *
Kjansen 7:3e5f6cca357e 339 * @param None
Kjansen 7:3e5f6cca357e 340 *
Kjansen 7:3e5f6cca357e 341 * @return - Return SUCCESS flag - currently unused.
Kjansen 7:3e5f6cca357e 342 *******************************************************************************/
Kjansen 7:3e5f6cca357e 343 static uint8_t read_temperature()
Kjansen 7:3e5f6cca357e 344 {
Kjansen 7:3e5f6cca357e 345 float temp = adt7420_get_temperature(device);
Kjansen 7:3e5f6cca357e 346
Kjansen 7:3e5f6cca357e 347 printf("Current temperature:%.3f C", temp);
Kjansen 7:3e5f6cca357e 348 return SUCCESS;
Kjansen 7:3e5f6cca357e 349 }
Kjansen 7:3e5f6cca357e 350
Kjansen 7:3e5f6cca357e 351 /*******************************************************************************
Kjansen 7:3e5f6cca357e 352 * @brief -Set the device resolution for 13 or 16 bits
Kjansen 7:3e5f6cca357e 353 *
Kjansen 7:3e5f6cca357e 354 * @param None
Kjansen 7:3e5f6cca357e 355 *
Kjansen 7:3e5f6cca357e 356 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 357 *******************************************************************************/
Kjansen 7:3e5f6cca357e 358 static uint8_t set_resolution()
Kjansen 7:3e5f6cca357e 359 {
Kjansen 7:3e5f6cca357e 360 printf(" Available resolutions:" EOL);
Kjansen 7:3e5f6cca357e 361 printf(" 1- 13-bit" EOL);
Kjansen 7:3e5f6cca357e 362 printf(" 2- 16-bit" EOL);
Kjansen 7:3e5f6cca357e 363 printf(" Select an option: ");
Kjansen 7:3e5f6cca357e 364
Kjansen 7:3e5f6cca357e 365 int new_res, invalid_check = 0;
Kjansen 7:3e5f6cca357e 366 invalid_check = scanf("%d", &new_res);
Kjansen 7:3e5f6cca357e 367
Kjansen 7:3e5f6cca357e 368 if (input_check(new_res, 1, 2, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 369 return FAILURE;
Kjansen 7:3e5f6cca357e 370 } else {
Kjansen 7:3e5f6cca357e 371 printf("%d" EOL, new_res);
Kjansen 7:3e5f6cca357e 372 new_res = (new_res == 1) ? 0 : 1;
Kjansen 7:3e5f6cca357e 373 adt7420_set_resolution(device, new_res);
Kjansen 7:3e5f6cca357e 374 printf("Set resolution to %d-bit", (13 + 3 * new_res));
Kjansen 7:3e5f6cca357e 375 return SUCCESS;
Kjansen 7:3e5f6cca357e 376 }
Kjansen 7:3e5f6cca357e 377 }
Kjansen 7:3e5f6cca357e 378
Kjansen 7:3e5f6cca357e 379 /*******************************************************************************
Kjansen 7:3e5f6cca357e 380 * @brief - Set the device operation mode
Kjansen 7:3e5f6cca357e 381 * (Continuous conversion, One-shot, SPS, Shutdown).
Kjansen 7:3e5f6cca357e 382 * - Consult datasheet for more information.
Kjansen 7:3e5f6cca357e 383 *
Kjansen 7:3e5f6cca357e 384 * @param None
Kjansen 7:3e5f6cca357e 385 *
Kjansen 7:3e5f6cca357e 386 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 387 *******************************************************************************/
Kjansen 7:3e5f6cca357e 388 static uint8_t set_op_mode()
Kjansen 7:3e5f6cca357e 389 {
Kjansen 7:3e5f6cca357e 390 printf(" Available operation modes:" EOL);
Kjansen 7:3e5f6cca357e 391 printf(" 1- Continuous conversion mode (default)" EOL);
Kjansen 7:3e5f6cca357e 392 printf(" 2- One-shot mode" EOL);
Kjansen 7:3e5f6cca357e 393 printf(" 3- 1 SPS mode" EOL);
Kjansen 7:3e5f6cca357e 394 printf(" 4- Shutdown" EOL);
Kjansen 7:3e5f6cca357e 395 printf(" Select a mode: ");
Kjansen 7:3e5f6cca357e 396
Kjansen 7:3e5f6cca357e 397 int new_mode, invalid_check = 0;
Kjansen 7:3e5f6cca357e 398 invalid_check = scanf("%d", &new_mode);
Kjansen 7:3e5f6cca357e 399 if (input_check(new_mode, 1, 4, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 400 return FAILURE;
Kjansen 7:3e5f6cca357e 401 } else {
Kjansen 7:3e5f6cca357e 402 printf("%d" EOL, new_mode);
Kjansen 7:3e5f6cca357e 403 switch (new_mode) {
Kjansen 7:3e5f6cca357e 404 case 1:
Kjansen 7:3e5f6cca357e 405 adt7420_set_operation_mode(device, ADT7420_OP_MODE_CONT_CONV);
Kjansen 7:3e5f6cca357e 406 break;
Kjansen 7:3e5f6cca357e 407 case 2:
Kjansen 7:3e5f6cca357e 408 /*When One shot mode is set completes one conversion and immediately goes to shutdown mode*/
Kjansen 7:3e5f6cca357e 409 adt7420_set_operation_mode(device, ADT7420_OP_MODE_ONE_SHOT);
Kjansen 7:3e5f6cca357e 410 printf( EOL" One Shot mode enabled, device will enter shutdown mode once a conversion is complete."
Kjansen 7:3e5f6cca357e 411 EOL);
Kjansen 7:3e5f6cca357e 412 printf(" See page 10 in datasheet for details." EOL);
Kjansen 7:3e5f6cca357e 413 break;
Kjansen 7:3e5f6cca357e 414 case 3:
Kjansen 7:3e5f6cca357e 415 adt7420_set_operation_mode(device, ADT7420_OP_MODE_1_SPS);
Kjansen 7:3e5f6cca357e 416 break;
Kjansen 7:3e5f6cca357e 417 case 4:
Kjansen 7:3e5f6cca357e 418 adt7420_set_operation_mode(device, ADT7420_OP_MODE_SHUTDOWN);
Kjansen 7:3e5f6cca357e 419 break;
Kjansen 7:3e5f6cca357e 420 default:
Kjansen 7:3e5f6cca357e 421 printf("Invalid option" EOL);
Kjansen 7:3e5f6cca357e 422 break;
Kjansen 7:3e5f6cca357e 423 }
Kjansen 7:3e5f6cca357e 424 return SUCCESS;
Kjansen 7:3e5f6cca357e 425 }
Kjansen 7:3e5f6cca357e 426 }
Kjansen 7:3e5f6cca357e 427
Kjansen 7:3e5f6cca357e 428 /*******************************************************************************
Kjansen 7:3e5f6cca357e 429 * @brief - Prints poll of temperature based on the frequency of readings and
Kjansen 7:3e5f6cca357e 430 * number of samples.
Kjansen 7:3e5f6cca357e 431 *
Kjansen 7:3e5f6cca357e 432 *
Kjansen 7:3e5f6cca357e 433 * @param None
Kjansen 7:3e5f6cca357e 434 *
Kjansen 7:3e5f6cca357e 435 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 436 *******************************************************************************/
Kjansen 7:3e5f6cca357e 437 static uint8_t bunch_of_temps()
Kjansen 7:3e5f6cca357e 438 {
Kjansen 7:3e5f6cca357e 439 printf(" Enter number of desired samples: ");
Kjansen 7:3e5f6cca357e 440 int num_samples, invalid_check = 1;
Kjansen 7:3e5f6cca357e 441
Kjansen 7:3e5f6cca357e 442 invalid_check = scanf("%d", &num_samples);
Kjansen 7:3e5f6cca357e 443 if (input_check(num_samples, 1, 2000000, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 444 return FAILURE;
Kjansen 7:3e5f6cca357e 445 }
Kjansen 7:3e5f6cca357e 446 printf("%d" EOL, num_samples);
Kjansen 7:3e5f6cca357e 447
Kjansen 7:3e5f6cca357e 448 printf(" Enter a desired frequency in samples/sec (max 10): ");
Kjansen 7:3e5f6cca357e 449 int sample_freq = 1;
Kjansen 7:3e5f6cca357e 450 invalid_check = scanf("%d", &sample_freq);
Kjansen 7:3e5f6cca357e 451 if (input_check(sample_freq, 1, 10, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 452 return FAILURE;
Kjansen 7:3e5f6cca357e 453 }
Kjansen 7:3e5f6cca357e 454 sample_freq = constrain(sample_freq, 1, 10);
Kjansen 7:3e5f6cca357e 455 printf("%d", sample_freq);
Kjansen 7:3e5f6cca357e 456
Kjansen 7:3e5f6cca357e 457 uint32_t delay_sec = 1000000 / sample_freq;
Kjansen 7:3e5f6cca357e 458
Kjansen 7:3e5f6cca357e 459 printf(" Gathering %d seconds of samples" EOL, num_samples/sample_freq);
Kjansen 7:3e5f6cca357e 460 printf("Press enter to continue and then press again to quit" EOL);
Kjansen 7:3e5f6cca357e 461 getchar();
Kjansen 7:3e5f6cca357e 462
Kjansen 7:3e5f6cca357e 463 for (int i = 0; i < num_samples; i++) {
Kjansen 7:3e5f6cca357e 464 if(getchar_noblock()) {
Kjansen 7:3e5f6cca357e 465 return SUCCESS;
Kjansen 7:3e5f6cca357e 466 } else {
Kjansen 7:3e5f6cca357e 467 printf(" Sample:%d: Temperature:", i + 1);
Kjansen 7:3e5f6cca357e 468 float temp = adt7420_get_temperature(device);
Kjansen 7:3e5f6cca357e 469 printf("%.4f" EOL, temp);
Kjansen 7:3e5f6cca357e 470 udelay(delay_sec);
Kjansen 7:3e5f6cca357e 471 }
Kjansen 7:3e5f6cca357e 472 }
Kjansen 7:3e5f6cca357e 473 return SUCCESS;
Kjansen 7:3e5f6cca357e 474 }
Kjansen 7:3e5f6cca357e 475
Kjansen 7:3e5f6cca357e 476 /*******************************************************************************
Kjansen 7:3e5f6cca357e 477 * @brief - Reads back data store in device registers
Kjansen 7:3e5f6cca357e 478 *
Kjansen 7:3e5f6cca357e 479 * @param None
Kjansen 7:3e5f6cca357e 480 *
Kjansen 7:3e5f6cca357e 481 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 482 *******************************************************************************/
Kjansen 7:3e5f6cca357e 483
Kjansen 7:3e5f6cca357e 484 static uint8_t readback_reg()
Kjansen 7:3e5f6cca357e 485 {
Kjansen 7:3e5f6cca357e 486 printf(" Available registers:" EOL);
Kjansen 7:3e5f6cca357e 487 printf(" 1- Status" EOL);
Kjansen 7:3e5f6cca357e 488 printf(" 2- Configuration" EOL);
Kjansen 7:3e5f6cca357e 489 printf(" 3- Temperature" EOL);
Kjansen 7:3e5f6cca357e 490 printf(" 4- ID" EOL);
Kjansen 7:3e5f6cca357e 491 printf(" 5- Critical Temperature setpoint" EOL);
Kjansen 7:3e5f6cca357e 492 printf(" 6- Hysteresis Temperature setpoint" EOL);
Kjansen 7:3e5f6cca357e 493 printf(" 7- Temperature high setpoint" EOL);
Kjansen 7:3e5f6cca357e 494 printf(" 8- Temperature low setpoint" EOL);
Kjansen 7:3e5f6cca357e 495 printf(" Select a mode: ");
Kjansen 7:3e5f6cca357e 496
Kjansen 7:3e5f6cca357e 497 uint16_t read_value = 0;
Kjansen 7:3e5f6cca357e 498 int new_mode, invalid_check = 0;
Kjansen 7:3e5f6cca357e 499 invalid_check = scanf("%d", &new_mode);
Kjansen 7:3e5f6cca357e 500 if (input_check(new_mode, 1, 8, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 501 return FAILURE;
Kjansen 7:3e5f6cca357e 502 }
Kjansen 7:3e5f6cca357e 503 printf("%d" EOL, new_mode);
Kjansen 7:3e5f6cca357e 504
Kjansen 7:3e5f6cca357e 505 switch (new_mode) {
Kjansen 7:3e5f6cca357e 506 case 1:
Kjansen 7:3e5f6cca357e 507 read_value = adt7420_get_register_address_and_value(device, REG_STATUS);
Kjansen 7:3e5f6cca357e 508 break;
Kjansen 7:3e5f6cca357e 509 case 2:
Kjansen 7:3e5f6cca357e 510 read_value = adt7420_get_register_address_and_value(device, REG_CONFIG);
Kjansen 7:3e5f6cca357e 511 break;
Kjansen 7:3e5f6cca357e 512 case 3:
Kjansen 7:3e5f6cca357e 513 read_value = adt7420_get_register_address_and_value(device, REG_TEMP);
Kjansen 7:3e5f6cca357e 514 break;
Kjansen 7:3e5f6cca357e 515 case 4:
Kjansen 7:3e5f6cca357e 516 read_value = adt7420_get_register_address_and_value(device, REG_ID);
Kjansen 7:3e5f6cca357e 517 break;
Kjansen 7:3e5f6cca357e 518 case 5:
Kjansen 7:3e5f6cca357e 519 read_value = adt7420_get_register_address_and_value(device, REG_T_CRIT);
Kjansen 7:3e5f6cca357e 520 break;
Kjansen 7:3e5f6cca357e 521 case 6:
Kjansen 7:3e5f6cca357e 522 read_value = adt7420_get_register_address_and_value(device, REG_HIST);
Kjansen 7:3e5f6cca357e 523 break;
Kjansen 7:3e5f6cca357e 524 case 7:
Kjansen 7:3e5f6cca357e 525 read_value = adt7420_get_register_address_and_value(device, REG_T_HIGH);
Kjansen 7:3e5f6cca357e 526 break;
Kjansen 7:3e5f6cca357e 527 case 8:
Kjansen 7:3e5f6cca357e 528 read_value = adt7420_get_register_address_and_value(device, REG_T_LOW);
Kjansen 7:3e5f6cca357e 529 break;
Kjansen 7:3e5f6cca357e 530 default:
Kjansen 7:3e5f6cca357e 531 break;
Kjansen 7:3e5f6cca357e 532 }
Kjansen 7:3e5f6cca357e 533 printf("Read value: 0x%x" EOL, read_value);
Kjansen 7:3e5f6cca357e 534
Kjansen 7:3e5f6cca357e 535 return SUCCESS;
Kjansen 7:3e5f6cca357e 536 }
Kjansen 7:3e5f6cca357e 537
Kjansen 7:3e5f6cca357e 538 /*******************************************************************************
Kjansen 7:3e5f6cca357e 539 * @brief - Resets device interface (SPI/I2C) (power-on reset)
Kjansen 7:3e5f6cca357e 540 *
Kjansen 7:3e5f6cca357e 541 * @param None
Kjansen 7:3e5f6cca357e 542 *
Kjansen 7:3e5f6cca357e 543 * @return - Return SUCCESS flag - currently unused.
Kjansen 7:3e5f6cca357e 544 *******************************************************************************/
Kjansen 7:3e5f6cca357e 545 static uint8_t reset_interface()
Kjansen 7:3e5f6cca357e 546 {
Kjansen 7:3e5f6cca357e 547 printf(" Resetting interface..." EOL);
Kjansen 7:3e5f6cca357e 548 adt7420_reset(device);
Kjansen 7:3e5f6cca357e 549 udelay(RESET_DELAY);
Kjansen 7:3e5f6cca357e 550 return SUCCESS;
Kjansen 7:3e5f6cca357e 551 }
Kjansen 7:3e5f6cca357e 552
Kjansen 7:3e5f6cca357e 553 /*******************************************************************************
Kjansen 7:3e5f6cca357e 554 * @brief - Write to setpoint registers THIGH, TLOW, TCRIT and THYST.
Kjansen 7:3e5f6cca357e 555 - Values entered in Celsius and rounded to a near integer value.
Kjansen 7:3e5f6cca357e 556 *
Kjansen 7:3e5f6cca357e 557 * @param None
Kjansen 7:3e5f6cca357e 558 *
Kjansen 7:3e5f6cca357e 559 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 560 *******************************************************************************/
Kjansen 7:3e5f6cca357e 561 static uint8_t write_to_setpoint_reg()
Kjansen 7:3e5f6cca357e 562 {
Kjansen 7:3e5f6cca357e 563 printf(" Available registers:" EOL);
Kjansen 7:3e5f6cca357e 564 printf(" 1- Critical setpoint" EOL);
Kjansen 7:3e5f6cca357e 565 printf(" 2- Hystersis setpoint" EOL);
Kjansen 7:3e5f6cca357e 566 printf(" 3- Temperature high setpoint" EOL);
Kjansen 7:3e5f6cca357e 567 printf(" 4- Temperature low setpoint" EOL);
Kjansen 7:3e5f6cca357e 568 printf(" Select a mode: ");
Kjansen 7:3e5f6cca357e 569
Kjansen 7:3e5f6cca357e 570 int new_mode, invalid_check = 0;
Kjansen 7:3e5f6cca357e 571 invalid_check = scanf("%d", &new_mode);
Kjansen 7:3e5f6cca357e 572 if (input_check(new_mode, 1, 4, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 573 return FAILURE;
Kjansen 7:3e5f6cca357e 574 }
Kjansen 7:3e5f6cca357e 575 printf("%d" EOL, new_mode);
Kjansen 7:3e5f6cca357e 576
Kjansen 7:3e5f6cca357e 577 float temp_c;
Kjansen 7:3e5f6cca357e 578
Kjansen 7:3e5f6cca357e 579 if(new_mode == 2) {
Kjansen 7:3e5f6cca357e 580 printf("Enter value to write (0 to 15) Celsius:");
Kjansen 7:3e5f6cca357e 581 invalid_check = scanf("%f", &temp_c);
Kjansen 7:3e5f6cca357e 582 if(input_check(temp_c, MIN_HYST_TEMP, MAX_HYST_TEMP,
Kjansen 7:3e5f6cca357e 583 invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 584 return FAILURE;
Kjansen 7:3e5f6cca357e 585 }
Kjansen 7:3e5f6cca357e 586 } else {
Kjansen 7:3e5f6cca357e 587 printf("Enter value to write (in Celsius):");
Kjansen 7:3e5f6cca357e 588 invalid_check = scanf("%f", &temp_c);
Kjansen 7:3e5f6cca357e 589 if(input_check(temp_c, TEMP_MIN, TEMP_MAX, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 590 return FAILURE;
Kjansen 7:3e5f6cca357e 591 }
Kjansen 7:3e5f6cca357e 592 }
Kjansen 7:3e5f6cca357e 593
Kjansen 7:3e5f6cca357e 594 printf(" %.2f", temp_c);
Kjansen 7:3e5f6cca357e 595
Kjansen 7:3e5f6cca357e 596 int16_t write_value;
Kjansen 7:3e5f6cca357e 597
Kjansen 7:3e5f6cca357e 598 if(new_mode == 2)
Kjansen 7:3e5f6cca357e 599 write_value = round(temp_c);
Kjansen 7:3e5f6cca357e 600 else
Kjansen 7:3e5f6cca357e 601 write_value = round(128 * temp_c);
Kjansen 7:3e5f6cca357e 602
Kjansen 7:3e5f6cca357e 603 switch (new_mode) {
Kjansen 7:3e5f6cca357e 604 case 1:
Kjansen 7:3e5f6cca357e 605 if (adt7420_wr_setpoint_reg(device, REG_T_CRIT, write_value) == SUCCESS)
Kjansen 7:3e5f6cca357e 606 printf(EOL "0x%x successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 607 else
Kjansen 7:3e5f6cca357e 608 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 609 break;
Kjansen 7:3e5f6cca357e 610 case 2:
Kjansen 7:3e5f6cca357e 611 if (adt7420_wr_setpoint_reg(device, REG_HIST, write_value) == SUCCESS)
Kjansen 7:3e5f6cca357e 612 printf(EOL "0x%x successfuly written (bits 7:4 are fixed at 0)" EOL,
Kjansen 7:3e5f6cca357e 613 write_value);
Kjansen 7:3e5f6cca357e 614 else
Kjansen 7:3e5f6cca357e 615 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 616 break;
Kjansen 7:3e5f6cca357e 617 case 3:
Kjansen 7:3e5f6cca357e 618 if (adt7420_wr_setpoint_reg(device, REG_T_HIGH, write_value) == SUCCESS)
Kjansen 7:3e5f6cca357e 619 printf(EOL "0x%x successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 620 else
Kjansen 7:3e5f6cca357e 621 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 622 break;
Kjansen 7:3e5f6cca357e 623 case 4:
Kjansen 7:3e5f6cca357e 624 if (adt7420_wr_setpoint_reg(device, REG_T_LOW, write_value) == SUCCESS)
Kjansen 7:3e5f6cca357e 625 printf(EOL "0x%x successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 626 else
Kjansen 7:3e5f6cca357e 627 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Kjansen 7:3e5f6cca357e 628 break;
Kjansen 7:3e5f6cca357e 629 default:
Kjansen 7:3e5f6cca357e 630 printf("Invalid selection - try again." EOL);
Kjansen 7:3e5f6cca357e 631 mdelay(2000);
Kjansen 7:3e5f6cca357e 632 break;
Kjansen 7:3e5f6cca357e 633 }
Kjansen 7:3e5f6cca357e 634 return SUCCESS;
Kjansen 7:3e5f6cca357e 635 }
Kjansen 7:3e5f6cca357e 636
Kjansen 7:3e5f6cca357e 637 /*******************************************************************************
Kjansen 7:3e5f6cca357e 638 * @brief - Set the number of undertemperature/overtemperature faults
Kjansen 7:3e5f6cca357e 639 * that can occur before setting the INT and CT output pins
Kjansen 7:3e5f6cca357e 640 *
Kjansen 7:3e5f6cca357e 641 * @param None
Kjansen 7:3e5f6cca357e 642 *
Kjansen 7:3e5f6cca357e 643 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 644 *******************************************************************************/
Kjansen 7:3e5f6cca357e 645 static uint8_t set_fault_queue()
Kjansen 7:3e5f6cca357e 646 {
Kjansen 7:3e5f6cca357e 647 printf(" Available fault queue options:" EOL);
Kjansen 7:3e5f6cca357e 648 printf(" 1- 1 fault (default) " EOL);
Kjansen 7:3e5f6cca357e 649 printf(" 2- 2 faults" EOL);
Kjansen 7:3e5f6cca357e 650 printf(" 3- 3 faults" EOL);
Kjansen 7:3e5f6cca357e 651 printf(" 4- 4 faults" EOL);
Kjansen 7:3e5f6cca357e 652 printf(" Select a mode: ");
Kjansen 7:3e5f6cca357e 653
Kjansen 7:3e5f6cca357e 654 int new_fault, invalid_check = 0;
Kjansen 7:3e5f6cca357e 655 invalid_check = scanf("%d", &new_fault);
Kjansen 7:3e5f6cca357e 656 if (input_check(new_fault, 1, 4, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 657 return FAILURE;
Kjansen 7:3e5f6cca357e 658 } else {
Kjansen 7:3e5f6cca357e 659 printf("%d" EOL, new_fault);
Kjansen 7:3e5f6cca357e 660
Kjansen 7:3e5f6cca357e 661 switch (new_fault) {
Kjansen 7:3e5f6cca357e 662 case 1:
Kjansen 7:3e5f6cca357e 663 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_1_FAULT);
Kjansen 7:3e5f6cca357e 664 break;
Kjansen 7:3e5f6cca357e 665 case 2:
Kjansen 7:3e5f6cca357e 666 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_2_FAULTS);
Kjansen 7:3e5f6cca357e 667 break;
Kjansen 7:3e5f6cca357e 668 case 3:
Kjansen 7:3e5f6cca357e 669 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_3_FAULTS);
Kjansen 7:3e5f6cca357e 670 break;
Kjansen 7:3e5f6cca357e 671 case 4:
Kjansen 7:3e5f6cca357e 672 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_4_FAULTS);
Kjansen 7:3e5f6cca357e 673 break;
Kjansen 7:3e5f6cca357e 674 default:
Kjansen 7:3e5f6cca357e 675 printf("Invalid option" EOL);
Kjansen 7:3e5f6cca357e 676 break;
Kjansen 7:3e5f6cca357e 677 }
Kjansen 7:3e5f6cca357e 678 return SUCCESS;
Kjansen 7:3e5f6cca357e 679 }
Kjansen 7:3e5f6cca357e 680 }
Kjansen 7:3e5f6cca357e 681
Kjansen 7:3e5f6cca357e 682 /*******************************************************************************
Kjansen 7:3e5f6cca357e 683 * @brief - Set INT/CT Outputs pins to Comparator or Interrupt mode
Kjansen 7:3e5f6cca357e 684 *
Kjansen 7:3e5f6cca357e 685 * @param None
Kjansen 7:3e5f6cca357e 686 *
Kjansen 7:3e5f6cca357e 687 * @return - Return SUCCESS/FAILURE flags
Kjansen 7:3e5f6cca357e 688 *******************************************************************************/
Kjansen 7:3e5f6cca357e 689 static uint8_t set_ct_int_config()
Kjansen 7:3e5f6cca357e 690 {
Kjansen 7:3e5f6cca357e 691 int new_polarity = 0;
Kjansen 7:3e5f6cca357e 692 int new_mode, invalid_check = 0;
Kjansen 7:3e5f6cca357e 693
Kjansen 7:3e5f6cca357e 694 printf(" Choose INT/CT mode:" EOL);
Kjansen 7:3e5f6cca357e 695 printf(" 1- Interrupt (default) " EOL);
Kjansen 7:3e5f6cca357e 696 printf(" 2- Comparator " EOL);
Kjansen 7:3e5f6cca357e 697 printf(" Select a mode: ");
Kjansen 7:3e5f6cca357e 698 invalid_check = scanf("%d", &new_mode);
Kjansen 7:3e5f6cca357e 699 if (input_check(new_mode, 1, 2, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 700 return FAILURE;
Kjansen 7:3e5f6cca357e 701 } else {
Kjansen 7:3e5f6cca357e 702 printf("%d" EOL, new_mode);
Kjansen 7:3e5f6cca357e 703 new_mode = (new_mode == 1) ? 0 : 1;
Kjansen 7:3e5f6cca357e 704 adt7420_set_ct_int_mode(device, new_mode);
Kjansen 7:3e5f6cca357e 705 }
Kjansen 7:3e5f6cca357e 706
Kjansen 7:3e5f6cca357e 707 printf(EOL " Set output polarity for Critical and Over/Under Temperature pin:"
Kjansen 7:3e5f6cca357e 708 EOL);
Kjansen 7:3e5f6cca357e 709 printf(" (Feature available only for internal sensors)." EOL);
Kjansen 7:3e5f6cca357e 710
Kjansen 7:3e5f6cca357e 711 if(init_params.interface_init.i2c_init.slave_address == INT_I2C_ADDRESS ||
Kjansen 7:3e5f6cca357e 712 init_params.interface_init.spi_init.chip_select == SPI_CS) {
Kjansen 7:3e5f6cca357e 713
Kjansen 7:3e5f6cca357e 714 printf(" 1- Active Low (default) " EOL);
Kjansen 7:3e5f6cca357e 715 printf(" 2- Active High" EOL);
Kjansen 7:3e5f6cca357e 716 printf(" Select a mode: ");
Kjansen 7:3e5f6cca357e 717
Kjansen 7:3e5f6cca357e 718 invalid_check = scanf("%d", &new_polarity);
Kjansen 7:3e5f6cca357e 719 if (input_check(new_polarity, 1, 2, invalid_check) == FAILURE) {
Kjansen 7:3e5f6cca357e 720 return FAILURE;
Kjansen 7:3e5f6cca357e 721 } else {
Kjansen 7:3e5f6cca357e 722 printf("%d" EOL, new_polarity);
Kjansen 7:3e5f6cca357e 723 new_polarity = (new_polarity == 1) ? 0 : 1;
Kjansen 7:3e5f6cca357e 724 adt7420_set_ct_int_polarity(device, new_polarity);
Kjansen 7:3e5f6cca357e 725 }
Kjansen 7:3e5f6cca357e 726 }
Kjansen 7:3e5f6cca357e 727 return SUCCESS;
Kjansen 7:3e5f6cca357e 728 }
Kjansen 7:3e5f6cca357e 729
Kjansen 7:3e5f6cca357e 730 /*******************************************************************************
Kjansen 7:3e5f6cca357e 731 * @brief Reset microcontroller
Kjansen 7:3e5f6cca357e 732 *
Kjansen 7:3e5f6cca357e 733 * @param None
Kjansen 7:3e5f6cca357e 734 *
Kjansen 7:3e5f6cca357e 735 * @return None.
Kjansen 7:3e5f6cca357e 736 *******************************************************************************/
Kjansen 7:3e5f6cca357e 737 static void microcontroller_reset()
Kjansen 7:3e5f6cca357e 738 {
Kjansen 7:3e5f6cca357e 739 NVIC_SystemReset();
Kjansen 7:3e5f6cca357e 740 }
Kjansen 7:3e5f6cca357e 741
Kjansen 7:3e5f6cca357e 742 /*******************************************************************************
Kjansen 7:3e5f6cca357e 743 * @brief Prints the active device every time the main menu is redrawn
Kjansen 7:3e5f6cca357e 744 *
Kjansen 7:3e5f6cca357e 745 * @param external_internal_selection - External or Internal Chip Selected
Kjansen 7:3e5f6cca357e 746 *
Kjansen 7:3e5f6cca357e 747 * @return None.
Kjansen 7:3e5f6cca357e 748 *******************************************************************************/
Kjansen 7:3e5f6cca357e 749 static void print_active_device(int external_internal_selection)
Kjansen 7:3e5f6cca357e 750 {
Kjansen 7:3e5f6cca357e 751 const char* devices[7] = {EOL EOL " Active Device: ADT7410 I2C",
Kjansen 7:3e5f6cca357e 752 EOL EOL " Active Device: ADT7420 I2C",
Kjansen 7:3e5f6cca357e 753 EOL EOL " Active Device: ADT7422 I2C",
Kjansen 7:3e5f6cca357e 754 EOL EOL " Active Device: ADT7310 SPI",
Kjansen 7:3e5f6cca357e 755 EOL EOL " Active Device: ADT7311 SPI",
Kjansen 7:3e5f6cca357e 756 EOL EOL " Active Device: ADT7312 SPI",
Kjansen 7:3e5f6cca357e 757 EOL EOL " Active Device: ADT7320 SPI"
Kjansen 7:3e5f6cca357e 758 };
Kjansen 7:3e5f6cca357e 759
Kjansen 7:3e5f6cca357e 760 const char* external_internal_print[] = {" - Internal Chip " EOL,
Kjansen 7:3e5f6cca357e 761 " - External Chip " EOL
Kjansen 7:3e5f6cca357e 762 };
Kjansen 7:3e5f6cca357e 763
Kjansen 7:3e5f6cca357e 764 printf("%s %s", devices[init_params.active_device],
Kjansen 7:3e5f6cca357e 765 external_internal_print[external_internal_selection - 1]);
Kjansen 7:3e5f6cca357e 766 }
Kjansen 7:3e5f6cca357e 767
Kjansen 7:3e5f6cca357e 768 /*******************************************************************************
Kjansen 7:3e5f6cca357e 769 * @brief Checks is an input is a digit and within valid range
Kjansen 7:3e5f6cca357e 770 *
Kjansen 7:3e5f6cca357e 771 * @param input_val - Value inputed by user
Kjansen 7:3e5f6cca357e 772 * @param lowest_accepted_val - Lowest acceptable value
Kjansen 7:3e5f6cca357e 773 * @param highest_accepted_val - Highest acceptable value
Kjansen 7:3e5f6cca357e 774 * @param invalid_check - Checks if unexpected type of data was entered in scanf
Kjansen 7:3e5f6cca357e 775 *
Kjansen 7:3e5f6cca357e 776 * @return SUCCESS/FAILURE Flags.
Kjansen 7:3e5f6cca357e 777 *******************************************************************************/
Kjansen 7:3e5f6cca357e 778 static int input_check(int input_val,
Kjansen 7:3e5f6cca357e 779 int lowest_accepted_val,
Kjansen 7:3e5f6cca357e 780 int highest_accepted_val,
Kjansen 7:3e5f6cca357e 781 int invalid_check)
Kjansen 7:3e5f6cca357e 782 {
Kjansen 7:3e5f6cca357e 783 if(invalid_check == 0 || input_val < lowest_accepted_val
Kjansen 7:3e5f6cca357e 784 || input_val > highest_accepted_val) {
Kjansen 7:3e5f6cca357e 785 printf(EOL EOL "***** Invalid entry: No changes made *****" EOL );
Kjansen 7:3e5f6cca357e 786 mdelay(WAIT_MENU_TIME);
Kjansen 7:3e5f6cca357e 787 return FAILURE;
Kjansen 7:3e5f6cca357e 788 }
Kjansen 7:3e5f6cca357e 789 return SUCCESS;
Kjansen 7:3e5f6cca357e 790 }