test MAX31850

Dependencies:   OneWireFB mbed

Committer:
fblanc
Date:
Wed Sep 28 06:46:10 2016 +0000
Revision:
4:031e71e61e80
Parent:
0:55f2866e9c0c
test

Who changed what in which revision?

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