Library to interface the SCP1000 temperature and pressure sensor.

Dependents:   SCP1000_Example ku-make_sensor ku-make_sensor201302 SCP1000_Example ... more

Committer:
kadams6
Date:
Fri Oct 08 17:44:49 2010 +0000
Revision:
9:47d6f205890b
Parent:
8:1049590388b6

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadams6 8:1049590388b6 1 /**
kadams6 9:47d6f205890b 2 * @section LICENSE
kadams6 9:47d6f205890b 3 * This program is free software; you can redistribute it and/or modify
kadams6 9:47d6f205890b 4 * it under the terms of the GNU General Public License as published by
kadams6 9:47d6f205890b 5 * the Free Software Foundation; either version 2 of the License, or
kadams6 9:47d6f205890b 6 * (at your option) any later version.
kadams6 9:47d6f205890b 7 *
kadams6 9:47d6f205890b 8 * This program is distributed in the hope that it will be useful, but
kadams6 9:47d6f205890b 9 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
kadams6 9:47d6f205890b 10 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kadams6 9:47d6f205890b 11 * for more details.
kadams6 9:47d6f205890b 12 *
kadams6 9:47d6f205890b 13 * You should have received a copy of the GNU General Public License along
kadams6 9:47d6f205890b 14 * with this program; if not, write to the Free Software Foundation, Inc.,
kadams6 9:47d6f205890b 15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
kadams6 9:47d6f205890b 16 *
kadams6 9:47d6f205890b 17 * @section DESCRIPTION
kadams6 9:47d6f205890b 18 * Library to interface with the SCP1000 pressure and temperature sensor.
kadams6 8:1049590388b6 19 */
kadams6 6:70e36f2da425 20
kadams6 4:295e118b6e85 21 #include "SCP1000.h"
kadams6 4:295e118b6e85 22
kadams6 5:8e06eb237dd2 23 SCP1000::SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs)
kadams6 4:295e118b6e85 24 : m_spi(mosi, miso, sclk)
kadams6 4:295e118b6e85 25 , m_cs(cs) {
kadams6 4:295e118b6e85 26 m_cs=1;
kadams6 4:295e118b6e85 27 m_spi.frequency(500000); // the fastest of the sensor
kadams6 4:295e118b6e85 28 m_spi.format(8, 0); // duda son dos palabras de 8 bits?
kadams6 4:295e118b6e85 29 wait(0.5);
kadams6 4:295e118b6e85 30 //------------------------------------------------
kadams6 4:295e118b6e85 31 // pc.printf("RESET\r\n");
kadams6 4:295e118b6e85 32 write_register(0x06,0x01);
kadams6 4:295e118b6e85 33 wait(0.5);
kadams6 4:295e118b6e85 34
kadams6 4:295e118b6e85 35 // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
kadams6 4:295e118b6e85 36 write_register(0x03,0x0A);
kadams6 4:295e118b6e85 37 wait(0.5);
kadams6 4:295e118b6e85 38 }
kadams6 4:295e118b6e85 39
kadams6 4:295e118b6e85 40 unsigned long SCP1000::readPressure() {
kadams6 4:295e118b6e85 41 unsigned long pressure_msb = read_register(PRESSURE);
kadams6 4:295e118b6e85 42 pressure_msb &= 0x07;
kadams6 4:295e118b6e85 43 unsigned long pressure_lsb = read_register16(PRESSURE_LSB);
kadams6 4:295e118b6e85 44 unsigned long pressure = ((pressure_msb<<16)| pressure_lsb);
kadams6 4:295e118b6e85 45 pressure /= 4;
kadams6 4:295e118b6e85 46
kadams6 4:295e118b6e85 47 return pressure;
kadams6 4:295e118b6e85 48 }
kadams6 4:295e118b6e85 49
kadams6 4:295e118b6e85 50 float SCP1000::readTemperature() {
kadams6 4:295e118b6e85 51 float temp_in = read_register16(TEMP);
kadams6 4:295e118b6e85 52 temp_in /= 20;
kadams6 4:295e118b6e85 53 return temp_in;
kadams6 4:295e118b6e85 54 }
kadams6 4:295e118b6e85 55
kadams6 4:295e118b6e85 56 char SCP1000::read_register(char register_name) {
kadams6 4:295e118b6e85 57 register_name <<=2;
kadams6 4:295e118b6e85 58 register_name &= 0xFC;
kadams6 4:295e118b6e85 59 m_cs=0; //Select SPI device
kadams6 4:295e118b6e85 60 m_spi.write(register_name); //Send register location
kadams6 4:295e118b6e85 61 char register_value=m_spi.write(0x00);
kadams6 4:295e118b6e85 62 m_cs=1;
kadams6 4:295e118b6e85 63 return register_value;
kadams6 4:295e118b6e85 64 }
kadams6 4:295e118b6e85 65
kadams6 4:295e118b6e85 66 void SCP1000::write_register(char register_name, char register_value) {
kadams6 4:295e118b6e85 67 register_name <<= 2;
kadams6 4:295e118b6e85 68 register_name |= 0x02; //le estamos diciendo que escriba
kadams6 4:295e118b6e85 69 m_cs=0; //Select SPI device
kadams6 4:295e118b6e85 70 m_spi.write(register_name); //Send register location
kadams6 4:295e118b6e85 71 m_spi.write(register_value); //Send value to record into register
kadams6 4:295e118b6e85 72 m_cs=1;
kadams6 4:295e118b6e85 73 }
kadams6 4:295e118b6e85 74
kadams6 4:295e118b6e85 75 float SCP1000::read_register16(char register_name) {
kadams6 4:295e118b6e85 76 register_name <<= 2;
kadams6 4:295e118b6e85 77 register_name &= 0xFC; //Read command
kadams6 4:295e118b6e85 78 m_cs=0; //Select SPI Device
kadams6 4:295e118b6e85 79 m_spi.write(register_name); //Write byte to device
kadams6 4:295e118b6e85 80 int in_byte1 = m_spi.write(0x00);
kadams6 4:295e118b6e85 81 int in_byte2 = m_spi.write(0x00);
kadams6 4:295e118b6e85 82 m_cs=1;
kadams6 4:295e118b6e85 83 float in_word= (in_byte1<<=8) | (in_byte2);
kadams6 4:295e118b6e85 84 return(in_word);
kadams6 4:295e118b6e85 85 }