Manuel Caballero / ADS1231

Dependents:   weightscale Projet-BTS-balance Programme_Final_V6

Committer:
mcm
Date:
Mon Sep 18 13:51:20 2017 +0000
Revision:
1:16ae36a95be6
Parent:
0:5b0aa77c60ec
ADS1231 library was completed and it is ready for testing.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:16ae36a95be6 1 /**
mcm 1:16ae36a95be6 2 * @brief ADS1231.h
mcm 1:16ae36a95be6 3 * @details 24-Bit Analog-to-Digital Converter for Bridge Sensors.
mcm 1:16ae36a95be6 4 * Header file.
mcm 1:16ae36a95be6 5 *
mcm 1:16ae36a95be6 6 *
mcm 1:16ae36a95be6 7 * @return NA
mcm 1:16ae36a95be6 8 *
mcm 1:16ae36a95be6 9 * @author Manuel Caballero
mcm 1:16ae36a95be6 10 * @date 18/September/2017
mcm 1:16ae36a95be6 11 * @version 18/September/2017 The ORIGIN
mcm 1:16ae36a95be6 12 * @pre NaN.
mcm 1:16ae36a95be6 13 * @warning NaN
mcm 1:16ae36a95be6 14 * @pre This code belongs to Nimbus Centre ( http://www.nimbus.cit.ie ).
mcm 1:16ae36a95be6 15 */
mcm 1:16ae36a95be6 16 #ifndef ADS1231_H
mcm 1:16ae36a95be6 17 #define ADS1231_H
mcm 1:16ae36a95be6 18
mcm 1:16ae36a95be6 19 #include "mbed.h"
mcm 1:16ae36a95be6 20
mcm 1:16ae36a95be6 21
mcm 1:16ae36a95be6 22 /**
mcm 1:16ae36a95be6 23 Example:
mcm 1:16ae36a95be6 24
mcm 1:16ae36a95be6 25 #include "mbed.h"
mcm 1:16ae36a95be6 26 #include "ADS1231.h"
mcm 1:16ae36a95be6 27
mcm 1:16ae36a95be6 28 ADS1231 myWeightSensor ( p5, p6 );
mcm 1:16ae36a95be6 29 Serial pc ( USBTX, USBRX );
mcm 1:16ae36a95be6 30
mcm 1:16ae36a95be6 31 Ticker newReading;
mcm 1:16ae36a95be6 32 DigitalOut myled1 ( LED1 );
mcm 1:16ae36a95be6 33 DigitalOut myled2 ( LED2 );
mcm 1:16ae36a95be6 34 DigitalOut myled3 ( LED3 );
mcm 1:16ae36a95be6 35 DigitalOut myled4 ( LED4 );
mcm 1:16ae36a95be6 36
mcm 1:16ae36a95be6 37 ADS1231::ADS1231_status_t aux;
mcm 1:16ae36a95be6 38 ADS1231::Vector_count_t myData;
mcm 1:16ae36a95be6 39 ADS1231::Vector_mass_t myCalculatedMass;
mcm 1:16ae36a95be6 40 ADS1231::Vector_voltage_t myCalculatedVoltage;
mcm 1:16ae36a95be6 41
mcm 1:16ae36a95be6 42
mcm 1:16ae36a95be6 43 void readDATA ( void )
mcm 1:16ae36a95be6 44 {
mcm 1:16ae36a95be6 45 myled4 = 1;
mcm 1:16ae36a95be6 46
mcm 1:16ae36a95be6 47 aux = myWeightSensor.ADS1231_ReadRawData ( &myData, 4 );
mcm 1:16ae36a95be6 48 myCalculatedMass = myWeightSensor.ADS1231_CalculateMass ( &myData, 1.0, ADS1231::ADS1231_SCALE_kg );
mcm 1:16ae36a95be6 49 myCalculatedVoltage = myWeightSensor.ADS1231_CalculateVoltage ( &myData, 5.0 );
mcm 1:16ae36a95be6 50
mcm 1:16ae36a95be6 51 pc.printf( "Raw Data: %ld Mass: %0.5f kg Voltage: %0.5f mV\r\n", (uint32_t)myData.myRawValue, myCalculatedMass.myMass, 1000*myCalculatedVoltage.myVoltage );
mcm 1:16ae36a95be6 52
mcm 1:16ae36a95be6 53 myled4 = 0;
mcm 1:16ae36a95be6 54 }
mcm 1:16ae36a95be6 55
mcm 1:16ae36a95be6 56
mcm 1:16ae36a95be6 57 int main()
mcm 1:16ae36a95be6 58 {
mcm 1:16ae36a95be6 59 pc.baud ( 115200 );
mcm 1:16ae36a95be6 60
mcm 1:16ae36a95be6 61
mcm 1:16ae36a95be6 62 // Reset and wake the device up
mcm 1:16ae36a95be6 63 aux = myWeightSensor.ADS1231_PowerDown ();
mcm 1:16ae36a95be6 64 aux = myWeightSensor.ADS1231_Reset ();
mcm 1:16ae36a95be6 65 wait(1);
mcm 1:16ae36a95be6 66
mcm 1:16ae36a95be6 67
mcm 1:16ae36a95be6 68 // CALIBRATION time start!
mcm 1:16ae36a95be6 69 // 1. REMOVE THE MASS ON THE LOAD CELL ( ALL LEDs OFF ). Read data without any mass on the load cell
mcm 1:16ae36a95be6 70 aux = myWeightSensor.ADS1231_ReadData_WithoutMass ( &myData, 4 );
mcm 1:16ae36a95be6 71
mcm 1:16ae36a95be6 72 myled1 = 1;
mcm 1:16ae36a95be6 73 wait(3);
mcm 1:16ae36a95be6 74
mcm 1:16ae36a95be6 75
mcm 1:16ae36a95be6 76 // 2. PUT A KNOWN MASS ON THE LOAD CELL ( JUST LED1 ON ). Read data with an user-specified calibration mass
mcm 1:16ae36a95be6 77 aux = myWeightSensor.ADS1231_ReadData_WithCalibratedMass ( &myData, 4 );
mcm 1:16ae36a95be6 78 // CALIBRATION time end!
mcm 1:16ae36a95be6 79
mcm 1:16ae36a95be6 80
mcm 1:16ae36a95be6 81 // [ OPTIONAL ] REMOVE THE MASS ON THE LOAD CELL ( JUST LED2 ON ). Read the device without any mass to calculate the tare weight for 5 seconds
mcm 1:16ae36a95be6 82 myled1 = 0;
mcm 1:16ae36a95be6 83 myled2 = 1;
mcm 1:16ae36a95be6 84 wait(3);
mcm 1:16ae36a95be6 85 myled2 = 0;
mcm 1:16ae36a95be6 86
mcm 1:16ae36a95be6 87 // Calculating the tare weight ( JUST LED3 ON )
mcm 1:16ae36a95be6 88 myled3 = 1;
mcm 1:16ae36a95be6 89 aux = myWeightSensor.ADS1231_SetAutoTare ( ADS1231::ADS1231_SCALE_kg, &myData, 5 );
mcm 1:16ae36a95be6 90 myled3 = 0;
mcm 1:16ae36a95be6 91
mcm 1:16ae36a95be6 92
mcm 1:16ae36a95be6 93 newReading.attach( &readDATA, 0.5 ); // the address of the function to be attached ( readDATA ) and the interval ( 0.5s ) ( JUST LED4 BLINKING )
mcm 1:16ae36a95be6 94
mcm 1:16ae36a95be6 95 // Let the callbacks take care of everything
mcm 1:16ae36a95be6 96 while(1)
mcm 1:16ae36a95be6 97 {
mcm 1:16ae36a95be6 98 sleep();
mcm 1:16ae36a95be6 99 }
mcm 1:16ae36a95be6 100 }
mcm 1:16ae36a95be6 101
mcm 1:16ae36a95be6 102 */
mcm 1:16ae36a95be6 103
mcm 1:16ae36a95be6 104
mcm 1:16ae36a95be6 105 /*!
mcm 1:16ae36a95be6 106 Library for the ADS1231 24-Bit Analog-to-Digital Converter for Bridge Sensors.
mcm 1:16ae36a95be6 107 */
mcm 1:16ae36a95be6 108 class ADS1231
mcm 1:16ae36a95be6 109 {
mcm 1:16ae36a95be6 110 public:
mcm 1:16ae36a95be6 111 /**
mcm 1:16ae36a95be6 112 * @brief READY/BUSY DATA
mcm 1:16ae36a95be6 113 */
mcm 1:16ae36a95be6 114 typedef enum {
mcm 1:16ae36a95be6 115 ADS1231_DATA_BUSY = 0, /*!< ADS1231 data is NOT ready to be read. */
mcm 1:16ae36a95be6 116 ADS1231_DATA_READY = 1 /*!< ADS1231 data is ready to be read. */
mcm 1:16ae36a95be6 117 } ADS1231_data_output_status_t;
mcm 1:16ae36a95be6 118
mcm 1:16ae36a95be6 119
mcm 1:16ae36a95be6 120
mcm 1:16ae36a95be6 121 /**
mcm 1:16ae36a95be6 122 * @brief SCALE
mcm 1:16ae36a95be6 123 */
mcm 1:16ae36a95be6 124 typedef enum {
mcm 1:16ae36a95be6 125 ADS1231_SCALE_kg = 0, /*!< ADS1231 Scale in kg. */
mcm 1:16ae36a95be6 126 ADS1231_SCALE_g = 1, /*!< ADS1231 Scale in g. */
mcm 1:16ae36a95be6 127 ADS1231_SCALE_mg = 2, /*!< ADS1231 Scale in mg. */
mcm 1:16ae36a95be6 128 ADS1231_SCALE_ug = 3 /*!< ADS1231 Scale in ug. */
mcm 1:16ae36a95be6 129 } ADS1231_scale_t;
mcm 1:16ae36a95be6 130
mcm 1:16ae36a95be6 131
mcm 1:16ae36a95be6 132
mcm 1:16ae36a95be6 133
mcm 1:16ae36a95be6 134 #ifndef VECTOR_STRUCT_H
mcm 1:16ae36a95be6 135 #define VECTOR_STRUCT_H
mcm 1:16ae36a95be6 136 typedef struct {
mcm 1:16ae36a95be6 137 float myRawValue_WithCalibratedMass;
mcm 1:16ae36a95be6 138 float myRawValue_WithoutCalibratedMass;
mcm 1:16ae36a95be6 139 float myRawValue_TareWeight;
mcm 1:16ae36a95be6 140 uint32_t myRawValue;
mcm 1:16ae36a95be6 141 } Vector_count_t;
mcm 1:16ae36a95be6 142
mcm 1:16ae36a95be6 143 typedef struct {
mcm 1:16ae36a95be6 144 float myMass;
mcm 1:16ae36a95be6 145 } Vector_mass_t;
mcm 1:16ae36a95be6 146
mcm 1:16ae36a95be6 147 typedef struct {
mcm 1:16ae36a95be6 148 float myVoltage;
mcm 1:16ae36a95be6 149 } Vector_voltage_t;
mcm 1:16ae36a95be6 150 #endif
mcm 1:16ae36a95be6 151
mcm 1:16ae36a95be6 152
mcm 1:16ae36a95be6 153
mcm 1:16ae36a95be6 154 /**
mcm 1:16ae36a95be6 155 * @brief INTERNAL CONSTANTS
mcm 1:16ae36a95be6 156 */
mcm 1:16ae36a95be6 157 #define ADS1231_PIN_HIGH 0x01 /*!< Pin 'HIGH' */
mcm 1:16ae36a95be6 158 #define ADS1231_PIN_LOW 0x00 /*!< Pin 'LOW' */
mcm 1:16ae36a95be6 159
mcm 1:16ae36a95be6 160 typedef enum {
mcm 1:16ae36a95be6 161 ADS1231_SUCCESS = 0,
mcm 1:16ae36a95be6 162 ADS1231_FAILURE = 1,
mcm 1:16ae36a95be6 163 } ADS1231_status_t;
mcm 1:16ae36a95be6 164
mcm 1:16ae36a95be6 165
mcm 1:16ae36a95be6 166
mcm 1:16ae36a95be6 167
mcm 1:16ae36a95be6 168 /** Create an ADS1231 object connected to the specified pins.
mcm 1:16ae36a95be6 169 *
mcm 1:16ae36a95be6 170 * @param sclk ADS1231 Power down control (high active) and serial clock input
mcm 1:16ae36a95be6 171 * @param dout ADS1231 Serial data output
mcm 1:16ae36a95be6 172 */
mcm 1:16ae36a95be6 173 ADS1231 ( PinName SCLK, PinName DOUT );
mcm 1:16ae36a95be6 174
mcm 1:16ae36a95be6 175 /** Delete ADS1231 object.
mcm 1:16ae36a95be6 176 */
mcm 1:16ae36a95be6 177 ~ADS1231();
mcm 1:16ae36a95be6 178
mcm 1:16ae36a95be6 179 /** It performs an internal reset.
mcm 1:16ae36a95be6 180 */
mcm 1:16ae36a95be6 181 ADS1231_status_t ADS1231_Reset ( void );
mcm 1:16ae36a95be6 182
mcm 1:16ae36a95be6 183 /** It puts the device into power-down mode.
mcm 1:16ae36a95be6 184 */
mcm 1:16ae36a95be6 185 ADS1231_status_t ADS1231_PowerDown ( void );
mcm 1:16ae36a95be6 186
mcm 1:16ae36a95be6 187 /** It reads raw data from the device.
mcm 1:16ae36a95be6 188 */
mcm 1:16ae36a95be6 189 ADS1231_status_t ADS1231_ReadRawData ( Vector_count_t* myNewRawData, uint32_t myAverage );
mcm 1:16ae36a95be6 190
mcm 1:16ae36a95be6 191 /** It reads raw data with an user-specified calibrated mass.
mcm 1:16ae36a95be6 192 */
mcm 1:16ae36a95be6 193 ADS1231_status_t ADS1231_ReadData_WithCalibratedMass ( Vector_count_t* myNewRawData, uint32_t myAverage );
mcm 1:16ae36a95be6 194
mcm 1:16ae36a95be6 195 /** It reads raw data without any mass.
mcm 1:16ae36a95be6 196 */
mcm 1:16ae36a95be6 197 ADS1231_status_t ADS1231_ReadData_WithoutMass ( Vector_count_t* myNewRawData, uint32_t myAverage );
mcm 1:16ae36a95be6 198
mcm 1:16ae36a95be6 199 /** It reads raw data without any mass after the system is calibrated.
mcm 1:16ae36a95be6 200 */
mcm 1:16ae36a95be6 201 ADS1231_status_t ADS1231_SetAutoTare ( float myCalibratedMass, ADS1231_scale_t myScaleCalibratedMass, Vector_count_t* myNewRawData, float myTime );
mcm 1:16ae36a95be6 202
mcm 1:16ae36a95be6 203 /** It sets a tare weight manually.
mcm 1:16ae36a95be6 204 */
mcm 1:16ae36a95be6 205 Vector_count_t ADS1231_SetManualTare ( float myTareWeight );
mcm 1:16ae36a95be6 206
mcm 1:16ae36a95be6 207 /** It calculates scaled data.
mcm 1:16ae36a95be6 208 */
mcm 1:16ae36a95be6 209 Vector_mass_t ADS1231_CalculateMass ( Vector_count_t* myNewRawData, float myCalibratedMass, ADS1231_scale_t myScaleCalibratedMass );
mcm 1:16ae36a95be6 210
mcm 1:16ae36a95be6 211 /** It calculates voltage data.
mcm 1:16ae36a95be6 212 */
mcm 1:16ae36a95be6 213 Vector_voltage_t ADS1231_CalculateVoltage ( Vector_count_t* myNewRawData, float myVoltageReference );
mcm 1:16ae36a95be6 214
mcm 1:16ae36a95be6 215
mcm 1:16ae36a95be6 216
mcm 1:16ae36a95be6 217
mcm 1:16ae36a95be6 218 private:
mcm 1:16ae36a95be6 219 DigitalOut _SCLK;
mcm 1:16ae36a95be6 220 DigitalIn _DOUT;
mcm 1:16ae36a95be6 221 ADS1231_scale_t _ADS1231_SCALE;
mcm 1:16ae36a95be6 222 float _ADS1231_USER_CALIBATED_MASS;
mcm 1:16ae36a95be6 223 };
mcm 1:16ae36a95be6 224
mcm 1:16ae36a95be6 225 #endif