Library to interface the SCP1000 temperature and pressure sensor.

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

Committer:
kadams6
Date:
Tue Oct 05 04:19:14 2010 +0000
Revision:
3:4d8b8ca54451
Parent:
2:fe7826024fd1
Child:
4:295e118b6e85

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadams6 3:4d8b8ca54451 1 /** \file
kadams6 3:4d8b8ca54451 2 SCP1000 header file
kadams6 3:4d8b8ca54451 3 */
kadams6 3:4d8b8ca54451 4
kadams6 0:0b8b5828e1a3 5 #ifndef _SCP1000_H
kadams6 0:0b8b5828e1a3 6 #define _SCP1000_H
kadams6 0:0b8b5828e1a3 7
kadams6 0:0b8b5828e1a3 8 #include "mbed.h"
kadams6 0:0b8b5828e1a3 9
kadams6 0:0b8b5828e1a3 10 class SCP1000 {
kadams6 0:0b8b5828e1a3 11 public:
kadams6 0:0b8b5828e1a3 12 SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs)
kadams6 0:0b8b5828e1a3 13 : m_spi(mosi, miso, sclk)
kadams6 0:0b8b5828e1a3 14 , m_cs(cs) {
kadams6 0:0b8b5828e1a3 15 m_cs=1;
kadams6 0:0b8b5828e1a3 16 m_spi.frequency(500000); // the fastest of the sensor
kadams6 0:0b8b5828e1a3 17 m_spi.format(8, 0); // duda son dos palabras de 8 bits?
kadams6 0:0b8b5828e1a3 18 wait(0.5);
kadams6 0:0b8b5828e1a3 19 //------------------------------------------------
kadams6 0:0b8b5828e1a3 20 // pc.printf("RESET\r\n");
kadams6 0:0b8b5828e1a3 21 write_register(0x06,0x01);
kadams6 0:0b8b5828e1a3 22 wait(0.5);
kadams6 0:0b8b5828e1a3 23
kadams6 0:0b8b5828e1a3 24 // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
kadams6 0:0b8b5828e1a3 25 write_register(0x03,0x0A);
kadams6 0:0b8b5828e1a3 26 wait(0.5);
kadams6 0:0b8b5828e1a3 27 };
kadams6 0:0b8b5828e1a3 28
kadams6 0:0b8b5828e1a3 29 ~SCP1000() { /* empty */ };
kadams6 0:0b8b5828e1a3 30
kadams6 2:fe7826024fd1 31 ///Reads the pressure
kadams6 1:5fcf1fe4a161 32 /**
kadams6 2:fe7826024fd1 33 Reads the pressure from the sensor
kadams6 2:fe7826024fd1 34 @return Pressure in pascals.
kadams6 2:fe7826024fd1 35 */
kadams6 0:0b8b5828e1a3 36 unsigned long readPressure() {
kadams6 0:0b8b5828e1a3 37 unsigned long pressure_msb = read_register(PRESSURE);
kadams6 0:0b8b5828e1a3 38 pressure_msb &= 0x07;
kadams6 0:0b8b5828e1a3 39 unsigned long pressure_lsb = read_register16(PRESSURE_LSB);
kadams6 0:0b8b5828e1a3 40 unsigned long pressure = ((pressure_msb<<16)| pressure_lsb);
kadams6 0:0b8b5828e1a3 41 pressure /= 4;
kadams6 0:0b8b5828e1a3 42
kadams6 0:0b8b5828e1a3 43 return pressure;
kadams6 0:0b8b5828e1a3 44 };
kadams6 0:0b8b5828e1a3 45
kadams6 0:0b8b5828e1a3 46 float readTemperature() {
kadams6 0:0b8b5828e1a3 47 float temp_in = read_register16(TEMP);
kadams6 0:0b8b5828e1a3 48 temp_in /= 20;
kadams6 0:0b8b5828e1a3 49 return temp_in;
kadams6 0:0b8b5828e1a3 50 };
kadams6 0:0b8b5828e1a3 51
kadams6 0:0b8b5828e1a3 52
kadams6 0:0b8b5828e1a3 53 private:
kadams6 0:0b8b5828e1a3 54 static const char PRESSURE = 0x1F; //Pressure 3 MSB
kadams6 0:0b8b5828e1a3 55 static const char PRESSURE_LSB = 0x20; //Pressure 16 LSB
kadams6 0:0b8b5828e1a3 56 static const char TEMP = 0x21; //16 bit temp
kadams6 0:0b8b5828e1a3 57 SPI m_spi;
kadams6 0:0b8b5828e1a3 58 DigitalOut m_cs;
kadams6 0:0b8b5828e1a3 59
kadams6 0:0b8b5828e1a3 60 char read_register(char register_name) {
kadams6 0:0b8b5828e1a3 61 register_name <<=2;
kadams6 0:0b8b5828e1a3 62 register_name &= 0xFC;
kadams6 0:0b8b5828e1a3 63 m_cs=0; //Select SPI device
kadams6 0:0b8b5828e1a3 64 m_spi.write(register_name); //Send register location
kadams6 0:0b8b5828e1a3 65 char register_value=m_spi.write(0x00);
kadams6 0:0b8b5828e1a3 66 m_cs=1;
kadams6 0:0b8b5828e1a3 67 return register_value;
kadams6 0:0b8b5828e1a3 68 };
kadams6 0:0b8b5828e1a3 69
kadams6 0:0b8b5828e1a3 70 void write_register(char register_name, char register_value) {
kadams6 0:0b8b5828e1a3 71 register_name <<= 2;
kadams6 0:0b8b5828e1a3 72 register_name |= 0x02; //le estamos diciendo que escriba
kadams6 0:0b8b5828e1a3 73 m_cs=0; //Select SPI device
kadams6 0:0b8b5828e1a3 74 m_spi.write(register_name); //Send register location
kadams6 0:0b8b5828e1a3 75 m_spi.write(register_value); //Send value to record into register
kadams6 0:0b8b5828e1a3 76 m_cs=1;
kadams6 0:0b8b5828e1a3 77 };
kadams6 0:0b8b5828e1a3 78
kadams6 0:0b8b5828e1a3 79 float read_register16(char register_name) {
kadams6 0:0b8b5828e1a3 80 register_name <<= 2;
kadams6 0:0b8b5828e1a3 81 register_name &= 0xFC; //Read command
kadams6 0:0b8b5828e1a3 82 m_cs=0; //Select SPI Device
kadams6 0:0b8b5828e1a3 83 m_spi.write(register_name); //Write byte to device
kadams6 0:0b8b5828e1a3 84 int in_byte1 = m_spi.write(0x00);
kadams6 0:0b8b5828e1a3 85 int in_byte2 = m_spi.write(0x00);
kadams6 0:0b8b5828e1a3 86 m_cs=1;
kadams6 0:0b8b5828e1a3 87 float in_word= (in_byte1<<=8) | (in_byte2);
kadams6 0:0b8b5828e1a3 88 return(in_word);
kadams6 0:0b8b5828e1a3 89 };
kadams6 0:0b8b5828e1a3 90
kadams6 0:0b8b5828e1a3 91 };
kadams6 0:0b8b5828e1a3 92
kadams6 0:0b8b5828e1a3 93 #endif // _SCP1000_H