Example program for EVAL-TempSense-ARDZ boards.
Dependencies: platform_drivers
app/main.cpp@7:3e5f6cca357e, 2021-09-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |