SCP1000

Dependents:   EM_Logger

Fork of SCP1000 by Kenneth Adams

Committer:
YSB
Date:
Fri Jul 05 04:17:53 2013 +0000
Revision:
10:53f432e521a4
Parent:
9:47d6f205890b
SCP1000

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadams6 4:295e118b6e85 1 #include "SCP1000.h"
kadams6 4:295e118b6e85 2
kadams6 5:8e06eb237dd2 3 SCP1000::SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs)
kadams6 4:295e118b6e85 4 : m_spi(mosi, miso, sclk)
kadams6 4:295e118b6e85 5 , m_cs(cs) {
kadams6 4:295e118b6e85 6 m_cs=1;
kadams6 4:295e118b6e85 7 m_spi.frequency(500000); // the fastest of the sensor
kadams6 4:295e118b6e85 8 m_spi.format(8, 0); // duda son dos palabras de 8 bits?
YSB 10:53f432e521a4 9 /*
kadams6 4:295e118b6e85 10 wait(0.5);
kadams6 4:295e118b6e85 11 //------------------------------------------------
kadams6 4:295e118b6e85 12 // pc.printf("RESET\r\n");
kadams6 4:295e118b6e85 13 write_register(0x06,0x01);
kadams6 4:295e118b6e85 14 wait(0.5);
kadams6 4:295e118b6e85 15
kadams6 4:295e118b6e85 16 // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
kadams6 4:295e118b6e85 17 write_register(0x03,0x0A);
kadams6 4:295e118b6e85 18 wait(0.5);
YSB 10:53f432e521a4 19 */
YSB 10:53f432e521a4 20 }
YSB 10:53f432e521a4 21
YSB 10:53f432e521a4 22 void SCP1000::init_scp1000(){
YSB 10:53f432e521a4 23 //------------------------------------------------
YSB 10:53f432e521a4 24 // pc.printf("RESET\r\n");
YSB 10:53f432e521a4 25 write_register(0x06,0x01);
YSB 10:53f432e521a4 26 wait(0.5);
YSB 10:53f432e521a4 27
YSB 10:53f432e521a4 28 // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
YSB 10:53f432e521a4 29 write_register(0x03,0x0A);
YSB 10:53f432e521a4 30 wait(0.5);
kadams6 4:295e118b6e85 31 }
kadams6 4:295e118b6e85 32
kadams6 4:295e118b6e85 33 unsigned long SCP1000::readPressure() {
kadams6 4:295e118b6e85 34 unsigned long pressure_msb = read_register(PRESSURE);
kadams6 4:295e118b6e85 35 pressure_msb &= 0x07;
kadams6 4:295e118b6e85 36 unsigned long pressure_lsb = read_register16(PRESSURE_LSB);
kadams6 4:295e118b6e85 37 unsigned long pressure = ((pressure_msb<<16)| pressure_lsb);
kadams6 4:295e118b6e85 38 pressure /= 4;
kadams6 4:295e118b6e85 39
kadams6 4:295e118b6e85 40 return pressure;
kadams6 4:295e118b6e85 41 }
kadams6 4:295e118b6e85 42
kadams6 4:295e118b6e85 43 float SCP1000::readTemperature() {
kadams6 4:295e118b6e85 44 float temp_in = read_register16(TEMP);
kadams6 4:295e118b6e85 45 temp_in /= 20;
kadams6 4:295e118b6e85 46 return temp_in;
kadams6 4:295e118b6e85 47 }
kadams6 4:295e118b6e85 48
kadams6 4:295e118b6e85 49 char SCP1000::read_register(char register_name) {
kadams6 4:295e118b6e85 50 register_name <<=2;
kadams6 4:295e118b6e85 51 register_name &= 0xFC;
kadams6 4:295e118b6e85 52 m_cs=0; //Select SPI device
kadams6 4:295e118b6e85 53 m_spi.write(register_name); //Send register location
kadams6 4:295e118b6e85 54 char register_value=m_spi.write(0x00);
kadams6 4:295e118b6e85 55 m_cs=1;
kadams6 4:295e118b6e85 56 return register_value;
kadams6 4:295e118b6e85 57 }
kadams6 4:295e118b6e85 58
kadams6 4:295e118b6e85 59 void SCP1000::write_register(char register_name, char register_value) {
kadams6 4:295e118b6e85 60 register_name <<= 2;
kadams6 4:295e118b6e85 61 register_name |= 0x02; //le estamos diciendo que escriba
kadams6 4:295e118b6e85 62 m_cs=0; //Select SPI device
kadams6 4:295e118b6e85 63 m_spi.write(register_name); //Send register location
kadams6 4:295e118b6e85 64 m_spi.write(register_value); //Send value to record into register
kadams6 4:295e118b6e85 65 m_cs=1;
kadams6 4:295e118b6e85 66 }
kadams6 4:295e118b6e85 67
kadams6 4:295e118b6e85 68 float SCP1000::read_register16(char register_name) {
kadams6 4:295e118b6e85 69 register_name <<= 2;
kadams6 4:295e118b6e85 70 register_name &= 0xFC; //Read command
kadams6 4:295e118b6e85 71 m_cs=0; //Select SPI Device
kadams6 4:295e118b6e85 72 m_spi.write(register_name); //Write byte to device
kadams6 4:295e118b6e85 73 int in_byte1 = m_spi.write(0x00);
kadams6 4:295e118b6e85 74 int in_byte2 = m_spi.write(0x00);
kadams6 4:295e118b6e85 75 m_cs=1;
kadams6 4:295e118b6e85 76 float in_word= (in_byte1<<=8) | (in_byte2);
kadams6 4:295e118b6e85 77 return(in_word);
kadams6 4:295e118b6e85 78 }