Data logger: Sensors -> Barometer & temperature (BMP180), Humidity & temp. (RHT03), Sunshine (Cds): Display -> 20 chracters x 4 lines: Strage -> EEPROM (AT24C1024): Special functions -> Enter sleep mode to save current, reading the logging data via serial line
Dependencies: AT24C1024 BMP180 M41T62 RHT03 TextLCD WakeUp mbed
Fork of LPC1114_barometer_with_data_logging by
Please refer following Notebook.
http://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-data-logger/
main.cpp@9:ce80da60884a, 2014-06-13 (annotated)
- Committer:
- kenjiArai
- Date:
- Fri Jun 13 10:41:42 2014 +0000
- Revision:
- 9:ce80da60884a
- Parent:
- 8:f6aa5561f219
- Child:
- 10:398f62bb41f7
Barometer program / Step by step approach -> 3rd step,; Setup I2C I/F for BMP180(Baro) & AQM0802A(LCD)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 7:d3b49f1d9f76 | 1 | /* |
kenjiArai | 7:d3b49f1d9f76 | 2 | * mbed Application program for the mbed LPC1114FN28 |
kenjiArai | 7:d3b49f1d9f76 | 3 | * Test program -> Check LED & Switch function |
kenjiArai | 7:d3b49f1d9f76 | 4 | * |
kenjiArai | 7:d3b49f1d9f76 | 5 | * Copyright (c) 2014 Kenji Arai / JH1PJL |
kenjiArai | 7:d3b49f1d9f76 | 6 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 7:d3b49f1d9f76 | 7 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 7:d3b49f1d9f76 | 8 | * Created: June 13th, 2014 |
kenjiArai | 7:d3b49f1d9f76 | 9 | * Revised: June 13th, 2014 |
kenjiArai | 7:d3b49f1d9f76 | 10 | * |
kenjiArai | 7:d3b49f1d9f76 | 11 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 7:d3b49f1d9f76 | 12 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 7:d3b49f1d9f76 | 13 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 7:d3b49f1d9f76 | 14 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 7:d3b49f1d9f76 | 15 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 7:d3b49f1d9f76 | 16 | */ |
dan | 0:7dec7e9ac085 | 17 | #include "mbed.h" |
dan | 0:7dec7e9ac085 | 18 | |
kenjiArai | 9:ce80da60884a | 19 | #define DEBUG_L1 1 // 1=Debug, 0=Normal |
kenjiArai | 9:ce80da60884a | 20 | #define DEBUG_L2 1 // 1=Debug, 0=Normal |
kenjiArai | 8:f6aa5561f219 | 21 | |
kenjiArai | 8:f6aa5561f219 | 22 | #define VREF_VOLT 2.482 // TA76431F Vref real measued data |
kenjiArai | 8:f6aa5561f219 | 23 | #define R_FIX 9930 // 10K ohm <- real measued data |
kenjiArai | 8:f6aa5561f219 | 24 | #define VOL_OFFSET 4 // Offset data ,= real measured data |
kenjiArai | 8:f6aa5561f219 | 25 | #define CDS_TBL_SIZE 13 |
kenjiArai | 7:d3b49f1d9f76 | 26 | |
kenjiArai | 7:d3b49f1d9f76 | 27 | DigitalOut myled0(dp28); // LED for Debug |
kenjiArai | 7:d3b49f1d9f76 | 28 | DigitalOut myled1(dp14); // Indicate state transition |
kenjiArai | 8:f6aa5561f219 | 29 | DigitalOut analog_pwr(dp6); // VCC for analog interface (vol, cds and vref) |
kenjiArai | 8:f6aa5561f219 | 30 | DigitalOut vref_pwr(dp4); // VCC for Vref |
kenjiArai | 7:d3b49f1d9f76 | 31 | DigitalIn sw_chng(dp1,PullUp);// SW for select |
kenjiArai | 7:d3b49f1d9f76 | 32 | DigitalIn sw_mode(dp2,PullUp);// SW for Mode change |
kenjiArai | 8:f6aa5561f219 | 33 | AnalogIn cds(dp11); // Input / CDS data |
kenjiArai | 8:f6aa5561f219 | 34 | AnalogIn vref(dp9); // Input / Bandgap 2.5V |
kenjiArai | 8:f6aa5561f219 | 35 | AnalogIn vol(dp10); // Input / contrast volume |
kenjiArai | 8:f6aa5561f219 | 36 | Serial pc(dp16,dp15); |
kenjiArai | 8:f6aa5561f219 | 37 | |
kenjiArai | 8:f6aa5561f219 | 38 | typedef enum {CDS = 0, VREF, VOL} ADC_Select; |
kenjiArai | 8:f6aa5561f219 | 39 | |
kenjiArai | 9:ce80da60884a | 40 | // ADC |
kenjiArai | 8:f6aa5561f219 | 41 | float av_cds, av_vref, av_vol, cal_vcc; |
kenjiArai | 8:f6aa5561f219 | 42 | float r_cds, lux; |
kenjiArai | 8:f6aa5561f219 | 43 | uint32_t nor_vol; |
kenjiArai | 8:f6aa5561f219 | 44 | |
kenjiArai | 9:ce80da60884a | 45 | // LCD |
kenjiArai | 9:ce80da60884a | 46 | extern unsigned char contrast; |
kenjiArai | 9:ce80da60884a | 47 | char buf[16]; |
kenjiArai | 9:ce80da60884a | 48 | |
kenjiArai | 9:ce80da60884a | 49 | // Barometer |
kenjiArai | 9:ce80da60884a | 50 | extern uint32_t baro_pressure_ave_data; // Temperature /normalized |
kenjiArai | 9:ce80da60884a | 51 | extern int16_t baro_temp_ave_data; |
kenjiArai | 9:ce80da60884a | 52 | extern uint32_t baro_pres_data; // Barometer /normalized |
kenjiArai | 9:ce80da60884a | 53 | extern int16_t baro_temp_data; |
kenjiArai | 9:ce80da60884a | 54 | |
kenjiArai | 8:f6aa5561f219 | 55 | // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD. |
kenjiArai | 8:f6aa5561f219 | 56 | // Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm |
kenjiArai | 8:f6aa5561f219 | 57 | const float lux_cds[CDS_TBL_SIZE][2] = |
kenjiArai | 8:f6aa5561f219 | 58 | {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4}, |
kenjiArai | 8:f6aa5561f219 | 59 | {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}}; |
kenjiArai | 8:f6aa5561f219 | 60 | |
kenjiArai | 9:ce80da60884a | 61 | #if DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 62 | char *const imsg0 = "-->Control Reg."; |
kenjiArai | 9:ce80da60884a | 63 | char *const imsg1 = "-->Status Reg."; |
kenjiArai | 9:ce80da60884a | 64 | char *const imsg2 = "-->Data Reg."; |
kenjiArai | 9:ce80da60884a | 65 | char *const imsg3 = "-->Clock control Reg."; |
kenjiArai | 9:ce80da60884a | 66 | static char *const io_port_name0 = "PIO0_"; |
kenjiArai | 9:ce80da60884a | 67 | static char *const iomsg0 = "Func->select "; |
kenjiArai | 9:ce80da60884a | 68 | static char *const iomsg1 = "IO"; |
kenjiArai | 9:ce80da60884a | 69 | static char *const iomsg2 = "Reserved"; |
kenjiArai | 9:ce80da60884a | 70 | static char *const iomsg3 = "Std/F-md I2C"; |
kenjiArai | 9:ce80da60884a | 71 | #endif // DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 72 | |
kenjiArai | 9:ce80da60884a | 73 | // Functions |
kenjiArai | 9:ce80da60884a | 74 | // Barometer |
kenjiArai | 9:ce80da60884a | 75 | void baro_st_conv_temp( void ); // Start Conversion |
kenjiArai | 9:ce80da60884a | 76 | void baro_st_conv_press( void ); // Start Conversion |
kenjiArai | 9:ce80da60884a | 77 | void baro_rd_temp( void ); // Receive Press. & Temp. |
kenjiArai | 9:ce80da60884a | 78 | void baro_rd_press( void ); // Receive Press. & Temp. |
kenjiArai | 9:ce80da60884a | 79 | void baro_rd_coefficient( void ); // Receive Coefficient data |
kenjiArai | 9:ce80da60884a | 80 | void baro_rd_id( void ); // Receive Chip ID |
kenjiArai | 9:ce80da60884a | 81 | void cal_pressure( void ); // Calculate Pressure |
kenjiArai | 9:ce80da60884a | 82 | // LCD |
kenjiArai | 9:ce80da60884a | 83 | void lcd_init(); // Initialize LCD |
kenjiArai | 9:ce80da60884a | 84 | void lcd_printStr(const char *s); // Put strings |
kenjiArai | 9:ce80da60884a | 85 | void lcd_setCursor(unsigned char x,unsigned char y); // Set cursor position |
kenjiArai | 9:ce80da60884a | 86 | void setContrast(unsigned char c); // Set contrast |
kenjiArai | 9:ce80da60884a | 87 | |
kenjiArai | 9:ce80da60884a | 88 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 9:ce80da60884a | 89 | // Control Program |
kenjiArai | 9:ce80da60884a | 90 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 9:ce80da60884a | 91 | #if DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 92 | // Put \r\n |
kenjiArai | 9:ce80da60884a | 93 | void put_rn ( void ){ |
kenjiArai | 9:ce80da60884a | 94 | pc.putc('\r'); |
kenjiArai | 9:ce80da60884a | 95 | pc.putc('\n'); |
kenjiArai | 9:ce80da60884a | 96 | } |
kenjiArai | 9:ce80da60884a | 97 | |
kenjiArai | 9:ce80da60884a | 98 | // Put \r |
kenjiArai | 9:ce80da60884a | 99 | void put_r ( void ){ |
kenjiArai | 9:ce80da60884a | 100 | pc.putc('\r'); |
kenjiArai | 9:ce80da60884a | 101 | } |
kenjiArai | 9:ce80da60884a | 102 | |
kenjiArai | 9:ce80da60884a | 103 | // Put ", " |
kenjiArai | 9:ce80da60884a | 104 | void put_lin ( void ){ |
kenjiArai | 9:ce80da60884a | 105 | pc.printf(", "); |
kenjiArai | 9:ce80da60884a | 106 | } |
kenjiArai | 9:ce80da60884a | 107 | |
kenjiArai | 9:ce80da60884a | 108 | void debug_port_check( void ){ |
kenjiArai | 9:ce80da60884a | 109 | uint32_t r0,r1,r2,r3,r4,r5,r6,r7; |
kenjiArai | 9:ce80da60884a | 110 | // Show registers |
kenjiArai | 9:ce80da60884a | 111 | put_rn(); |
kenjiArai | 9:ce80da60884a | 112 | pc.printf( "------- Show Registers -------" ); |
kenjiArai | 9:ce80da60884a | 113 | put_rn(); |
kenjiArai | 9:ce80da60884a | 114 | pc.printf( "**** P0_4,P0_5 Port usage ****" ); |
kenjiArai | 9:ce80da60884a | 115 | put_rn(); |
kenjiArai | 9:ce80da60884a | 116 | // P0_4 |
kenjiArai | 9:ce80da60884a | 117 | r0 = LPC_IOCON->PIO0_4; |
kenjiArai | 9:ce80da60884a | 118 | pc.printf( "%s4(dp27)",io_port_name0 ); |
kenjiArai | 9:ce80da60884a | 119 | pc.printf( " 0x%08x", r0 ); |
kenjiArai | 9:ce80da60884a | 120 | put_rn(); |
kenjiArai | 9:ce80da60884a | 121 | pc.printf( iomsg0 ); |
kenjiArai | 9:ce80da60884a | 122 | switch ( r0 & 0x7 ){ |
kenjiArai | 9:ce80da60884a | 123 | case 0: pc.printf( iomsg1 ); break; |
kenjiArai | 9:ce80da60884a | 124 | case 1: pc.printf("SCL"); break; |
kenjiArai | 9:ce80da60884a | 125 | } |
kenjiArai | 9:ce80da60884a | 126 | put_lin(); |
kenjiArai | 9:ce80da60884a | 127 | switch ( ( r0 >> 8 ) & 0x3 ){ |
kenjiArai | 9:ce80da60884a | 128 | case 0: pc.printf( iomsg3 ); break; |
kenjiArai | 9:ce80da60884a | 129 | case 1: pc.printf( iomsg1); break; |
kenjiArai | 9:ce80da60884a | 130 | case 2: pc.printf("Fast md"); break; |
kenjiArai | 9:ce80da60884a | 131 | case 3: pc.printf( iomsg2 ); break; |
kenjiArai | 9:ce80da60884a | 132 | } |
kenjiArai | 9:ce80da60884a | 133 | put_rn(); |
kenjiArai | 9:ce80da60884a | 134 | // P0_5 |
kenjiArai | 9:ce80da60884a | 135 | r0 = LPC_IOCON->PIO0_5; |
kenjiArai | 9:ce80da60884a | 136 | pc.printf( "%s5(dp5)",io_port_name0 ); |
kenjiArai | 9:ce80da60884a | 137 | pc.printf( " 0x%08x", r0 ); |
kenjiArai | 9:ce80da60884a | 138 | put_rn(); |
kenjiArai | 9:ce80da60884a | 139 | pc.printf( iomsg0 ); |
kenjiArai | 9:ce80da60884a | 140 | switch ( r0 & 0x7 ){ |
kenjiArai | 9:ce80da60884a | 141 | case 0: pc.printf( iomsg1 ); break; |
kenjiArai | 9:ce80da60884a | 142 | case 1: pc.printf("SDA"); break; |
kenjiArai | 9:ce80da60884a | 143 | } |
kenjiArai | 9:ce80da60884a | 144 | put_lin(); |
kenjiArai | 9:ce80da60884a | 145 | switch ( ( r0 >> 8 ) & 0x3 ){ |
kenjiArai | 9:ce80da60884a | 146 | case 0: pc.printf( iomsg3 ); break; |
kenjiArai | 9:ce80da60884a | 147 | case 1: pc.printf( iomsg1 ); break; |
kenjiArai | 9:ce80da60884a | 148 | case 2: pc.printf("Fast md"); break; |
kenjiArai | 9:ce80da60884a | 149 | case 3: pc.printf( iomsg2 ); break; |
kenjiArai | 9:ce80da60884a | 150 | } |
kenjiArai | 9:ce80da60884a | 151 | put_rn(); |
kenjiArai | 9:ce80da60884a | 152 | // I2C Control register |
kenjiArai | 9:ce80da60884a | 153 | r0 = LPC_I2C->CONSET; |
kenjiArai | 9:ce80da60884a | 154 | r1 = LPC_I2C->STAT; |
kenjiArai | 9:ce80da60884a | 155 | r2 = LPC_I2C->DAT; |
kenjiArai | 9:ce80da60884a | 156 | r3 = LPC_I2C->SCLH; |
kenjiArai | 9:ce80da60884a | 157 | r4 = LPC_I2C->SCLL; |
kenjiArai | 9:ce80da60884a | 158 | r5 = LPC_I2C->CONCLR; |
kenjiArai | 9:ce80da60884a | 159 | r6 = LPC_I2C->MMCTRL; |
kenjiArai | 9:ce80da60884a | 160 | r7 = LPC_I2C->DATA_BUFFER; |
kenjiArai | 9:ce80da60884a | 161 | pc.printf( "**** Show I2C Registers ****" ); |
kenjiArai | 9:ce80da60884a | 162 | put_rn(); |
kenjiArai | 9:ce80da60884a | 163 | pc.printf( "CONSET" ); |
kenjiArai | 9:ce80da60884a | 164 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 165 | pc.printf( " 0x%08x", r0 ); |
kenjiArai | 9:ce80da60884a | 166 | put_rn(); |
kenjiArai | 9:ce80da60884a | 167 | pc.printf( "STAT" ); |
kenjiArai | 9:ce80da60884a | 168 | pc.printf( imsg1 ); |
kenjiArai | 9:ce80da60884a | 169 | pc.printf( " 0x%08x", r1 ); |
kenjiArai | 9:ce80da60884a | 170 | put_rn(); |
kenjiArai | 9:ce80da60884a | 171 | pc.printf( "DAT" ); |
kenjiArai | 9:ce80da60884a | 172 | pc.printf( imsg2 ); |
kenjiArai | 9:ce80da60884a | 173 | pc.printf( " 0x%08x", r2 ); |
kenjiArai | 9:ce80da60884a | 174 | put_rn(); |
kenjiArai | 9:ce80da60884a | 175 | pc.printf( "ADR0--Not support" ); |
kenjiArai | 9:ce80da60884a | 176 | put_rn(); |
kenjiArai | 9:ce80da60884a | 177 | pc.printf( "SCLH" ); |
kenjiArai | 9:ce80da60884a | 178 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 179 | pc.printf( " 0x%08x", r3 ); |
kenjiArai | 9:ce80da60884a | 180 | put_rn(); |
kenjiArai | 9:ce80da60884a | 181 | pc.printf( "SCLL" ); |
kenjiArai | 9:ce80da60884a | 182 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 183 | pc.printf( " 0x%08x", r4 ); |
kenjiArai | 9:ce80da60884a | 184 | put_rn(); |
kenjiArai | 9:ce80da60884a | 185 | pc.printf( "CONCLR" ); |
kenjiArai | 9:ce80da60884a | 186 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 187 | pc.printf( " 0x%08x", r5 ); |
kenjiArai | 9:ce80da60884a | 188 | put_rn(); |
kenjiArai | 9:ce80da60884a | 189 | pc.printf( "MMCTRL" ); |
kenjiArai | 9:ce80da60884a | 190 | pc.printf( imsg0 ); |
kenjiArai | 9:ce80da60884a | 191 | pc.printf( " 0x%08x", r6 ); |
kenjiArai | 9:ce80da60884a | 192 | put_rn(); |
kenjiArai | 9:ce80da60884a | 193 | pc.printf( "ADR1,2,3--Not support" ); |
kenjiArai | 9:ce80da60884a | 194 | put_rn(); |
kenjiArai | 9:ce80da60884a | 195 | pc.printf( "DATA_BUFFER" ); |
kenjiArai | 9:ce80da60884a | 196 | pc.printf( imsg3 ); |
kenjiArai | 9:ce80da60884a | 197 | pc.printf( " 0x%08x", r7 ); |
kenjiArai | 9:ce80da60884a | 198 | put_rn(); |
kenjiArai | 9:ce80da60884a | 199 | pc.printf( "MASK0,1,2,3--Not support" ); |
kenjiArai | 9:ce80da60884a | 200 | put_rn(); |
kenjiArai | 9:ce80da60884a | 201 | } |
kenjiArai | 9:ce80da60884a | 202 | #endif // DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 203 | |
kenjiArai | 8:f6aa5561f219 | 204 | void adc_normalize( ADC_Select n ){ |
kenjiArai | 8:f6aa5561f219 | 205 | int i; |
kenjiArai | 8:f6aa5561f219 | 206 | float x1,y1,dx; |
kenjiArai | 8:f6aa5561f219 | 207 | |
kenjiArai | 8:f6aa5561f219 | 208 | switch (n){ |
kenjiArai | 8:f6aa5561f219 | 209 | case CDS: |
kenjiArai | 8:f6aa5561f219 | 210 | // v_adc = Rfix / (Rcds + Rfix) |
kenjiArai | 8:f6aa5561f219 | 211 | // Rcds = ( Rfix / v_adc ) - Rfix |
kenjiArai | 8:f6aa5561f219 | 212 | r_cds = (R_FIX / av_cds) - R_FIX; |
kenjiArai | 8:f6aa5561f219 | 213 | // CDS resistance to Lux conversion using convertion table (luc_cds[][]) |
kenjiArai | 8:f6aa5561f219 | 214 | // with Linear interpolation method |
kenjiArai | 8:f6aa5561f219 | 215 | for (i =0; i < CDS_TBL_SIZE; i++){ |
kenjiArai | 8:f6aa5561f219 | 216 | if ( r_cds <= lux_cds[i][0]){ |
kenjiArai | 8:f6aa5561f219 | 217 | break; |
kenjiArai | 8:f6aa5561f219 | 218 | } |
kenjiArai | 8:f6aa5561f219 | 219 | } |
kenjiArai | 9:ce80da60884a | 220 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 221 | pc.printf( "i=%d, ", i ); |
kenjiArai | 9:ce80da60884a | 222 | #endif // DEBUG_L1 |
kenjiArai | 8:f6aa5561f219 | 223 | if (i == 0){ |
kenjiArai | 8:f6aa5561f219 | 224 | lux = lux_cds[0][1]; |
kenjiArai | 9:ce80da60884a | 225 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 226 | pc.printf( "range over!\r\n" ); |
kenjiArai | 9:ce80da60884a | 227 | #endif // DEBUG_L1 |
kenjiArai | 8:f6aa5561f219 | 228 | } else if ( i == CDS_TBL_SIZE ){ |
kenjiArai | 9:ce80da60884a | 229 | if ( r_cds <= lux_cds[i][0] ){ |
kenjiArai | 8:f6aa5561f219 | 230 | lux = lux_cds[i-1][1]; |
kenjiArai | 8:f6aa5561f219 | 231 | } |
kenjiArai | 8:f6aa5561f219 | 232 | } else { |
kenjiArai | 9:ce80da60884a | 233 | if ( i == CDS_TBL_SIZE ){ |
kenjiArai | 9:ce80da60884a | 234 | if ( r_cds <= lux_cds[i][0] ){ |
kenjiArai | 9:ce80da60884a | 235 | lux = lux_cds[i-1][1]; |
kenjiArai | 9:ce80da60884a | 236 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 237 | pc.printf("range over!\r\n"); |
kenjiArai | 9:ce80da60884a | 238 | #endif // DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 239 | break; |
kenjiArai | 9:ce80da60884a | 240 | } |
kenjiArai | 9:ce80da60884a | 241 | } |
kenjiArai | 8:f6aa5561f219 | 242 | y1 = lux_cds[i-1][1] - lux_cds[i][1]; |
kenjiArai | 8:f6aa5561f219 | 243 | x1 = lux_cds[i][0] - lux_cds[i-1][0]; |
kenjiArai | 8:f6aa5561f219 | 244 | dx = r_cds - lux_cds[i-1][0]; |
kenjiArai | 8:f6aa5561f219 | 245 | lux = lux_cds[i-1][1] - ((dx/x1) * y1); |
kenjiArai | 9:ce80da60884a | 246 | #if DEBUG_L1 |
kenjiArai | 9:ce80da60884a | 247 | pc.printf( "y1:%f, x1:%f, dx:%f, lux_tbl:%f\r\n", y1, x1, dx, lux_cds[i-1][1] ); |
kenjiArai | 9:ce80da60884a | 248 | #endif // DEBUG_L1 |
kenjiArai | 8:f6aa5561f219 | 249 | } |
kenjiArai | 8:f6aa5561f219 | 250 | break; |
kenjiArai | 8:f6aa5561f219 | 251 | case VREF: |
kenjiArai | 8:f6aa5561f219 | 252 | // vref = VREF_VOLT / VCC -> VCC = VREF_VOLT / vref |
kenjiArai | 8:f6aa5561f219 | 253 | cal_vcc = VREF_VOLT / vref; |
kenjiArai | 8:f6aa5561f219 | 254 | break; |
kenjiArai | 8:f6aa5561f219 | 255 | case VOL: |
kenjiArai | 8:f6aa5561f219 | 256 | // Vol center = 1.00 (actual 100) |
kenjiArai | 8:f6aa5561f219 | 257 | nor_vol = (uint32_t)(av_vol * 200) + VOL_OFFSET; |
kenjiArai | 8:f6aa5561f219 | 258 | break; |
kenjiArai | 8:f6aa5561f219 | 259 | } |
kenjiArai | 8:f6aa5561f219 | 260 | } |
kenjiArai | 8:f6aa5561f219 | 261 | |
kenjiArai | 8:f6aa5561f219 | 262 | void adc_all_read( void){ |
kenjiArai | 8:f6aa5561f219 | 263 | av_cds = av_cds *0.5 + cds.read() * 0.5; |
kenjiArai | 8:f6aa5561f219 | 264 | av_vref = av_vref *0.9 + vref.read() * 0.1; |
kenjiArai | 8:f6aa5561f219 | 265 | av_vol = av_vol *0.2 + vol.read() * 0.8; |
kenjiArai | 8:f6aa5561f219 | 266 | } |
kenjiArai | 8:f6aa5561f219 | 267 | |
kenjiArai | 8:f6aa5561f219 | 268 | void adc_init( void){ |
kenjiArai | 8:f6aa5561f219 | 269 | analog_pwr = 1; |
kenjiArai | 8:f6aa5561f219 | 270 | vref_pwr = 1; |
kenjiArai | 8:f6aa5561f219 | 271 | wait(0.2); |
kenjiArai | 8:f6aa5561f219 | 272 | av_cds = cds.read(); |
kenjiArai | 8:f6aa5561f219 | 273 | av_vref = vref.read(); |
kenjiArai | 8:f6aa5561f219 | 274 | av_vol = vol.read(); |
kenjiArai | 8:f6aa5561f219 | 275 | wait(0.1); |
kenjiArai | 8:f6aa5561f219 | 276 | adc_all_read(); |
kenjiArai | 8:f6aa5561f219 | 277 | wait(0.1); |
kenjiArai | 8:f6aa5561f219 | 278 | adc_all_read(); |
kenjiArai | 8:f6aa5561f219 | 279 | analog_pwr = 0; |
kenjiArai | 8:f6aa5561f219 | 280 | vref_pwr = 0; |
kenjiArai | 8:f6aa5561f219 | 281 | } |
dan | 0:7dec7e9ac085 | 282 | |
dan | 0:7dec7e9ac085 | 283 | int main() { |
kenjiArai | 9:ce80da60884a | 284 | uint16_t dt; |
kenjiArai | 9:ce80da60884a | 285 | |
kenjiArai | 8:f6aa5561f219 | 286 | pc.baud(9600); |
kenjiArai | 9:ce80da60884a | 287 | pc.printf( "\r\nmbed LPC1114FN28 test program by JH1PJL created on "__DATE__"\r\n" ); |
kenjiArai | 9:ce80da60884a | 288 | // Initialize ADC |
kenjiArai | 9:ce80da60884a | 289 | adc_init(); |
kenjiArai | 9:ce80da60884a | 290 | // Initialize LCD |
kenjiArai | 9:ce80da60884a | 291 | lcd_init(); |
kenjiArai | 9:ce80da60884a | 292 | contrast = 25; |
kenjiArai | 9:ce80da60884a | 293 | setContrast(contrast); |
kenjiArai | 9:ce80da60884a | 294 | //Initial screen shot |
kenjiArai | 9:ce80da60884a | 295 | lcd_setCursor(0, 0); |
kenjiArai | 9:ce80da60884a | 296 | // 12345678 |
kenjiArai | 9:ce80da60884a | 297 | lcd_printStr("LPC1114F"); |
kenjiArai | 9:ce80da60884a | 298 | lcd_setCursor(0, 1); |
kenjiArai | 9:ce80da60884a | 299 | // 12345678 |
kenjiArai | 9:ce80da60884a | 300 | lcd_printStr(" JH1PJL "); |
kenjiArai | 9:ce80da60884a | 301 | // Read BMP180 data / only once |
kenjiArai | 9:ce80da60884a | 302 | baro_rd_id(); |
kenjiArai | 9:ce80da60884a | 303 | baro_rd_coefficient(); |
kenjiArai | 9:ce80da60884a | 304 | wait(5.0); |
kenjiArai | 7:d3b49f1d9f76 | 305 | while(1) { |
kenjiArai | 9:ce80da60884a | 306 | // Power on / Analog sensor |
kenjiArai | 8:f6aa5561f219 | 307 | analog_pwr = 1; |
kenjiArai | 8:f6aa5561f219 | 308 | vref_pwr = 1; |
kenjiArai | 8:f6aa5561f219 | 309 | wait(0.2); |
kenjiArai | 8:f6aa5561f219 | 310 | adc_all_read(); |
kenjiArai | 9:ce80da60884a | 311 | // Power off / Analog sensor |
kenjiArai | 9:ce80da60884a | 312 | analog_pwr = 0; |
kenjiArai | 9:ce80da60884a | 313 | //vref_pwr = 0; |
kenjiArai | 9:ce80da60884a | 314 | // Normalize |
kenjiArai | 8:f6aa5561f219 | 315 | adc_normalize( CDS ); |
kenjiArai | 8:f6aa5561f219 | 316 | adc_normalize( VREF ); |
kenjiArai | 9:ce80da60884a | 317 | adc_normalize( VOL ); |
kenjiArai | 8:f6aa5561f219 | 318 | myled0 = 1; |
kenjiArai | 8:f6aa5561f219 | 319 | if (sw_chng == 1){ // SW Off |
kenjiArai | 9:ce80da60884a | 320 | pc.printf( "\r\nCds:%.0fohm -> %.1flux, Vcc:%.3fV, Vol:%d\r\n", |
kenjiArai | 9:ce80da60884a | 321 | r_cds, lux, cal_vcc, nor_vol ); |
kenjiArai | 8:f6aa5561f219 | 322 | } else { // SW On |
kenjiArai | 9:ce80da60884a | 323 | pc.printf( "\r\nCds:%f, Vref:%f, Vol:%f\r\n", av_cds, av_vref, av_vol ); |
kenjiArai | 7:d3b49f1d9f76 | 324 | } |
kenjiArai | 8:f6aa5561f219 | 325 | myled0 = 0; |
kenjiArai | 9:ce80da60884a | 326 | lcd_setCursor(0, 0); // 1st line top |
kenjiArai | 9:ce80da60884a | 327 | dt = (uint16_t)(lux * 10); |
kenjiArai | 9:ce80da60884a | 328 | //sprintf( buf,"l: %4.1f ", lux ); |
kenjiArai | 9:ce80da60884a | 329 | sprintf( buf,"L:%4d.%01d ", dt / 10, dt % 10 ); |
kenjiArai | 9:ce80da60884a | 330 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 331 | lcd_setCursor(0, 1); // 2nd line top |
kenjiArai | 9:ce80da60884a | 332 | sprintf( buf,"V: %1.3f ", cal_vcc ); |
kenjiArai | 9:ce80da60884a | 333 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 334 | wait(4.0); |
kenjiArai | 9:ce80da60884a | 335 | baro_st_conv_temp(); // start temprerature measurment |
kenjiArai | 9:ce80da60884a | 336 | wait(0.25); // wait for convertion |
kenjiArai | 9:ce80da60884a | 337 | baro_rd_temp(); // read it |
kenjiArai | 9:ce80da60884a | 338 | baro_st_conv_press(); // start pressure measurement |
kenjiArai | 9:ce80da60884a | 339 | wait(0.5); // wait for convertion |
kenjiArai | 9:ce80da60884a | 340 | baro_rd_press(); // read it |
kenjiArai | 9:ce80da60884a | 341 | cal_pressure(); // Calculate baro & temp. |
kenjiArai | 9:ce80da60884a | 342 | lcd_setCursor(0, 0); // 1st line top |
kenjiArai | 9:ce80da60884a | 343 | sprintf( buf,"P:%4d.%01d ", baro_pres_data / 100, ( baro_pres_data % 100 ) /10 ); |
kenjiArai | 9:ce80da60884a | 344 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 345 | lcd_setCursor(0, 1); // 2nd line top |
kenjiArai | 9:ce80da60884a | 346 | if (sw_chng == 0){ // SW ON |
kenjiArai | 9:ce80da60884a | 347 | baro_temp_data = -100; // Dummy -10.0 degC -> Test printf() minus display |
kenjiArai | 9:ce80da60884a | 348 | } |
kenjiArai | 9:ce80da60884a | 349 | sprintf( buf,"T: %\+-d.%01d ", baro_temp_data / 10, baro_temp_data% 10 ); |
kenjiArai | 9:ce80da60884a | 350 | lcd_printStr(buf); |
kenjiArai | 9:ce80da60884a | 351 | myled1 = 1; |
kenjiArai | 9:ce80da60884a | 352 | pc.printf( "Pres:%4d.%01dhPa, Temp:%\+-d.%01ddegC\r\n", |
kenjiArai | 9:ce80da60884a | 353 | baro_pres_data / 100, ( baro_pres_data % 100 ) /10, |
kenjiArai | 9:ce80da60884a | 354 | baro_temp_data / 10, baro_temp_data% 10 ); |
kenjiArai | 8:f6aa5561f219 | 355 | myled1 = 0; |
kenjiArai | 9:ce80da60884a | 356 | wait(3.0); |
kenjiArai | 9:ce80da60884a | 357 | #if DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 358 | debug_port_check(); |
kenjiArai | 9:ce80da60884a | 359 | #endif // DEBUG_L2 |
kenjiArai | 9:ce80da60884a | 360 | wait(1.0); |
kenjiArai | 7:d3b49f1d9f76 | 361 | } |
dan | 0:7dec7e9ac085 | 362 | } |
kenjiArai | 8:f6aa5561f219 | 363 |