SCP1000

Dependents:   EM_Logger

Fork of SCP1000 by Kenneth Adams

SCP1000.cpp

Committer:
YSB
Date:
2013-07-05
Revision:
10:53f432e521a4
Parent:
9:47d6f205890b

File content as of revision 10:53f432e521a4:

#include "SCP1000.h"

SCP1000::SCP1000(PinName mosi, PinName miso, PinName sclk, PinName cs)
    : m_spi(mosi, miso, sclk)
    , m_cs(cs) {
    m_cs=1;
    m_spi.frequency(500000); // the fastest of the sensor
    m_spi.format(8, 0); // duda son dos palabras de 8 bits? 
    /*
    wait(0.5);
    //------------------------------------------------
    // pc.printf("RESET\r\n");
    write_register(0x06,0x01);
    wait(0.5);

    // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
    write_register(0x03,0x0A);
    wait(0.5);
    */
}

void SCP1000::init_scp1000(){
    //------------------------------------------------
    // pc.printf("RESET\r\n");
    write_register(0x06,0x01);
    wait(0.5);

    // pc.printf("Initialize High Resolution Constant Reading Mode\r\n");
    write_register(0x03,0x0A);
    wait(0.5);
}

unsigned long SCP1000::readPressure() {
    unsigned long pressure_msb = read_register(PRESSURE);
    pressure_msb &= 0x07;
    unsigned long pressure_lsb = read_register16(PRESSURE_LSB);
    unsigned long pressure = ((pressure_msb<<16)| pressure_lsb);
    pressure /= 4;
    
    return pressure;
}

float SCP1000::readTemperature() {
    float temp_in = read_register16(TEMP);
    temp_in /= 20;
    return temp_in;
}

 char SCP1000::read_register(char register_name) {
    register_name <<=2;
    register_name &= 0xFC;
    m_cs=0; //Select SPI device
    m_spi.write(register_name); //Send register location
    char register_value=m_spi.write(0x00);
    m_cs=1;
    return register_value;  
}

void SCP1000::write_register(char register_name, char register_value) {
    register_name <<= 2;
    register_name |= 0x02; //le estamos diciendo que escriba
    m_cs=0; //Select SPI device
    m_spi.write(register_name); //Send register location
    m_spi.write(register_value); //Send value to record into register
    m_cs=1;
}

float SCP1000::read_register16(char register_name) {   
    register_name <<= 2;
    register_name &= 0xFC; //Read command
    m_cs=0; //Select SPI Device
    m_spi.write(register_name); //Write byte to device
    int in_byte1 = m_spi.write(0x00);    
    int in_byte2 = m_spi.write(0x00);
    m_cs=1;
    float in_word= (in_byte1<<=8) | (in_byte2);   
    return(in_word);
}