Frequency counter using GPS 1PPS signal and temperature controlled 50MHz Base clock. Ported from F411 Frequency Counter.

Dependencies:   QEI DRV8830 PID ADT7410 TextLCD Frq_cuntr_Nucleo-F746ZG RingBuffer

Fork of Frequency_Counter_w_GPS_1PPS by Kenji Arai

Please refer following.
/users/kenjiArai/notebook/frequency-counters/

Committer:
kenjiArai
Date:
Sun Dec 22 06:29:39 2019 +0000
Revision:
15:ae0413277bc6
Parent:
14:ba6ea409ab05
Update os5 -> 0s5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 13:1041596c416c 1 /*
kenjiArai 13:1041596c416c 2 * mbed Application program / Frequency Counter with GPS 1PPS Compensation
kenjiArai 14:ba6ea409ab05 3 * Only for ST Nucleo-F746ZG on mbed-OS5
kenjiArai 13:1041596c416c 4 *
kenjiArai 14:ba6ea409ab05 5 * Copyright (c) 2014,'15,'16,'19 Kenji Arai / JH1PJL
kenjiArai 13:1041596c416c 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 13:1041596c416c 7 * http://mbed.org/users/kenjiArai/
kenjiArai 13:1041596c416c 8 * Created: October 18th, 2014
kenjiArai 13:1041596c416c 9 * Revised: January 2nd, 2015
kenjiArai 13:1041596c416c 10 * Re-started: June 25th, 2016 ported from F411 to F746
kenjiArai 15:ae0413277bc6 11 * Revised: December 22nd, 2019
kenjiArai 13:1041596c416c 12 *
kenjiArai 13:1041596c416c 13 * Base program: Frequency_counter_w_GPS_1PPS (only for Nucleo-F411RE board)
kenjiArai 13:1041596c416c 14 * https://developer.mbed.org/users/kenjiArai/code/Frequency_Counter_w_GPS_1PPS/
kenjiArai 13:1041596c416c 15 */
kenjiArai 13:1041596c416c 16
kenjiArai 13:1041596c416c 17 /*
kenjiArai 13:1041596c416c 18 --------------------------------------------------------------------------------
kenjiArai 13:1041596c416c 19 Frequency Counter Functions
kenjiArai 13:1041596c416c 20 Mesurement frequency range:
kenjiArai 13:1041596c416c 21 10Hz to 100MHz (BNC Connector)
kenjiArai 13:1041596c416c 22 Extended range:
kenjiArai 13:1041596c416c 23 Up to 1GHz (1/10 prescaler) or more over (1/20) (SMA)
kenjiArai 13:1041596c416c 24 Gate time:
kenjiArai 13:1041596c416c 25 1 sec to 4095sec (extend to more if RAM is avairable)
kenjiArai 13:1041596c416c 26 Reciprocal measurement:
kenjiArai 13:1041596c416c 27 0.01Hz to 5KHz (extend more lower frequency change input I/F)
kenjiArai 13:1041596c416c 28 Base Internal Clock:
kenjiArai 13:1041596c416c 29 50MHz VCTCXO (Connor-Winfield TB514-050.0M)
kenjiArai 13:1041596c416c 30 1 PPS:
kenjiArai 13:1041596c416c 31 GPS receiver(u-blux7/NEO-7) with an external antenna (SMA)
kenjiArai 13:1041596c416c 32 Temperature controlled Oven:
kenjiArai 13:1041596c416c 33 32 degree Celsius +/-0.2 for 50MHz VCTCXO & 3.3V regulater
kenjiArai 13:1041596c416c 34 Hardware Configration
kenjiArai 13:1041596c416c 35 frequency input: PC_6 & PA_3
kenjiArai 13:1041596c416c 36 50MHz base clock input: PA_5
kenjiArai 13:1041596c416c 37 GPS 1PPS input: PA_1
kenjiArai 13:1041596c416c 38 Connect (for 1sec gate): PA_7, PB_10 and PC_7 connected together
kenjiArai 13:1041596c416c 39 IMPORTANT!!!!
kenjiArai 13:1041596c416c 40 SB13 & SB181 must REMOVE from Nucleo-F746ZG board
kenjiArai 13:1041596c416c 41 --------------------------------------------------------------------------------
kenjiArai 13:1041596c416c 42 */
kenjiArai 13:1041596c416c 43
kenjiArai 13:1041596c416c 44 #define USE_COM // use Communication with PC(UART)
kenjiArai 13:1041596c416c 45 #define USE_DEBUG
kenjiArai 13:1041596c416c 46 //#define HW_TEST_GO // activate Hardware test mode
kenjiArai 13:1041596c416c 47
kenjiArai 13:1041596c416c 48 // Include --------------------------------------------------------------------
kenjiArai 13:1041596c416c 49 #include "mbed.h"
kenjiArai 13:1041596c416c 50 #include "GPSrcvr.h"
kenjiArai 13:1041596c416c 51 #include "DRV8830.h"
kenjiArai 13:1041596c416c 52 #include "ADT7410.h"
kenjiArai 13:1041596c416c 53 #include "PID.h"
kenjiArai 13:1041596c416c 54 #include "frq_cuntr_f746.h"
kenjiArai 13:1041596c416c 55 #include "TextLCD.h"
kenjiArai 13:1041596c416c 56 #include "QEI.h"
kenjiArai 13:1041596c416c 57 #include "uif.h"
kenjiArai 13:1041596c416c 58
kenjiArai 13:1041596c416c 59 // Definition -----------------------------------------------------------------
kenjiArai 13:1041596c416c 60 #ifdef USE_COM
kenjiArai 13:1041596c416c 61 #define BAUD(x) pc.baud(x)
kenjiArai 13:1041596c416c 62 #define GETC(x) pc.getc(x)
kenjiArai 13:1041596c416c 63 #define PUTC(x) pc.putc(x)
kenjiArai 13:1041596c416c 64 #define PRINTF(...) pc.printf(__VA_ARGS__)
kenjiArai 13:1041596c416c 65 #define READABLE(x) pc.readable(x)
kenjiArai 13:1041596c416c 66 #else
kenjiArai 13:1041596c416c 67 #define BAUD(x) {;}
kenjiArai 13:1041596c416c 68 #define GETC(x) {;}
kenjiArai 13:1041596c416c 69 #define PUTC(x) {;}
kenjiArai 13:1041596c416c 70 #define PRINTF(...) {;}
kenjiArai 13:1041596c416c 71 #define READABLE(x) {;}
kenjiArai 13:1041596c416c 72 #endif
kenjiArai 13:1041596c416c 73
kenjiArai 13:1041596c416c 74 #ifdef USE_DEBUG
kenjiArai 13:1041596c416c 75 #define U_DEBUGBAUD(x) pc.baud(x)
kenjiArai 13:1041596c416c 76 #define U_DEBUG(...) pc.printf(__VA_ARGS__)
kenjiArai 13:1041596c416c 77 #define DBG(c) pc.putc(c)
kenjiArai 13:1041596c416c 78 #else
kenjiArai 13:1041596c416c 79 #define U_DEBUGBAUD(x) {;}
kenjiArai 13:1041596c416c 80 #define U_DEBUG(...) {;}
kenjiArai 13:1041596c416c 81 #define DBG(c) {;}
kenjiArai 13:1041596c416c 82 #endif
kenjiArai 13:1041596c416c 83
kenjiArai 13:1041596c416c 84 #define CLEAR_PD_2_RX_LINE() {UART5->ICR = 0; UART5->CR1 = 0; UART5->CR1 = 5;}
kenjiArai 13:1041596c416c 85
kenjiArai 13:1041596c416c 86 #define CLOCK_BASE (50.000000f) // MHz
kenjiArai 13:1041596c416c 87 #define TRGT_TEMP (32.0f) // degC
kenjiArai 13:1041596c416c 88
kenjiArai 13:1041596c416c 89 #define RECIPRO_OVRFLW 10000 // = 5KHz
kenjiArai 13:1041596c416c 90 #define RECIPRO_TIMEOUT 1000000 // = 0.001Hz
kenjiArai 13:1041596c416c 91
kenjiArai 13:1041596c416c 92 #define GSP_BUF_B (128 * 3)
kenjiArai 13:1041596c416c 93 #define GPS_BUF_S (128 * 2)
kenjiArai 13:1041596c416c 94
kenjiArai 13:1041596c416c 95 using namespace Frequency_counter;
kenjiArai 13:1041596c416c 96
kenjiArai 13:1041596c416c 97 // Object ---------------------------------------------------------------------
kenjiArai 15:ae0413277bc6 98 //DigitalOut led_gate(LED1);
kenjiArai 15:ae0413277bc6 99 DigitalIn pa1(PA_1); // GPS 1PPS input
kenjiArai 13:1041596c416c 100 //**** UART
kenjiArai 13:1041596c416c 101 Serial pc(USBTX, USBRX);
kenjiArai 13:1041596c416c 102 //**** Req. Counter
kenjiArai 13:1041596c416c 103 FRQ_CUNTR fc(CLOCK_BASE); // External clock freq.
kenjiArai 13:1041596c416c 104
kenjiArai 13:1041596c416c 105 // RAM ------------------------------------------------------------------------
kenjiArai 13:1041596c416c 106 // all display data
kenjiArai 13:1041596c416c 107 dispDef disp_data;
kenjiArai 13:1041596c416c 108 // Freq.
kenjiArai 13:1041596c416c 109 double new_frequency;
kenjiArai 13:1041596c416c 110 double freq_recipro;
kenjiArai 13:1041596c416c 111 uint32_t interval_recipro;
kenjiArai 13:1041596c416c 112 uint8_t recipro_new_data_ready;
kenjiArai 13:1041596c416c 113 uint8_t recipro_overflow;
kenjiArai 13:1041596c416c 114
kenjiArai 13:1041596c416c 115 // ROM / Constant data --------------------------------------------------------
kenjiArai 13:1041596c416c 116
kenjiArai 13:1041596c416c 117
kenjiArai 13:1041596c416c 118 // Function prototypes --------------------------------------------------------
kenjiArai 13:1041596c416c 119 extern void dispay_LCD_and_UART(dispDef *dt);
kenjiArai 13:1041596c416c 120 extern void select_input_div_1or10or20(uint8_t mode);
kenjiArai 13:1041596c416c 121
kenjiArai 13:1041596c416c 122 //------------------------------------------------------------------------------
kenjiArai 13:1041596c416c 123 // Control Program
kenjiArai 13:1041596c416c 124 //------------------------------------------------------------------------------
kenjiArai 13:1041596c416c 125 // Frequency measurement
kenjiArai 13:1041596c416c 126 void measure_freq(void const *args)
kenjiArai 13:1041596c416c 127 {
kenjiArai 13:1041596c416c 128 while(true) {
kenjiArai 13:1041596c416c 129 if (fc.status_freq_update() != 0) {
kenjiArai 13:1041596c416c 130 new_frequency = fc.read_freq_data();
kenjiArai 13:1041596c416c 131 disp_data.m_frq = new_frequency;
kenjiArai 13:1041596c416c 132 disp_data.m_frq_comp = fc.read_compensated_freq_data_w_gt(1);
kenjiArai 13:1041596c416c 133 disp_data.m_frq_10 = fc.read_compensated_freq_data_w_gt(10);
kenjiArai 13:1041596c416c 134 disp_data.m_frq_100 = fc.read_compensated_freq_data_w_gt(100);
kenjiArai 13:1041596c416c 135 disp_data.m_frq_1000 = fc.read_compensated_freq_data_w_gt(1000);
kenjiArai 13:1041596c416c 136 }
kenjiArai 13:1041596c416c 137 if (fc.status_1pps() != 0) {
kenjiArai 13:1041596c416c 138 disp_data.b_1pps_new = fc.read_newest_1pps();
kenjiArai 13:1041596c416c 139 disp_data.b_1pps_lng = fc.read_avarage_1pps();
kenjiArai 13:1041596c416c 140 }
kenjiArai 14:ba6ea409ab05 141 ThisThread::sleep_for(100); // 0.1sec
kenjiArai 13:1041596c416c 142 }
kenjiArai 13:1041596c416c 143 }
kenjiArai 13:1041596c416c 144
kenjiArai 13:1041596c416c 145 // Frequency measurement / Reciprocal measurement
kenjiArai 13:1041596c416c 146 void measure_freq_recipro(void const *args)
kenjiArai 13:1041596c416c 147 {
kenjiArai 13:1041596c416c 148 int32_t run2stop;
kenjiArai 15:ae0413277bc6 149 Timer tmr0;
kenjiArai 13:1041596c416c 150
kenjiArai 13:1041596c416c 151 while(true) {
kenjiArai 13:1041596c416c 152 tmr0.reset();
kenjiArai 13:1041596c416c 153 tmr0.start();
kenjiArai 13:1041596c416c 154 fc.recipro_start_measure();
kenjiArai 13:1041596c416c 155 while (fc.recipro_check_trigger() == 0){
kenjiArai 14:ba6ea409ab05 156 ThisThread::sleep_for(1); // 1mS
kenjiArai 13:1041596c416c 157 run2stop = tmr0.read_ms();
kenjiArai 13:1041596c416c 158 if (run2stop >= RECIPRO_TIMEOUT){
kenjiArai 13:1041596c416c 159 break;
kenjiArai 13:1041596c416c 160 }
kenjiArai 13:1041596c416c 161 }
kenjiArai 13:1041596c416c 162 if (run2stop >= RECIPRO_TIMEOUT){
kenjiArai 13:1041596c416c 163 freq_recipro = 0;
kenjiArai 13:1041596c416c 164 } else {
kenjiArai 13:1041596c416c 165 interval_recipro = fc.recipro_read_data();
kenjiArai 13:1041596c416c 166 if (interval_recipro >= RECIPRO_OVRFLW){
kenjiArai 13:1041596c416c 167 // Measure less than 5KHz frequency
kenjiArai 13:1041596c416c 168 freq_recipro = CLOCK_BASE/(double)interval_recipro * 1000000;
kenjiArai 13:1041596c416c 169 recipro_overflow = 0;
kenjiArai 13:1041596c416c 170 } else {
kenjiArai 13:1041596c416c 171 freq_recipro = 0;
kenjiArai 13:1041596c416c 172 recipro_overflow = 1;
kenjiArai 13:1041596c416c 173 }
kenjiArai 13:1041596c416c 174 }
kenjiArai 13:1041596c416c 175 recipro_new_data_ready = 1;
kenjiArai 13:1041596c416c 176 disp_data.m_frq_recipro = freq_recipro;
kenjiArai 13:1041596c416c 177 disp_data.recipro_of = recipro_overflow;
kenjiArai 13:1041596c416c 178 run2stop = tmr0.read_ms();
kenjiArai 13:1041596c416c 179 if (run2stop > 1000){
kenjiArai 14:ba6ea409ab05 180 ThisThread::sleep_for(run2stop % 1000); // next interval
kenjiArai 13:1041596c416c 181 } else {
kenjiArai 13:1041596c416c 182 run2stop = 1000 - run2stop;
kenjiArai 13:1041596c416c 183 /* Wait until it is time to check again. */
kenjiArai 14:ba6ea409ab05 184 ThisThread::sleep_for(run2stop); // 1sec interval
kenjiArai 13:1041596c416c 185 }
kenjiArai 13:1041596c416c 186 }
kenjiArai 13:1041596c416c 187 }
kenjiArai 13:1041596c416c 188
kenjiArai 13:1041596c416c 189 // Constant temperature oven control
kenjiArai 13:1041596c416c 190 void temp_control(void const *args)
kenjiArai 13:1041596c416c 191 {
kenjiArai 13:1041596c416c 192 static double volt = 0.0;
kenjiArai 13:1041596c416c 193 static double tmp = 0;
kenjiArai 13:1041596c416c 194 static double pid_val = 0;
kenjiArai 13:1041596c416c 195 static uint32_t error_count = 3600;
kenjiArai 13:1041596c416c 196 static int32_t keep_1sec;
kenjiArai 13:1041596c416c 197
kenjiArai 15:ae0413277bc6 198 //**** Peltier temperature control
kenjiArai 15:ae0413277bc6 199 I2C i2cBus(PB_9,PB_8); // SDA, SCL
kenjiArai 15:ae0413277bc6 200 DRV8830 heater(i2cBus, (uint8_t)DRV8830ADDR_00); // H brige
kenjiArai 15:ae0413277bc6 201 PID pid(8.0f, 85.0f, 4.0f, 0.7f); // PID for oven
kenjiArai 15:ae0413277bc6 202 ADT7410 t(i2cBus, ADT7410ADDR_NN); // inside oven temp.
kenjiArai 15:ae0413277bc6 203 Timer tmr2;
kenjiArai 15:ae0413277bc6 204
kenjiArai 13:1041596c416c 205 t.set_config(OPERATION_MODE_CONT + RESOLUTION_16BIT);
kenjiArai 13:1041596c416c 206 pid.setInputLimits(0.0f, 5.0f);
kenjiArai 13:1041596c416c 207 pid.setOutputLimits(0.0f, 5.0f);
kenjiArai 13:1041596c416c 208 pid.setSetPoint(TRGT_TEMP/10.0f);
kenjiArai 13:1041596c416c 209 while(true) {
kenjiArai 13:1041596c416c 210 tmr2.reset();
kenjiArai 13:1041596c416c 211 tmr2.start();
kenjiArai 13:1041596c416c 212 tmp = t.read_temp();
kenjiArai 13:1041596c416c 213 disp_data.box_tmp = tmp;
kenjiArai 13:1041596c416c 214 //PRINTF("Temp=%f degC\r\n", tmp);
kenjiArai 13:1041596c416c 215 pid.setProcessValue(tmp / 10.0f);
kenjiArai 13:1041596c416c 216 pid_val = pid.compute();
kenjiArai 13:1041596c416c 217 volt = pid_val - (TRGT_TEMP/10.0f);
kenjiArai 13:1041596c416c 218 if (volt < -5.0f) {
kenjiArai 13:1041596c416c 219 volt = -5.0f;
kenjiArai 13:1041596c416c 220 } else if (volt > 5.0f) {
kenjiArai 13:1041596c416c 221 volt = 5.0f;
kenjiArai 13:1041596c416c 222 }
kenjiArai 13:1041596c416c 223 if ((volt == -5.0f) || (volt == 5.0f)){
kenjiArai 13:1041596c416c 224 if (--error_count == 0){
kenjiArai 13:1041596c416c 225 pid.reset();
kenjiArai 13:1041596c416c 226 error_count = 3600;
kenjiArai 13:1041596c416c 227 pid.setInputLimits(0.0f, 5.0f);
kenjiArai 13:1041596c416c 228 pid.setOutputLimits(0.0f, 5.0f);
kenjiArai 13:1041596c416c 229 pid.setSetPoint(TRGT_TEMP/10.0f);
kenjiArai 13:1041596c416c 230 }
kenjiArai 13:1041596c416c 231 } else {
kenjiArai 13:1041596c416c 232 error_count = 3600;
kenjiArai 13:1041596c416c 233 }
kenjiArai 13:1041596c416c 234 heater.set_voltage(-volt);
kenjiArai 13:1041596c416c 235 //PRINTF("Volt=%f V\r\n", volt);
kenjiArai 13:1041596c416c 236 if (heater.status()) {
kenjiArai 13:1041596c416c 237 heater.reset();
kenjiArai 13:1041596c416c 238 }
kenjiArai 13:1041596c416c 239 if ((tmp > (TRGT_TEMP + 0.2f)) || (tmp < (TRGT_TEMP - 0.4f))){
kenjiArai 13:1041596c416c 240 disp_data.temp_is_okay = 0;
kenjiArai 13:1041596c416c 241 } else {
kenjiArai 13:1041596c416c 242 disp_data.temp_is_okay = 1;
kenjiArai 13:1041596c416c 243 }
kenjiArai 13:1041596c416c 244 #if defined(HW_TEST_GO)
kenjiArai 13:1041596c416c 245 pc.printf("Volt=%+4.3f [V] , Oven Temp. %+6.3f [degC]", volt, tmp);
kenjiArai 13:1041596c416c 246 pc.printf(", Diff=%3.1f-x= %+6.3f \r\n", TRGT_TEMP, TRGT_TEMP - tmp);
kenjiArai 13:1041596c416c 247 #endif
kenjiArai 13:1041596c416c 248 keep_1sec = 1000 - keep_1sec;
kenjiArai 14:ba6ea409ab05 249 ThisThread::sleep_for(keep_1sec); // 1sec interval
kenjiArai 13:1041596c416c 250 }
kenjiArai 13:1041596c416c 251 }
kenjiArai 13:1041596c416c 252
kenjiArai 13:1041596c416c 253 void display_data(void const *args)
kenjiArai 13:1041596c416c 254 {
kenjiArai 13:1041596c416c 255 int32_t tim_remain;
kenjiArai 15:ae0413277bc6 256 Timer tmr1;
kenjiArai 13:1041596c416c 257
kenjiArai 13:1041596c416c 258 while(true){
kenjiArai 13:1041596c416c 259 tmr1.reset();
kenjiArai 13:1041596c416c 260 tmr1.start();
kenjiArai 13:1041596c416c 261 disp_data.gps_1pps_ave = fc.read_num_in_buffer();
kenjiArai 13:1041596c416c 262 disp_data.ready_1pps = check_gps_3d();
kenjiArai 13:1041596c416c 263 // User_IF
kenjiArai 13:1041596c416c 264 dispay_LCD_and_UART(&disp_data); // separate files uif.cpp & uif.h
kenjiArai 13:1041596c416c 265 /* Wait */
kenjiArai 13:1041596c416c 266 tim_remain = 1000 - tmr1.read_ms();
kenjiArai 14:ba6ea409ab05 267 ThisThread::sleep_for(tim_remain);
kenjiArai 13:1041596c416c 268 }
kenjiArai 13:1041596c416c 269 }
kenjiArai 13:1041596c416c 270
kenjiArai 13:1041596c416c 271 void receive_gps(void const *args)
kenjiArai 13:1041596c416c 272 {
kenjiArai 13:1041596c416c 273 gps_data_rcv(); // infinit loop -> never return
kenjiArai 13:1041596c416c 274 // separate files GPSrcvr.cpp & GPSrcvr.h
kenjiArai 13:1041596c416c 275 }
kenjiArai 13:1041596c416c 276
kenjiArai 13:1041596c416c 277 #if !defined(HW_TEST_GO) // Normal control mode
kenjiArai 13:1041596c416c 278
kenjiArai 13:1041596c416c 279 // Thread definition
kenjiArai 13:1041596c416c 280 osThreadDef(measure_freq, osPriorityNormal,1024);
kenjiArai 13:1041596c416c 281 osThreadDef(measure_freq_recipro, osPriorityNormal,1024);
kenjiArai 13:1041596c416c 282 osThreadDef(temp_control, osPriorityNormal,2048);
kenjiArai 13:1041596c416c 283 osThreadDef(receive_gps, osPriorityNormal,1024);
kenjiArai 13:1041596c416c 284 osThreadDef(display_data, osPriorityNormal,2048);
kenjiArai 13:1041596c416c 285
kenjiArai 13:1041596c416c 286 int main(){
kenjiArai 13:1041596c416c 287 disp_first_msg();
kenjiArai 14:ba6ea409ab05 288 ThisThread::sleep_for(1000); // 1sec
kenjiArai 13:1041596c416c 289 disp_wait_gps();
kenjiArai 13:1041596c416c 290 osThreadCreate(osThread(receive_gps), NULL);
kenjiArai 13:1041596c416c 291 PRINTF("\r\nStart GPS receiving!\r\n");
kenjiArai 13:1041596c416c 292 while (check_gps_is_okay() == false){;} // wait till "true"
kenjiArai 13:1041596c416c 293 PRINTF("GPS data is valid!\r\n");
kenjiArai 13:1041596c416c 294 fc.debug_printf_internal_data();
kenjiArai 13:1041596c416c 295 osThreadCreate(osThread(measure_freq), NULL);
kenjiArai 14:ba6ea409ab05 296 ThisThread::sleep_for(5); //wait
kenjiArai 13:1041596c416c 297 osThreadCreate(osThread(temp_control), NULL);
kenjiArai 14:ba6ea409ab05 298 ThisThread::sleep_for(8); //wait
kenjiArai 13:1041596c416c 299 osThreadCreate(osThread(measure_freq_recipro), NULL);
kenjiArai 14:ba6ea409ab05 300 ThisThread::sleep_for(3); //wait
kenjiArai 13:1041596c416c 301 osThreadCreate(osThread(display_data), NULL);
kenjiArai 14:ba6ea409ab05 302 ThisThread::sleep_for(10); //wait
kenjiArai 13:1041596c416c 303 select_input_div_1or10or20(0); // BNC (none presclaer)
kenjiArai 13:1041596c416c 304 while(true) {
kenjiArai 13:1041596c416c 305 /* Wait until it is time to check again. */
kenjiArai 14:ba6ea409ab05 306 ThisThread::sleep_for(60000); // 1min.
kenjiArai 13:1041596c416c 307 }
kenjiArai 13:1041596c416c 308 }
kenjiArai 13:1041596c416c 309
kenjiArai 13:1041596c416c 310 #else // Hardware Test mode
kenjiArai 13:1041596c416c 311
kenjiArai 13:1041596c416c 312 #include "hw_tst.h"
kenjiArai 13:1041596c416c 313 extern void hardware_test(void);
kenjiArai 13:1041596c416c 314
kenjiArai 13:1041596c416c 315 int main(){
kenjiArai 13:1041596c416c 316 hardware_test();
kenjiArai 13:1041596c416c 317 }
kenjiArai 13:1041596c416c 318
kenjiArai 13:1041596c416c 319 double read_temperature(uint8_t n)
kenjiArai 13:1041596c416c 320 {
kenjiArai 13:1041596c416c 321 if (n == 0){
kenjiArai 13:1041596c416c 322 t.set_config(OPERATION_MODE_CONT + RESOLUTION_16BIT);
kenjiArai 13:1041596c416c 323 return 0;
kenjiArai 13:1041596c416c 324 } else if (n == 1){
kenjiArai 13:1041596c416c 325 return t.read_temp();
kenjiArai 13:1041596c416c 326 }
kenjiArai 13:1041596c416c 327 return 0;
kenjiArai 13:1041596c416c 328 }
kenjiArai 13:1041596c416c 329
kenjiArai 13:1041596c416c 330 #endif // !defined(HW_TEST_GO)