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