frederic blanc
/
MAX31850_HelloWorld
test MAX31850
SHTxx/sht7X.cpp@4:031e71e61e80, 2016-09-28 (annotated)
- Committer:
- fblanc
- Date:
- Wed Sep 28 06:46:10 2016 +0000
- Revision:
- 4:031e71e61e80
- Parent:
- 0:55f2866e9c0c
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fblanc | 0:55f2866e9c0c | 1 | // |
fblanc | 0:55f2866e9c0c | 2 | // Ian Molesworth October 2010 |
fblanc | 0:55f2866e9c0c | 3 | // SHT 75 class |
fblanc | 0:55f2866e9c0c | 4 | // |
fblanc | 0:55f2866e9c0c | 5 | // |
fblanc | 0:55f2866e9c0c | 6 | // To do: |
fblanc | 0:55f2866e9c0c | 7 | // modification PULL-UP |
fblanc | 0:55f2866e9c0c | 8 | //2010_12_22 F.BLANC |
fblanc | 0:55f2866e9c0c | 9 | |
fblanc | 0:55f2866e9c0c | 10 | #include "sht7X.h" |
fblanc | 0:55f2866e9c0c | 11 | |
fblanc | 0:55f2866e9c0c | 12 | void SHT75::reset() { |
fblanc | 0:55f2866e9c0c | 13 | _data.output(); |
fblanc | 0:55f2866e9c0c | 14 | _data = 1; // data bus high |
fblanc | 0:55f2866e9c0c | 15 | for (int i=0;i<12;i++) { |
fblanc | 0:55f2866e9c0c | 16 | _clock = 1; // clock high |
fblanc | 0:55f2866e9c0c | 17 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 18 | _clock = 0; // clock lo |
fblanc | 0:55f2866e9c0c | 19 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 20 | } |
fblanc | 0:55f2866e9c0c | 21 | _clock = 1; // clock high |
fblanc | 0:55f2866e9c0c | 22 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 23 | _data = 0; |
fblanc | 0:55f2866e9c0c | 24 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 25 | _clock = 0; // clock lo |
fblanc | 0:55f2866e9c0c | 26 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 27 | _clock = 1; |
fblanc | 0:55f2866e9c0c | 28 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 29 | _data = 1; |
fblanc | 0:55f2866e9c0c | 30 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 31 | _clock = 0; |
fblanc | 0:55f2866e9c0c | 32 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 33 | } |
fblanc | 0:55f2866e9c0c | 34 | |
fblanc | 0:55f2866e9c0c | 35 | void SHT75::softReset(void) { |
fblanc | 0:55f2866e9c0c | 36 | _data.output(); |
fblanc | 0:55f2866e9c0c | 37 | start(); |
fblanc | 0:55f2866e9c0c | 38 | write(0x1E); |
fblanc | 0:55f2866e9c0c | 39 | wait_ms(12); |
fblanc | 0:55f2866e9c0c | 40 | } |
fblanc | 0:55f2866e9c0c | 41 | |
fblanc | 0:55f2866e9c0c | 42 | void SHT75::start(void) { |
fblanc | 0:55f2866e9c0c | 43 | _data.output(); |
fblanc | 0:55f2866e9c0c | 44 | _clock = 1; |
fblanc | 0:55f2866e9c0c | 45 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 46 | _data = 0; |
fblanc | 0:55f2866e9c0c | 47 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 48 | _clock = 0; |
fblanc | 0:55f2866e9c0c | 49 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 50 | _clock = 1; |
fblanc | 0:55f2866e9c0c | 51 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 52 | _data = 1; |
fblanc | 0:55f2866e9c0c | 53 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 54 | _clock = 0; |
fblanc | 0:55f2866e9c0c | 55 | } |
fblanc | 0:55f2866e9c0c | 56 | |
fblanc | 0:55f2866e9c0c | 57 | int SHT75::readStatus(void) { |
fblanc | 0:55f2866e9c0c | 58 | int status; |
fblanc | 0:55f2866e9c0c | 59 | status = -1; |
fblanc | 0:55f2866e9c0c | 60 | start(); |
fblanc | 0:55f2866e9c0c | 61 | if (write(0x06) == 0) |
fblanc | 0:55f2866e9c0c | 62 | status = read(1); // read with a wait for ack |
fblanc | 0:55f2866e9c0c | 63 | read(0); // read without the wait |
fblanc | 0:55f2866e9c0c | 64 | return status; |
fblanc | 0:55f2866e9c0c | 65 | } |
fblanc | 0:55f2866e9c0c | 66 | |
fblanc | 0:55f2866e9c0c | 67 | bool SHT75::write(char d) { |
fblanc | 0:55f2866e9c0c | 68 | auto int i; |
fblanc | 0:55f2866e9c0c | 69 | _data.output(); // bus output |
fblanc | 0:55f2866e9c0c | 70 | // Writes char and returns -1 if no ACK was sent from remote |
fblanc | 0:55f2866e9c0c | 71 | for (i=0;i<8;i++) { |
fblanc | 0:55f2866e9c0c | 72 | if (d & 0x80) |
fblanc | 0:55f2866e9c0c | 73 | _data = 1; // data high |
fblanc | 0:55f2866e9c0c | 74 | else |
fblanc | 0:55f2866e9c0c | 75 | _data = 0; // data lo |
fblanc | 0:55f2866e9c0c | 76 | // shift the data |
fblanc | 0:55f2866e9c0c | 77 | d <<= 1; |
fblanc | 0:55f2866e9c0c | 78 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 79 | _clock = 1; // clock high |
fblanc | 0:55f2866e9c0c | 80 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 81 | _clock = 0; // clock lo |
fblanc | 0:55f2866e9c0c | 82 | } |
fblanc | 0:55f2866e9c0c | 83 | _data.input(); // float the bus |
fblanc | 0:55f2866e9c0c | 84 | _data.mode(PullUp); //PULL-UP |
fblanc | 0:55f2866e9c0c | 85 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 86 | _clock = 1; // clock high |
fblanc | 0:55f2866e9c0c | 87 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 88 | i = _data; |
fblanc | 0:55f2866e9c0c | 89 | _clock = 0; // clock lo |
fblanc | 0:55f2866e9c0c | 90 | return i; // leave the bus in input mode and return the status of the ack bit read. |
fblanc | 0:55f2866e9c0c | 91 | } |
fblanc | 0:55f2866e9c0c | 92 | |
fblanc | 0:55f2866e9c0c | 93 | int SHT75::read(char ack) { |
fblanc | 0:55f2866e9c0c | 94 | auto int i,s; |
fblanc | 0:55f2866e9c0c | 95 | auto char c; |
fblanc | 0:55f2866e9c0c | 96 | s = 0; |
fblanc | 0:55f2866e9c0c | 97 | _data.input(); // bus to input |
fblanc | 0:55f2866e9c0c | 98 | _data.mode(PullUp); //PULL-UP |
fblanc | 0:55f2866e9c0c | 99 | for (i=0;i<8;i++) { |
fblanc | 0:55f2866e9c0c | 100 | s <<= 1; |
fblanc | 0:55f2866e9c0c | 101 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 102 | _clock = 1; // clock high |
fblanc | 0:55f2866e9c0c | 103 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 104 | c = _data; // get the data bit |
fblanc | 0:55f2866e9c0c | 105 | _clock = 0; // clock lo |
fblanc | 0:55f2866e9c0c | 106 | if ( c ) |
fblanc | 0:55f2866e9c0c | 107 | s |= 1; |
fblanc | 0:55f2866e9c0c | 108 | } |
fblanc | 0:55f2866e9c0c | 109 | |
fblanc | 0:55f2866e9c0c | 110 | if (ack == 1) |
fblanc | 0:55f2866e9c0c | 111 | _data = 0; // data lo |
fblanc | 0:55f2866e9c0c | 112 | else |
fblanc | 0:55f2866e9c0c | 113 | _data = 1; // data hi |
fblanc | 0:55f2866e9c0c | 114 | _data.output(); |
fblanc | 0:55f2866e9c0c | 115 | _clock = 1; // clock lo |
fblanc | 0:55f2866e9c0c | 116 | wait_us(1); |
fblanc | 0:55f2866e9c0c | 117 | _clock = 0; // clock lo |
fblanc | 0:55f2866e9c0c | 118 | _data = 1; // data hi |
fblanc | 0:55f2866e9c0c | 119 | _data.input(); |
fblanc | 0:55f2866e9c0c | 120 | _data.mode(PullUp); //PULL-UP |
fblanc | 0:55f2866e9c0c | 121 | return s; |
fblanc | 0:55f2866e9c0c | 122 | } |
fblanc | 0:55f2866e9c0c | 123 | |
fblanc | 0:55f2866e9c0c | 124 | |
fblanc | 0:55f2866e9c0c | 125 | // Put the current temperature into passed variable |
fblanc | 0:55f2866e9c0c | 126 | bool SHT75::readTempTicks(int* temp) { |
fblanc | 0:55f2866e9c0c | 127 | int v, value; |
fblanc | 0:55f2866e9c0c | 128 | start(); // Start a tx ( leaves data as input ) |
fblanc | 0:55f2866e9c0c | 129 | if (write(0x03) == 0) { // send the read command and get an ack |
fblanc | 0:55f2866e9c0c | 130 | for (v=0; v<50; v ++) { // wait for ready up to 500 ms |
fblanc | 0:55f2866e9c0c | 131 | wait_ms(10); // 10 ms pause |
fblanc | 0:55f2866e9c0c | 132 | if ( _data == 0 ) { // |
fblanc | 0:55f2866e9c0c | 133 | value = read(1); // read a byte |
fblanc | 0:55f2866e9c0c | 134 | value <<= 8; // shift it in |
fblanc | 0:55f2866e9c0c | 135 | value |= read(1); // read another byte |
fblanc | 0:55f2866e9c0c | 136 | read(0); |
fblanc | 0:55f2866e9c0c | 137 | // transfer the value |
fblanc | 0:55f2866e9c0c | 138 | *temp = value; |
fblanc | 0:55f2866e9c0c | 139 | reset(); |
fblanc | 0:55f2866e9c0c | 140 | return true; |
fblanc | 0:55f2866e9c0c | 141 | } |
fblanc | 0:55f2866e9c0c | 142 | } |
fblanc | 0:55f2866e9c0c | 143 | } |
fblanc | 0:55f2866e9c0c | 144 | return false; |
fblanc | 0:55f2866e9c0c | 145 | } |
fblanc | 0:55f2866e9c0c | 146 | |
fblanc | 0:55f2866e9c0c | 147 | bool SHT75::readHumidityTicks(int* humi) { |
fblanc | 0:55f2866e9c0c | 148 | start(); |
fblanc | 0:55f2866e9c0c | 149 | if (write(0x05) == 0) { |
fblanc | 0:55f2866e9c0c | 150 | for (int value=0; value<50; value ++) { // wait for ready up to 500 ms |
fblanc | 0:55f2866e9c0c | 151 | wait_ms(10); // |
fblanc | 0:55f2866e9c0c | 152 | if ( _data == 0 ) { // |
fblanc | 0:55f2866e9c0c | 153 | value = read(1); |
fblanc | 0:55f2866e9c0c | 154 | value <<= 8; |
fblanc | 0:55f2866e9c0c | 155 | value |= read(1); |
fblanc | 0:55f2866e9c0c | 156 | read(0); |
fblanc | 0:55f2866e9c0c | 157 | *humi = value; // transfer the value |
fblanc | 0:55f2866e9c0c | 158 | reset(); |
fblanc | 0:55f2866e9c0c | 159 | return true; |
fblanc | 0:55f2866e9c0c | 160 | } |
fblanc | 0:55f2866e9c0c | 161 | } |
fblanc | 0:55f2866e9c0c | 162 | } |
fblanc | 0:55f2866e9c0c | 163 | |
fblanc | 0:55f2866e9c0c | 164 | return false; |
fblanc | 0:55f2866e9c0c | 165 | } |