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 07:45:15 2014 +0000
Revision:
8:f6aa5561f219
Parent:
7:d3b49f1d9f76
Child:
9:ce80da60884a
Barometer program / Step by step approach 2nd step,; Check Analog input data (Cds, Vref and Volume)

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 8:f6aa5561f219 19 #define DEBUG 1 // 1=Debug, 0=Normal
kenjiArai 8:f6aa5561f219 20
kenjiArai 8:f6aa5561f219 21 #define VREF_VOLT 2.482 // TA76431F Vref real measued data
kenjiArai 8:f6aa5561f219 22 #define R_FIX 9930 // 10K ohm <- real measued data
kenjiArai 8:f6aa5561f219 23 #define VOL_OFFSET 4 // Offset data ,= real measured data
kenjiArai 8:f6aa5561f219 24 #define CDS_TBL_SIZE 13
kenjiArai 7:d3b49f1d9f76 25
kenjiArai 7:d3b49f1d9f76 26 DigitalOut myled0(dp28); // LED for Debug
kenjiArai 7:d3b49f1d9f76 27 DigitalOut myled1(dp14); // Indicate state transition
kenjiArai 8:f6aa5561f219 28 DigitalOut analog_pwr(dp6); // VCC for analog interface (vol, cds and vref)
kenjiArai 8:f6aa5561f219 29 DigitalOut vref_pwr(dp4); // VCC for Vref
kenjiArai 7:d3b49f1d9f76 30 DigitalIn sw_chng(dp1,PullUp);// SW for select
kenjiArai 7:d3b49f1d9f76 31 DigitalIn sw_mode(dp2,PullUp);// SW for Mode change
kenjiArai 8:f6aa5561f219 32 AnalogIn cds(dp11); // Input / CDS data
kenjiArai 8:f6aa5561f219 33 AnalogIn vref(dp9); // Input / Bandgap 2.5V
kenjiArai 8:f6aa5561f219 34 AnalogIn vol(dp10); // Input / contrast volume
kenjiArai 8:f6aa5561f219 35 Serial pc(dp16,dp15);
kenjiArai 8:f6aa5561f219 36
kenjiArai 8:f6aa5561f219 37 typedef enum {CDS = 0, VREF, VOL} ADC_Select;
kenjiArai 8:f6aa5561f219 38
kenjiArai 8:f6aa5561f219 39 float av_cds, av_vref, av_vol, cal_vcc;
kenjiArai 8:f6aa5561f219 40 float r_cds, lux;
kenjiArai 8:f6aa5561f219 41 uint32_t nor_vol;
kenjiArai 8:f6aa5561f219 42
kenjiArai 8:f6aa5561f219 43 // Cds GL5528 (Dark Resistance 1 Mohm type) SENBA OPTICAL & ELECTRONIC CO.,LTD.
kenjiArai 8:f6aa5561f219 44 // Table value referrence: http://homepage3.nifty.com/skomo/f35/hp35_20.htm
kenjiArai 8:f6aa5561f219 45 const float lux_cds[CDS_TBL_SIZE][2] =
kenjiArai 8:f6aa5561f219 46 {{50,21194},{100,8356},{200,3294},{400,1299},{800,512},{1600,202},{3200,79.6},{6400,31.4},
kenjiArai 8:f6aa5561f219 47 {12800,12.4},{25600,4.88},{51200,1.92},{102400,0.758},{409600,0.118}};
kenjiArai 8:f6aa5561f219 48
kenjiArai 8:f6aa5561f219 49 void adc_normalize( ADC_Select n ){
kenjiArai 8:f6aa5561f219 50 int i;
kenjiArai 8:f6aa5561f219 51 float x1,y1,dx;
kenjiArai 8:f6aa5561f219 52
kenjiArai 8:f6aa5561f219 53 switch (n){
kenjiArai 8:f6aa5561f219 54 case CDS:
kenjiArai 8:f6aa5561f219 55 // v_adc = Rfix / (Rcds + Rfix)
kenjiArai 8:f6aa5561f219 56 // Rcds = ( Rfix / v_adc ) - Rfix
kenjiArai 8:f6aa5561f219 57 r_cds = (R_FIX / av_cds) - R_FIX;
kenjiArai 8:f6aa5561f219 58 // CDS resistance to Lux conversion using convertion table (luc_cds[][])
kenjiArai 8:f6aa5561f219 59 // with Linear interpolation method
kenjiArai 8:f6aa5561f219 60 for (i =0; i < CDS_TBL_SIZE; i++){
kenjiArai 8:f6aa5561f219 61 if ( r_cds <= lux_cds[i][0]){
kenjiArai 8:f6aa5561f219 62 break;
kenjiArai 8:f6aa5561f219 63 }
kenjiArai 8:f6aa5561f219 64 }
kenjiArai 8:f6aa5561f219 65 #if DEBUG
kenjiArai 8:f6aa5561f219 66 pc.printf("i=%d, ", i);
kenjiArai 8:f6aa5561f219 67 #endif
kenjiArai 8:f6aa5561f219 68 if (i == 0){
kenjiArai 8:f6aa5561f219 69 lux = lux_cds[0][1];
kenjiArai 8:f6aa5561f219 70 } else if ( i == CDS_TBL_SIZE ){
kenjiArai 8:f6aa5561f219 71 if ( r_cds <= lux_cds[i][0]){
kenjiArai 8:f6aa5561f219 72 lux = lux_cds[i-1][1];
kenjiArai 8:f6aa5561f219 73 }
kenjiArai 8:f6aa5561f219 74 } else {
kenjiArai 8:f6aa5561f219 75 y1 = lux_cds[i-1][1] - lux_cds[i][1];
kenjiArai 8:f6aa5561f219 76 x1 = lux_cds[i][0] - lux_cds[i-1][0];
kenjiArai 8:f6aa5561f219 77 dx = r_cds - lux_cds[i-1][0];
kenjiArai 8:f6aa5561f219 78 lux = lux_cds[i-1][1] - ((dx/x1) * y1);
kenjiArai 8:f6aa5561f219 79 #if DEBUG
kenjiArai 8:f6aa5561f219 80 pc.printf("y1:%f, x1:%f, dx:%f, lux_tbl:%f\r\n", y1, x1, dx, lux_cds[i-1][1]);
kenjiArai 8:f6aa5561f219 81 #endif
kenjiArai 8:f6aa5561f219 82 }
kenjiArai 8:f6aa5561f219 83 break;
kenjiArai 8:f6aa5561f219 84 case VREF:
kenjiArai 8:f6aa5561f219 85 // vref = VREF_VOLT / VCC -> VCC = VREF_VOLT / vref
kenjiArai 8:f6aa5561f219 86 cal_vcc = VREF_VOLT / vref;
kenjiArai 8:f6aa5561f219 87 break;
kenjiArai 8:f6aa5561f219 88 case VOL:
kenjiArai 8:f6aa5561f219 89 // Vol center = 1.00 (actual 100)
kenjiArai 8:f6aa5561f219 90 nor_vol = (uint32_t)(av_vol * 200) + VOL_OFFSET;
kenjiArai 8:f6aa5561f219 91 break;
kenjiArai 8:f6aa5561f219 92 }
kenjiArai 8:f6aa5561f219 93 }
kenjiArai 8:f6aa5561f219 94
kenjiArai 8:f6aa5561f219 95 void adc_all_read( void){
kenjiArai 8:f6aa5561f219 96 av_cds = av_cds *0.5 + cds.read() * 0.5;
kenjiArai 8:f6aa5561f219 97 av_vref = av_vref *0.9 + vref.read() * 0.1;
kenjiArai 8:f6aa5561f219 98 av_vol = av_vol *0.2 + vol.read() * 0.8;
kenjiArai 8:f6aa5561f219 99 }
kenjiArai 8:f6aa5561f219 100
kenjiArai 8:f6aa5561f219 101 void adc_init( void){
kenjiArai 8:f6aa5561f219 102 analog_pwr = 1;
kenjiArai 8:f6aa5561f219 103 vref_pwr = 1;
kenjiArai 8:f6aa5561f219 104 wait(0.2);
kenjiArai 8:f6aa5561f219 105 av_cds = cds.read();
kenjiArai 8:f6aa5561f219 106 av_vref = vref.read();
kenjiArai 8:f6aa5561f219 107 av_vol = vol.read();
kenjiArai 8:f6aa5561f219 108 wait(0.1);
kenjiArai 8:f6aa5561f219 109 adc_all_read();
kenjiArai 8:f6aa5561f219 110 wait(0.1);
kenjiArai 8:f6aa5561f219 111 adc_all_read();
kenjiArai 8:f6aa5561f219 112 analog_pwr = 0;
kenjiArai 8:f6aa5561f219 113 vref_pwr = 0;
kenjiArai 8:f6aa5561f219 114 }
dan 0:7dec7e9ac085 115
dan 0:7dec7e9ac085 116 int main() {
kenjiArai 8:f6aa5561f219 117 pc.baud(9600);
kenjiArai 8:f6aa5561f219 118 pc.printf("mbed LPC1114FN28 test program by JH1PJL created on "__DATE__"\r\n");
kenjiArai 7:d3b49f1d9f76 119 while(1) {
kenjiArai 8:f6aa5561f219 120 analog_pwr = 1;
kenjiArai 8:f6aa5561f219 121 vref_pwr = 1;
kenjiArai 8:f6aa5561f219 122 wait(0.2);
kenjiArai 8:f6aa5561f219 123 adc_all_read();
kenjiArai 8:f6aa5561f219 124 //analog_pwr = 0;
kenjiArai 8:f6aa5561f219 125 adc_normalize( CDS );
kenjiArai 8:f6aa5561f219 126 adc_normalize( VREF );
kenjiArai 8:f6aa5561f219 127 adc_normalize( VOL );
kenjiArai 8:f6aa5561f219 128 myled0 = 1;
kenjiArai 8:f6aa5561f219 129 myled1 = 1;
kenjiArai 8:f6aa5561f219 130 if (sw_chng == 1){ // SW Off
kenjiArai 8:f6aa5561f219 131 pc.printf("CDS:%.0fohm -> %.1flux, Vcc:%.3fV, Vol:%d\r\n", r_cds, lux, cal_vcc, nor_vol);
kenjiArai 8:f6aa5561f219 132 } else { // SW On
kenjiArai 8:f6aa5561f219 133 pc.printf("CDS:%f, Vref:%f, Vol:%f\r\n", av_cds, av_vref, av_vol);
kenjiArai 7:d3b49f1d9f76 134 }
kenjiArai 8:f6aa5561f219 135 myled0 = 0;
kenjiArai 8:f6aa5561f219 136 myled1 = 0;
kenjiArai 8:f6aa5561f219 137 wait(0.8);
kenjiArai 7:d3b49f1d9f76 138 }
dan 0:7dec7e9ac085 139 }
kenjiArai 8:f6aa5561f219 140