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.
Dependents: weightscale Projet-BTS-balance Programme_Final_V6
ADS1231.h@1:16ae36a95be6, 2017-09-18 (annotated)
- 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?
User | Revision | Line number | New 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 |