Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
Diff: libraries/cn0357/cn0357.cpp
- Revision:
- 4:5c1b28aff7e1
- Parent:
- 3:1a8c14043a4e
--- a/libraries/cn0357/cn0357.cpp Fri Apr 01 10:53:41 2016 +0300
+++ b/libraries/cn0357/cn0357.cpp Tue Apr 19 17:55:14 2016 +0300
@@ -60,8 +60,9 @@
*/
CN0357::CN0357(PinName CSAD7790, PinName CSAD5270, PinName MOSI, PinName MISO,
PinName SCK) :
- ad7790(CSAD7790, MOSI, MISO, SCK), ad5270(CSAD5270, 20000.0, MOSI, MISO, SCK) ,
- _sensor_sensitivity(0), _sensor_range(0), _RDACvalue(0)
+ _vref(1.2), _sensor_sensitivity(0), _sensor_range(0), _RDACvalue(0),
+ ad7790(_vref, CSAD7790, MOSI, MISO, SCK), ad5270(CSAD5270, 20000.0, MOSI, MISO, SCK)
+
{
}
@@ -79,11 +80,11 @@
ad7790.frequency(500000);
float resistance = set_sensor_parameters(range, sensitivity);
- _rdac_init(resistance);
+
if(jp == INTERNAL_AD7790) {
_AD7790_init(mode_val, filter_val);
}
-
+ _rdac_init(resistance);
}
/**
@@ -108,10 +109,13 @@
void CN0357::_AD7790_init(uint8_t mode_val, uint8_t filter_val)
{
ad7790.reset();
- // wait_ms(1000);
- ad7790.write_reg(AD7790::MODE_REG, mode_val);
- ad7790.write_reg(AD7790::FILTER_REG, filter_val);
+ wait_ms(50);
+ ad7790.write_mode_reg(mode_val);
+ wait_us(2);
+
+ ad7790.write_filter_reg(filter_val);
+ wait_ms(50);
}
/**
@@ -120,7 +124,7 @@
*/
uint8_t CN0357::read_adc_status(void)
{
- return ad7790.read_reg(AD7790::STATUS_REG);
+ return ad7790.read_status_reg();
}
/**
@@ -129,7 +133,7 @@
*/
float CN0357::read_sensor_voltage(void)
{
- return data_to_voltage(read_sensor());
+ return ad7790.read_voltage();
}
/**
@@ -138,7 +142,7 @@
*/
uint16_t CN0357::read_sensor(void)
{
- return ad7790.read_data();
+ return ad7790.read_u16();
}
/**
@@ -147,7 +151,7 @@
*/
float CN0357::read_ppm()
{
- return calc_ppm(read_sensor_voltage()); /* Convert voltage to Gas concentration*/
+ return calc_ppm(ad7790.read_voltage()); /* Convert voltage to Gas concentration*/
}
/**
@@ -169,7 +173,7 @@
*/
float CN0357::data_to_voltage(uint16_t data)
{
- return ((static_cast<float>(data) / pow(2, 15)) - 1) * 1.2; /* Bipolar voltage computation from ADC code */
+ return ad7790.data_to_voltage(data);
}
/**
@@ -179,12 +183,7 @@
*/
void CN0357::set_RDAC_value(float resistance)
{
- // Compute for the RDAC code nearest to the required feedback resistance
- uint16_t RDAC_val = (resistance / 20000.0) * 1024.0;
- // Compute for the constants used in voltage and PPM conversion computation
- _RDACvalue = ((static_cast<float> (RDAC_val) * 20000.0) / 1024.0);
- ad5270.write_cmd(AD5270::WRITE_CTRL_REG, 0x02); // RDAC register write protect - allow update of wiper position through digital interface
- ad5270.write_cmd(AD5270::WRITE_RDAC, RDAC_val); // write data to the RDAC register
+ _RDACvalue = ad5270.write_RDAC(resistance);
}
/**
@@ -208,7 +207,7 @@
{
_sensor_sensitivity = static_cast<float>(sensitivity);
_sensor_range = range;
- return (1.2 / (static_cast<float>(_sensor_range * _sensor_sensitivity)));
+ return (_vref / (static_cast<float>(_sensor_range * _sensor_sensitivity)));
}
/**
CN0357 - Toxic gas measurement
CN0216 - Weight Scale