Dependencies:   mbed

Committer:
gbeardall
Date:
Mon Oct 17 10:41:44 2011 +0000
Revision:
2:5628e75c533e
Parent:
1:bdb889fd3bef

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gbeardall 1:bdb889fd3bef 1 /*
gbeardall 1:bdb889fd3bef 2 * humidity1
gbeardall 1:bdb889fd3bef 3 *
gbeardall 1:bdb889fd3bef 4 */
gbeardall 1:bdb889fd3bef 5
gbeardall 2:5628e75c533e 6 /*
gbeardall 2:5628e75c533e 7 +5 --------
gbeardall 2:5628e75c533e 8 |
gbeardall 2:5628e75c533e 9 |
gbeardall 2:5628e75c533e 10 +-+
gbeardall 2:5628e75c533e 11 | | |\
gbeardall 2:5628e75c533e 12 | |->----|+\
gbeardall 2:5628e75c533e 13 | | | \--+----+------
gbeardall 2:5628e75c533e 14 +-+ +- |-/ | |
gbeardall 2:5628e75c533e 15 | | |/ | +-+
gbeardall 2:5628e75c533e 16 | +--------+ | |
gbeardall 2:5628e75c533e 17 0v ------ +_+
gbeardall 2:5628e75c533e 18 |--------
gbeardall 2:5628e75c533e 19 +-+
gbeardall 2:5628e75c533e 20 | |
gbeardall 2:5628e75c533e 21 +-+
gbeardall 2:5628e75c533e 22 |
gbeardall 2:5628e75c533e 23
gbeardall 2:5628e75c533e 24
gbeardall 2:5628e75c533e 25
gbeardall 2:5628e75c533e 26 */
gbeardall 2:5628e75c533e 27
gbeardall 0:dba2bcefd284 28 #include "mbed.h"
gbeardall 0:dba2bcefd284 29
gbeardall 0:dba2bcefd284 30 DigitalOut myled(LED1);
gbeardall 0:dba2bcefd284 31
gbeardall 0:dba2bcefd284 32 AnalogIn hum(p20);
gbeardall 0:dba2bcefd284 33 AnalogIn ref(p19);
gbeardall 2:5628e75c533e 34 AnalogIn tst(p18);
gbeardall 2:5628e75c533e 35
gbeardall 2:5628e75c533e 36 //Timer timer;
gbeardall 2:5628e75c533e 37
gbeardall 0:dba2bcefd284 38
gbeardall 1:bdb889fd3bef 39 int main() {
gbeardall 1:bdb889fd3bef 40 float av0 = 0.0;
gbeardall 2:5628e75c533e 41 float alpha = 0.2;
gbeardall 2:5628e75c533e 42
gbeardall 2:5628e75c533e 43 printf("\rhumidity1: %u %u\n\r", sizeof(unsigned long long), sizeof(uint64_t) );
gbeardall 2:5628e75c533e 44
gbeardall 2:5628e75c533e 45 // decimation and downsamplig to reduce noise and increment resolution
gbeardall 0:dba2bcefd284 46
gbeardall 2:5628e75c533e 47 while(1) {
gbeardall 2:5628e75c533e 48
gbeardall 2:5628e75c533e 49 // 32 - ? 8081
gbeardall 2:5628e75c533e 50 // 64 - 8 8082
gbeardall 2:5628e75c533e 51 // 128 - 6 807d
gbeardall 2:5628e75c533e 52 // 256 - 4 8071
gbeardall 2:5628e75c533e 53 // 512 - 2 805e
gbeardall 2:5628e75c533e 54 // 1024 - .3 803f
gbeardall 2:5628e75c533e 55 // 2048 - ? 8014
gbeardall 2:5628e75c533e 56 // 4096 - ? 7fe8
gbeardall 2:5628e75c533e 57 // 8192 - ? 7fca
gbeardall 2:5628e75c533e 58 // 16384 - ? 7fba
gbeardall 2:5628e75c533e 59 // 32768 - ? 7fb2
gbeardall 2:5628e75c533e 60 // 65536 - ? 7faf
gbeardall 2:5628e75c533e 61 // 131072 - ? 7fad
gbeardall 2:5628e75c533e 62
gbeardall 2:5628e75c533e 63 // Sample values and their differences
gbeardall 2:5628e75c533e 64 // 7FB7 7FC7 7FD7 7FE7 7FF7 8008 8018 8028
gbeardall 2:5628e75c533e 65 // 10 10 10 10 11 10 10
gbeardall 2:5628e75c533e 66
gbeardall 2:5628e75c533e 67 // Max conversion rate: 14KHz (~70us)
gbeardall 2:5628e75c533e 68 // ToDo
gbeardall 2:5628e75c533e 69 // many samples to create new data set
gbeardall 2:5628e75c533e 70 // different sampling frequencies, see if effect same
gbeardall 2:5628e75c533e 71 // measure raw sampling freq
gbeardall 2:5628e75c533e 72 // fourier analysis
gbeardall 2:5628e75c533e 73 // freq distribution
gbeardall 2:5628e75c533e 74 // overall and diff sized moving avg to see if effect is due to software.overflow or noise in data
gbeardall 2:5628e75c533e 75 // what does graph do at even larger sample sizes
gbeardall 2:5628e75c533e 76 // is there a temp drift?
gbeardall 2:5628e75c533e 77
gbeardall 2:5628e75c533e 78
gbeardall 2:5628e75c533e 79 //unsigned long long t = 0; // uint64_t
gbeardall 2:5628e75c533e 80 uint64_t t = 0;
gbeardall 2:5628e75c533e 81 uint64_t n = 1000; // 128/4096
gbeardall 2:5628e75c533e 82 //timer.start();
gbeardall 2:5628e75c533e 83 //float b1 = timer.read();
gbeardall 2:5628e75c533e 84 //int begin = timer.read_ms();
gbeardall 2:5628e75c533e 85 for(int i=0; i<n; ++i) {
gbeardall 2:5628e75c533e 86 //uint16_t v = tst.read_u16();
gbeardall 2:5628e75c533e 87 //uint64_t v = tst.read_u16();
gbeardall 2:5628e75c533e 88 uint64_t v = ref.read_u16();
gbeardall 2:5628e75c533e 89 //v >>= 4; // back to 12bits
gbeardall 2:5628e75c533e 90
gbeardall 2:5628e75c533e 91 t += v;
gbeardall 2:5628e75c533e 92 #if 0
gbeardall 2:5628e75c533e 93 switch((v>>4)&0x01) {
gbeardall 2:5628e75c533e 94 case 0: wait_us(7); break;
gbeardall 2:5628e75c533e 95 case 1: wait_us(17); break;
gbeardall 2:5628e75c533e 96 default: printf("?");
gbeardall 2:5628e75c533e 97 } // switch
gbeardall 2:5628e75c533e 98 #endif
gbeardall 2:5628e75c533e 99 } // for
gbeardall 2:5628e75c533e 100 //int end = timer.read_ms();
gbeardall 2:5628e75c533e 101 //float e1 = timer.read();
gbeardall 2:5628e75c533e 102 //printf("timer: %d %f %f\n\r", end-begin, e1-b1, (float)n*1000.0/(float)(end-begin) );
gbeardall 2:5628e75c533e 103
gbeardall 2:5628e75c533e 104 uint64_t x = t / n;
gbeardall 2:5628e75c533e 105 //t = t/(float)n;
gbeardall 2:5628e75c533e 106
gbeardall 2:5628e75c533e 107 printf("%llu\n\r", x);
gbeardall 2:5628e75c533e 108 //printf("%.0f\n\r", t);
gbeardall 2:5628e75c533e 109
gbeardall 2:5628e75c533e 110 //wait(4); // <<<<<<<<
gbeardall 2:5628e75c533e 111
gbeardall 2:5628e75c533e 112 //wait_us(31);
gbeardall 2:5628e75c533e 113 }
gbeardall 1:bdb889fd3bef 114
gbeardall 0:dba2bcefd284 115 while(1) {
gbeardall 0:dba2bcefd284 116
gbeardall 1:bdb889fd3bef 117 // read many times to remove noise
gbeardall 1:bdb889fd3bef 118 int n = 1000;
gbeardall 1:bdb889fd3bef 119 float h = 0.0;
gbeardall 1:bdb889fd3bef 120 float r = 0.0;
gbeardall 1:bdb889fd3bef 121 float v = 0.0;
gbeardall 1:bdb889fd3bef 122 for(int i=0; i<n; ++i) {
gbeardall 1:bdb889fd3bef 123 float h1, r1;
gbeardall 1:bdb889fd3bef 124 h1 = hum.read();
gbeardall 1:bdb889fd3bef 125 r1 = ref.read();
gbeardall 1:bdb889fd3bef 126 h += h1;
gbeardall 1:bdb889fd3bef 127 r += r1;
gbeardall 2:5628e75c533e 128 //v += 5.0*h1/r1; // convert to 5v reference
gbeardall 2:5628e75c533e 129 wait_us(100);
gbeardall 1:bdb889fd3bef 130 }
gbeardall 1:bdb889fd3bef 131 h /= n;
gbeardall 1:bdb889fd3bef 132 r /= n;
gbeardall 2:5628e75c533e 133 //v /= n;
gbeardall 0:dba2bcefd284 134
gbeardall 2:5628e75c533e 135 v = 5.0*h/r; // convert to 5v reference
gbeardall 2:5628e75c533e 136
gbeardall 2:5628e75c533e 137
gbeardall 2:5628e75c533e 138 // Exponential Moving Average
gbeardall 1:bdb889fd3bef 139 float av = av0 + alpha*(v-av0);
gbeardall 1:bdb889fd3bef 140 av0 = av;
gbeardall 0:dba2bcefd284 141
gbeardall 1:bdb889fd3bef 142 // scale to humidity%
gbeardall 1:bdb889fd3bef 143 float m = (av-0.8)/3.0*100.0;
gbeardall 0:dba2bcefd284 144
gbeardall 2:5628e75c533e 145 printf("h=%1.4f r=%1.4f %1.4fv %1.4fv %3.2f%%\n\r", h, r, v, av, m );
gbeardall 0:dba2bcefd284 146
gbeardall 0:dba2bcefd284 147 myled = 1;
gbeardall 0:dba2bcefd284 148 wait(0.2);
gbeardall 0:dba2bcefd284 149 myled = 0;
gbeardall 0:dba2bcefd284 150 wait(0.8);
gbeardall 1:bdb889fd3bef 151
gbeardall 1:bdb889fd3bef 152 } // while
gbeardall 1:bdb889fd3bef 153
gbeardall 1:bdb889fd3bef 154 } // main
gbeardall 1:bdb889fd3bef 155