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 Kenji Arai

Please refer following Notebook.
http://mbed.org/users/kenjiArai/notebook/mbed-lpc1114fn28-data-logger/

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?

UserRevisionLine numberNew 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