12-Bit, 8-Channel, ADC System Monitor w/ Temp Sensor, Internal/External Reference, & I2C Interface
Dependents: ADC128D818_HelloWorld
Diff: ADC128D818.cpp
- Revision:
- 1:5f9dbbbc34c5
- Parent:
- 0:9cc68ef524da
--- a/ADC128D818.cpp Tue Aug 27 11:38:38 2013 +0000 +++ b/ADC128D818.cpp Mon Sep 02 11:39:46 2013 +0000 @@ -1,16 +1,60 @@ - +/** + * @brief ADC128D818 12-Bit, 8-Channel, ADC System Monitor w/ Temp Sensor, Internal/External Reference, & I2C Interfac + * http://www.ti.com/product/adc128d818/ + * @date 02/09/2013 + * @author F.BLANC LAAS-CNRS + * http://homepages.laas.fr/fblanc/ + */ + #include "ADC128D818.h" -//Create instance +/** + * @brief Constructor. + * + * @param sda I2C + * @param scl I2C + * @param adc_int + */ ADC128D818::ADC128D818(PinName sda, PinName scl, PinName adc_int) : _i2c(sda, scl), _Adc_Int (adc_int) { } -//destroy instance +/** + * @brief Destructor. + */ ADC128D818::~ADC128D818() { } +/** + * @brief init + * + * @param address I2C (7bits) + ADC_ADDRESS_LOW_LOW + ADC_ADDRESS_LOW_MID + ADC_ADDRESS_LOW_HIGH + ADC_ADDRESS_MID_LOW + ADC_ADDRESS_MID_MID + ADC_ADDRESS_MID_HIGH + ADC_ADDRESS_HIGH_LOW + ADC_ADDRESS_HIGH_MID + ADC_ADDRESS_HIGH_HIGH + * @param mode : + ADC_MODE_0 + ADC_MODE_1 + ADC_MODE_2 + ADC_MODE_3 + * @param vref + ADC_VREF_INT + ADC_VREF_EXT + * @param rate + ADC_RATE_LOW_POWER + ADC_RATE_CONTINUOUS + * @param mask_channel + * @param mask_int + * @return error 0 OK, -1 NO DEVICE, -2 ADC is BUSY + * @date 02/09/2013 + */ int ADC128D818::init(char address, char mode, char vref, char rate, char mask_channel, char mask_int) { @@ -100,36 +144,57 @@ return 0; } - -int ADC128D818::init_limit(char channel, int limit, char high_low) +/** + * @brief init_limit + * + * @param limit + * @param high_low + ADC_LIMIT_HIGH + ADC_LIMIT_LOW + * @return error 0 OK + * @date 02/09/2013 + */ +int ADC128D818::init_limit(char channel, char limit, char high_low) { - char cmd_data[3]; - char *ptr; - cmd_data[0]=ADC_REG_Limit_Registers + channel + high_low; - ptr=(char *) & limit; - cmd_data[1]=*ptr; - cmd_data[2]=*++ptr; + char cmd_data[2]; + + cmd_data[0]=ADC_REG_Limit_Registers + channel * 2 + high_low; - _i2c.write(_address, cmd_data, 3); //send a byte & wait acknowledged + cmd_data[1]=limit; + + + _i2c.write(_address, cmd_data, 2); //send a byte & wait acknowledged return 0; } - +/** + * @brief read_channel + * @param channel + * @return u32_data + * @date 02/09/2013 + */ int ADC128D818::read_channel(char channel) { - + int u32_data=0; char data[2]; -// char *ptr; + char *ptr; char cmd[1] ; cmd[0] = ADC_REG_Channel_Readings_Registers + channel; _i2c.write(_address, cmd, 1); //send a byte & wait acknowledged - //ptr=(char *) & data; + _i2c.read(_address,data,2); //read a byte - - return (int) data[0]*256+data[1]; + ptr=(char *) & u32_data; + ptr[0]=data[1]; + ptr[1]=data[0]; + return u32_data; } - +/** + * @brief read_register + * @param Register + * @return u8_data + * @date 02/09/2013 + */ char ADC128D818::read_register(char Register) { @@ -141,7 +206,10 @@ return cmd; } - +/** + * @brief start + * @date 02/09/2013 + */ void ADC128D818::start() { char cmd_data[2]; @@ -151,6 +219,10 @@ _i2c.write(_address, cmd_data, 2); //send a 2 byte } +/** + * @brief stop + * @date 02/09/2013 + */ void ADC128D818::stop() { char cmd_data[2];