affichage fonctionne, valeurs reçues (255)

Dependencies:   mbed

Fork of Main_V3_Old by EI2I_4_projet_1_2017-2018

Committer:
Aureb29
Date:
Mon Jan 15 11:22:40 2018 +0000
Revision:
9:e79b746421b1
Parent:
5:ae57f8977663
Main V3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChrisnieM 4:784c4b53a3d4 1 /*
ChrisnieM 4:784c4b53a3d4 2 * DS18B20. Maxim DS18B20 One-Wire Thermometer.
ChrisnieM 4:784c4b53a3d4 3 * Uses the OneWireCRC library.
ChrisnieM 4:784c4b53a3d4 4 *
ChrisnieM 4:784c4b53a3d4 5 * Copyright (C) <2010> Petras Saduikis <petras@petras.co.uk>
ChrisnieM 4:784c4b53a3d4 6 *
ChrisnieM 4:784c4b53a3d4 7 * This file is part of OneWireThermometer.
ChrisnieM 4:784c4b53a3d4 8 *
ChrisnieM 4:784c4b53a3d4 9 * OneWireThermometer is free software: you can redistribute it and/or modify
ChrisnieM 4:784c4b53a3d4 10 * it under the terms of the GNU General Public License as published by
ChrisnieM 4:784c4b53a3d4 11 * the Free Software Foundation, either version 3 of the License, or
ChrisnieM 4:784c4b53a3d4 12 * (at your option) any later version.
ChrisnieM 4:784c4b53a3d4 13 *
ChrisnieM 4:784c4b53a3d4 14 * OneWireThermometer is distributed in the hope that it will be useful,
ChrisnieM 4:784c4b53a3d4 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ChrisnieM 4:784c4b53a3d4 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ChrisnieM 4:784c4b53a3d4 17 * GNU General Public License for more details.
ChrisnieM 4:784c4b53a3d4 18 *
ChrisnieM 4:784c4b53a3d4 19 * You should have received a copy of the GNU General Public License
ChrisnieM 4:784c4b53a3d4 20 * along with OneWireThermometer. If not, see <http://www.gnu.org/licenses/>.
ChrisnieM 4:784c4b53a3d4 21 */
ChrisnieM 4:784c4b53a3d4 22
ChrisnieM 4:784c4b53a3d4 23 #include "DS18B20.h"
ChrisnieM 4:784c4b53a3d4 24 #include "DebugTrace.h"
ChrisnieM 4:784c4b53a3d4 25
ChrisnieM 4:784c4b53a3d4 26 DebugTrace pc_ds18B20(ON, TO_SERIAL);
ChrisnieM 4:784c4b53a3d4 27
ChrisnieM 4:784c4b53a3d4 28 DS18B20::DS18B20(bool crcOn, bool useAddr, bool parasitic, PinName pin) :
ChrisnieM 4:784c4b53a3d4 29 OneWireThermometer(crcOn, useAddr, parasitic, pin, DS18B20_ID)
ChrisnieM 4:784c4b53a3d4 30 {
ChrisnieM 4:784c4b53a3d4 31 }
ChrisnieM 4:784c4b53a3d4 32
ChrisnieM 4:784c4b53a3d4 33 void DS18B20::setResolution(eResolution resln)
ChrisnieM 4:784c4b53a3d4 34 {
ChrisnieM 4:784c4b53a3d4 35 // as the write to the configuration register involves a write to the
ChrisnieM 4:784c4b53a3d4 36 // high and low alarm bytes, need to read these registers first
ChrisnieM 4:784c4b53a3d4 37 // and copy them back on the write
ChrisnieM 4:784c4b53a3d4 38
ChrisnieM 4:784c4b53a3d4 39 BYTE read_data[THERMOM_SCRATCHPAD_SIZE];
ChrisnieM 4:784c4b53a3d4 40 BYTE write_data[ALARM_CONFIG_SIZE];
ChrisnieM 4:784c4b53a3d4 41
ChrisnieM 4:784c4b53a3d4 42 if (readAndValidateData(read_data))
ChrisnieM 4:784c4b53a3d4 43 {
ChrisnieM 4:784c4b53a3d4 44 // copy alarm and config data to write data
ChrisnieM 4:784c4b53a3d4 45 for (int k = 2; k < 5; k++)
ChrisnieM 4:784c4b53a3d4 46 {
ChrisnieM 4:784c4b53a3d4 47 write_data[k - 2] = read_data[k];
ChrisnieM 4:784c4b53a3d4 48 }
ChrisnieM 4:784c4b53a3d4 49 int config = write_data[2];
ChrisnieM 4:784c4b53a3d4 50 config &= 0x9F;
ChrisnieM 4:784c4b53a3d4 51 config ^= (resln << 5);
ChrisnieM 4:784c4b53a3d4 52 write_data[2] = config;
ChrisnieM 4:784c4b53a3d4 53
ChrisnieM 4:784c4b53a3d4 54 resetAndAddress();
ChrisnieM 4:784c4b53a3d4 55 oneWire.writeByte(WRITESCRATCH);
ChrisnieM 4:784c4b53a3d4 56 for (int k = 0; k < 3; k++)
ChrisnieM 4:784c4b53a3d4 57 {
ChrisnieM 4:784c4b53a3d4 58 oneWire.writeByte(write_data[k]);
ChrisnieM 4:784c4b53a3d4 59 }
ChrisnieM 4:784c4b53a3d4 60
ChrisnieM 4:784c4b53a3d4 61 // remember it so we can use the correct delay in reading the temperature
ChrisnieM 4:784c4b53a3d4 62 // for parasitic power
ChrisnieM 4:784c4b53a3d4 63 resolution = resln;
ChrisnieM 4:784c4b53a3d4 64 }
ChrisnieM 4:784c4b53a3d4 65 }
ChrisnieM 4:784c4b53a3d4 66
ChrisnieM 4:784c4b53a3d4 67 float DS18B20::calculateTemperature(BYTE* data)
ChrisnieM 4:784c4b53a3d4 68 {
ChrisnieM 4:784c4b53a3d4 69 bool signBit = false;
ChrisnieM 4:784c4b53a3d4 70 if (data[TEMPERATURE_MSB] & 0x80) signBit = true;
ChrisnieM 4:784c4b53a3d4 71
ChrisnieM 4:784c4b53a3d4 72 int read_temp = (data[TEMPERATURE_MSB] << 8) + data[TEMPERATURE_LSB];
ChrisnieM 4:784c4b53a3d4 73 if (signBit)
ChrisnieM 4:784c4b53a3d4 74 {
ChrisnieM 4:784c4b53a3d4 75 read_temp = (read_temp ^ 0xFFFF) + 1; // two's complement
ChrisnieM 4:784c4b53a3d4 76 read_temp *= -1;
ChrisnieM 4:784c4b53a3d4 77 }
ChrisnieM 4:784c4b53a3d4 78
ChrisnieM 4:784c4b53a3d4 79 int resolution = (data[CONFIG_REG_BYTE] & 0x60) >> 5; // mask off bits 6,5 and move to 1,0
ChrisnieM 4:784c4b53a3d4 80 switch (resolution)
ChrisnieM 4:784c4b53a3d4 81 {
ChrisnieM 4:784c4b53a3d4 82 case nineBit: // 0.5 deg C increments
ChrisnieM 4:784c4b53a3d4 83 read_temp &= 0xFFF8; // bits 2,1,0 are undefined
ramialjed 5:ae57f8977663 84 // pc_ds18B20.traceOut("9 bit resolution ...\r\n");
ChrisnieM 4:784c4b53a3d4 85 break;
ChrisnieM 4:784c4b53a3d4 86 case tenBit: // 0.25 deg C increments
ChrisnieM 4:784c4b53a3d4 87 read_temp &= 0xFFFC; // bits 1,0 are undefined
ramialjed 5:ae57f8977663 88 //pc_ds18B20.traceOut("10 bit resolution ...\r\n");
ChrisnieM 4:784c4b53a3d4 89 break;
ChrisnieM 4:784c4b53a3d4 90 case elevenBit: // 0.125 deg C increments
ChrisnieM 4:784c4b53a3d4 91 read_temp &= 0xFFFE; // bit 0 is undefined
ramialjed 5:ae57f8977663 92 //pc_ds18B20.traceOut("11 bit resolution ...\r\n");
ChrisnieM 4:784c4b53a3d4 93 break;
ChrisnieM 4:784c4b53a3d4 94 case twelveBit: // 0.0625 deg C increments
ramialjed 5:ae57f8977663 95 //pc_ds18B20.traceOut("12 bit resolution ...\r\n");
ChrisnieM 4:784c4b53a3d4 96 break;
ChrisnieM 4:784c4b53a3d4 97 }
ChrisnieM 4:784c4b53a3d4 98 float realTemp = (float)read_temp/16 ;
ChrisnieM 4:784c4b53a3d4 99
ramialjed 5:ae57f8977663 100 //pc_ds18B20.traceOut("TEMP_READ/REAL TEMP: %f \r\n", realTemp);
ChrisnieM 4:784c4b53a3d4 101
ChrisnieM 4:784c4b53a3d4 102 return realTemp;
ChrisnieM 4:784c4b53a3d4 103 }