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