|
@@ -1,10 +1,10 @@
|
|
|
/*
|
|
/*
|
|
|
- * File name : HP20x_dev.cpp
|
|
|
|
|
- * Description: Driver for I2C PRECISION BAROMETER AND ALTIMETER [HP206C]
|
|
|
|
|
- * Author : Oliver Wang from Seeed studio
|
|
|
|
|
- * Version : V0.1
|
|
|
|
|
- * Create Time: 2014/04
|
|
|
|
|
- * Change Log :
|
|
|
|
|
|
|
+ File name : HP20x_dev.cpp
|
|
|
|
|
+ Description: Driver for I2C PRECISION BAROMETER AND ALTIMETER [HP206C]
|
|
|
|
|
+ Author : Oliver Wang from Seeed studio
|
|
|
|
|
+ Version : V0.1
|
|
|
|
|
+ Create Time: 2014/04
|
|
|
|
|
+ Change Log :
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
/****************************************************************************/
|
|
/****************************************************************************/
|
|
@@ -17,7 +17,7 @@
|
|
|
/****************************************************************************/
|
|
/****************************************************************************/
|
|
|
/*** Local Variable ***/
|
|
/*** Local Variable ***/
|
|
|
/****************************************************************************/
|
|
/****************************************************************************/
|
|
|
- HP20x_dev HP20x;
|
|
|
|
|
|
|
+HP20x_dev HP20x;
|
|
|
|
|
|
|
|
|
|
|
|
|
/****************************************************************************/
|
|
/****************************************************************************/
|
|
@@ -30,10 +30,9 @@
|
|
|
**@ OutPut: none
|
|
**@ OutPut: none
|
|
|
**@ Retval: none
|
|
**@ Retval: none
|
|
|
*/
|
|
*/
|
|
|
-HP20x_dev::HP20x_dev()
|
|
|
|
|
-{
|
|
|
|
|
|
|
+HP20x_dev::HP20x_dev() {
|
|
|
OSR_CFG = HP20X_CONVERT_OSR1024;
|
|
OSR_CFG = HP20X_CONVERT_OSR1024;
|
|
|
- OSR_ConvertTime = 25;
|
|
|
|
|
|
|
+ OSR_ConvertTime = 25;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -43,12 +42,11 @@ HP20x_dev::HP20x_dev()
|
|
|
**@ OutPut: none
|
|
**@ OutPut: none
|
|
|
**@ Retval: none
|
|
**@ Retval: none
|
|
|
*/
|
|
*/
|
|
|
-void HP20x_dev::begin()
|
|
|
|
|
-{
|
|
|
|
|
- Wire.begin();
|
|
|
|
|
- /* Reset HP20x_dev */
|
|
|
|
|
- HP20x.HP20X_IIC_WriteCmd(HP20X_SOFT_RST);
|
|
|
|
|
- HP20x.HP20X_EnableCompensate();
|
|
|
|
|
|
|
+void HP20x_dev::begin() {
|
|
|
|
|
+ Wire.begin();
|
|
|
|
|
+ /* Reset HP20x_dev */
|
|
|
|
|
+ HP20x.HP20X_IIC_WriteCmd(HP20X_SOFT_RST);
|
|
|
|
|
+ HP20x.HP20X_EnableCompensate();
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -59,72 +57,69 @@ void HP20x_dev::begin()
|
|
|
**@ OutPut:
|
|
**@ OutPut:
|
|
|
**@ Retval:
|
|
**@ Retval:
|
|
|
*/
|
|
*/
|
|
|
-ulong HP20x_dev::ReadTemperature(void)
|
|
|
|
|
-{
|
|
|
|
|
- HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD|OSR_CFG); //ADC convert
|
|
|
|
|
- delay(OSR_ConvertTime); //difference OSR_CFG will be difference OSR_ConvertTime
|
|
|
|
|
- HP20X_IIC_WriteCmd(HP20X_READ_T);
|
|
|
|
|
- ulong Temperature = HP20X_IIC_ReadData();
|
|
|
|
|
- return Temperature;
|
|
|
|
|
|
|
+ulong HP20x_dev::ReadTemperature(void) {
|
|
|
|
|
+ HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD | OSR_CFG); //ADC convert
|
|
|
|
|
+ delay(OSR_ConvertTime); //difference OSR_CFG will be difference OSR_ConvertTime
|
|
|
|
|
+ HP20X_IIC_WriteCmd(HP20X_READ_T);
|
|
|
|
|
+ ulong Temperature = HP20X_IIC_ReadData();
|
|
|
|
|
+ return Temperature;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
**@ Function name: ReadPressure
|
|
**@ Function name: ReadPressure
|
|
|
**@ Description: Read Pressure value
|
|
**@ Description: Read Pressure value
|
|
|
**@ Input:
|
|
**@ Input:
|
|
|
- **@ OutPut:
|
|
|
|
|
|
|
+ **@ OutPut:
|
|
|
**@ Retval: value
|
|
**@ Retval: value
|
|
|
*/
|
|
*/
|
|
|
-
|
|
|
|
|
-ulong HP20x_dev::ReadPressure(void)
|
|
|
|
|
-{
|
|
|
|
|
- HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD|OSR_CFG);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ulong HP20x_dev::ReadPressure(void) {
|
|
|
|
|
+ HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD | OSR_CFG);
|
|
|
delay(OSR_ConvertTime);
|
|
delay(OSR_ConvertTime);
|
|
|
HP20X_IIC_WriteCmd(HP20X_READ_P);
|
|
HP20X_IIC_WriteCmd(HP20X_READ_P);
|
|
|
- ulong Pressure = HP20X_IIC_ReadData();
|
|
|
|
|
|
|
+ ulong Pressure = HP20X_IIC_ReadData();
|
|
|
return Pressure;
|
|
return Pressure;
|
|
|
-}
|
|
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
**@ Function name: ReadAltitude
|
|
**@ Function name: ReadAltitude
|
|
|
**@ Description: Read Pressure value
|
|
**@ Description: Read Pressure value
|
|
|
**@ Input:
|
|
**@ Input:
|
|
|
- **@ OutPut:
|
|
|
|
|
|
|
+ **@ OutPut:
|
|
|
**@ Retval: value
|
|
**@ Retval: value
|
|
|
*/
|
|
*/
|
|
|
-ulong HP20x_dev::ReadAltitude(void)
|
|
|
|
|
-{
|
|
|
|
|
|
|
+ulong HP20x_dev::ReadAltitude(void) {
|
|
|
HP20X_IIC_WriteCmd(HP20X_READ_A);
|
|
HP20X_IIC_WriteCmd(HP20X_READ_A);
|
|
|
- ulong Altitude = HP20X_IIC_ReadData();
|
|
|
|
|
- return Altitude;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
|
|
+ ulong Altitude = HP20X_IIC_ReadData();
|
|
|
|
|
+ return Altitude;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
-void ReadPressureAndTemperature(void)
|
|
|
|
|
-{
|
|
|
|
|
|
|
+ void ReadPressureAndTemperature(void)
|
|
|
|
|
+ {
|
|
|
HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD|OSR_CFG);
|
|
HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD|OSR_CFG);
|
|
|
Timer_Delayxms(OSR_ConvertTime*2);
|
|
Timer_Delayxms(OSR_ConvertTime*2);
|
|
|
HP20X_IIC_WriteCmd(HP20X_READ_PT);
|
|
HP20X_IIC_WriteCmd(HP20X_READ_PT);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Temperature=HP20X_IIC_ReadData();
|
|
Temperature=HP20X_IIC_ReadData();
|
|
|
-
|
|
|
|
|
- Pressure=HP20X_IIC_ReadData3byte();
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
-void IIC_ReadAltitudeAndTemperature(void)
|
|
|
|
|
-{
|
|
|
|
|
|
|
+ Pressure=HP20X_IIC_ReadData3byte();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ void IIC_ReadAltitudeAndTemperature(void)
|
|
|
|
|
+ {
|
|
|
|
|
|
|
|
HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD|OSR_CFG);
|
|
HP20X_IIC_WriteCmd(HP20X_WR_CONVERT_CMD|OSR_CFG);
|
|
|
Timer_Delayxms(OSR_ConvertTime*2);
|
|
Timer_Delayxms(OSR_ConvertTime*2);
|
|
|
HP20X_IIC_WriteCmd(HP20X_READ_AT);
|
|
HP20X_IIC_WriteCmd(HP20X_READ_AT);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
Temperature=HP20X_IIC_ReadData();
|
|
Temperature=HP20X_IIC_ReadData();
|
|
|
IIC_ACK();
|
|
IIC_ACK();
|
|
|
Altitude=HP20X_IIC_ReadData3byte();
|
|
Altitude=HP20X_IIC_ReadData3byte();
|
|
|
- IIC_NoAck();
|
|
|
|
|
- IIC_Stop();
|
|
|
|
|
-
|
|
|
|
|
-}*/
|
|
|
|
|
|
|
+ IIC_NoAck();
|
|
|
|
|
+ IIC_Stop();
|
|
|
|
|
+
|
|
|
|
|
+ }*/
|
|
|
/****************************************************************************/
|
|
/****************************************************************************/
|
|
|
/*** Local Functions ***/
|
|
/*** Local Functions ***/
|
|
|
/****************************************************************************/
|
|
/****************************************************************************/
|
|
@@ -136,12 +131,11 @@ void IIC_ReadAltitudeAndTemperature(void)
|
|
|
**@ OutPut:
|
|
**@ OutPut:
|
|
|
**@ Retval:
|
|
**@ Retval:
|
|
|
*/
|
|
*/
|
|
|
-void HP20x_dev::HP20X_IIC_WriteCmd(uchar uCmd)
|
|
|
|
|
-{
|
|
|
|
|
- /* Port to arduino */
|
|
|
|
|
- Wire.beginTransmission(HP20X_I2C_DEV_ID);
|
|
|
|
|
- Wire.write(uCmd);
|
|
|
|
|
- Wire.endTransmission();
|
|
|
|
|
|
|
+void HP20x_dev::HP20X_IIC_WriteCmd(uchar uCmd) {
|
|
|
|
|
+ /* Port to arduino */
|
|
|
|
|
+ Wire.beginTransmission(HP20X_I2C_DEV_ID);
|
|
|
|
|
+ Wire.write(uCmd);
|
|
|
|
|
+ Wire.endTransmission();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -149,25 +143,24 @@ void HP20x_dev::HP20X_IIC_WriteCmd(uchar uCmd)
|
|
|
**@ Description:
|
|
**@ Description:
|
|
|
**@ Input:
|
|
**@ Input:
|
|
|
**@ OutPut:
|
|
**@ OutPut:
|
|
|
- **@ Retval:
|
|
|
|
|
|
|
+ **@ Retval:
|
|
|
*/
|
|
*/
|
|
|
-uchar HP20x_dev::HP20X_IIC_ReadReg(uchar bReg)
|
|
|
|
|
-{
|
|
|
|
|
|
|
+uchar HP20x_dev::HP20X_IIC_ReadReg(uchar bReg) {
|
|
|
/* Port to arduino */
|
|
/* Port to arduino */
|
|
|
uchar Temp = 0;
|
|
uchar Temp = 0;
|
|
|
-
|
|
|
|
|
- /* Send a register reading command */
|
|
|
|
|
- HP20X_IIC_WriteCmd(bReg|HP20X_RD_REG_MODE);
|
|
|
|
|
-
|
|
|
|
|
- Wire.requestFrom(HP20X_I2C_DEV_ID, 1);
|
|
|
|
|
- // while(Wire.available())
|
|
|
|
|
- // {
|
|
|
|
|
- // Temp = Wire.read();
|
|
|
|
|
- // }
|
|
|
|
|
- Temp = Wire.read();
|
|
|
|
|
-
|
|
|
|
|
- return Temp;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /* Send a register reading command */
|
|
|
|
|
+ HP20X_IIC_WriteCmd(bReg | HP20X_RD_REG_MODE);
|
|
|
|
|
+
|
|
|
|
|
+ Wire.requestFrom(HP20X_I2C_DEV_ID, 1);
|
|
|
|
|
+ // while(Wire.available())
|
|
|
|
|
+ // {
|
|
|
|
|
+ // Temp = Wire.read();
|
|
|
|
|
+ // }
|
|
|
|
|
+ Temp = Wire.read();
|
|
|
|
|
+
|
|
|
|
|
+ return Temp;
|
|
|
|
|
+}
|
|
|
/*
|
|
/*
|
|
|
**@ Function name: HP20X_IIC_WriteReg
|
|
**@ Function name: HP20X_IIC_WriteReg
|
|
|
**@ Description:
|
|
**@ Description:
|
|
@@ -175,12 +168,11 @@ uchar HP20x_dev::HP20X_IIC_ReadReg(uchar bReg)
|
|
|
**@ OutPut:
|
|
**@ OutPut:
|
|
|
**@ Retval:
|
|
**@ Retval:
|
|
|
*/
|
|
*/
|
|
|
-void HP20x_dev::HP20X_IIC_WriteReg(uchar bReg,uchar bData)
|
|
|
|
|
-{
|
|
|
|
|
- Wire.beginTransmission(HP20X_I2C_DEV_ID);
|
|
|
|
|
- Wire.write(bReg|HP20X_WR_REG_MODE);
|
|
|
|
|
- Wire.write(bData);
|
|
|
|
|
- Wire.endTransmission();
|
|
|
|
|
|
|
+void HP20x_dev::HP20X_IIC_WriteReg(uchar bReg, uchar bData) {
|
|
|
|
|
+ Wire.beginTransmission(HP20X_I2C_DEV_ID);
|
|
|
|
|
+ Wire.write(bReg | HP20X_WR_REG_MODE);
|
|
|
|
|
+ Wire.write(bData);
|
|
|
|
|
+ Wire.endTransmission();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -191,11 +183,10 @@ void HP20x_dev::HP20X_IIC_WriteReg(uchar bReg,uchar bData)
|
|
|
**@ OutPut:
|
|
**@ OutPut:
|
|
|
**@ Retval:
|
|
**@ Retval:
|
|
|
*/
|
|
*/
|
|
|
-ulong HP20x_dev::HP20X_IIC_ReadData(void)
|
|
|
|
|
-{
|
|
|
|
|
- /* Port to arduino */
|
|
|
|
|
- ulong Temp = HP20X_IIC_ReadData3byte();
|
|
|
|
|
- return Temp;
|
|
|
|
|
|
|
+ulong HP20x_dev::HP20X_IIC_ReadData(void) {
|
|
|
|
|
+ /* Port to arduino */
|
|
|
|
|
+ ulong Temp = HP20X_IIC_ReadData3byte();
|
|
|
|
|
+ return Temp;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -205,60 +196,55 @@ ulong HP20x_dev::HP20X_IIC_ReadData(void)
|
|
|
**@ OutPut:
|
|
**@ OutPut:
|
|
|
**@ Retval:
|
|
**@ Retval:
|
|
|
*/
|
|
*/
|
|
|
-ulong HP20x_dev::HP20X_IIC_ReadData3byte(void)
|
|
|
|
|
-{
|
|
|
|
|
- ulong TempData = 0;
|
|
|
|
|
- ulong tmpArray[3]={0};
|
|
|
|
|
- int cnt = 0;
|
|
|
|
|
-
|
|
|
|
|
- /* Require three bytes from slave */
|
|
|
|
|
- Wire.requestFrom(HP20X_I2C_DEV_ID, 3);
|
|
|
|
|
-
|
|
|
|
|
- while(Wire.available()) // slave may send less than requested
|
|
|
|
|
- {
|
|
|
|
|
- uchar c = Wire.read(); // receive a byte as character
|
|
|
|
|
- tmpArray[cnt] = (ulong)c;
|
|
|
|
|
- cnt++;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /* MSB */
|
|
|
|
|
- TempData = tmpArray[0]<<16 | tmpArray[1]<<8 | tmpArray[2];
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- if(TempData&0x800000)
|
|
|
|
|
- {
|
|
|
|
|
- TempData|=0xff000000;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /* // 24 bit to 32 bit
|
|
|
|
|
- if(TempData&0x800000)
|
|
|
|
|
- {
|
|
|
|
|
- // 1:minus
|
|
|
|
|
- TempData |= 0x80000000;
|
|
|
|
|
- TempData &= 0xff7fffff;
|
|
|
|
|
- }
|
|
|
|
|
- else
|
|
|
|
|
- {
|
|
|
|
|
- // 0:plus
|
|
|
|
|
- //do noting
|
|
|
|
|
- } */
|
|
|
|
|
- return TempData;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ulong HP20x_dev::HP20X_IIC_ReadData3byte(void) {
|
|
|
|
|
+ ulong TempData = 0;
|
|
|
|
|
+ ulong tmpArray[3] = {0};
|
|
|
|
|
+ int cnt = 0;
|
|
|
|
|
+
|
|
|
|
|
+ /* Require three bytes from slave */
|
|
|
|
|
+ Wire.requestFrom(HP20X_I2C_DEV_ID, 3);
|
|
|
|
|
+
|
|
|
|
|
+ while (Wire.available()) { // slave may send less than requested
|
|
|
|
|
+ uchar c = Wire.read(); // receive a byte as character
|
|
|
|
|
+ tmpArray[cnt] = (ulong)c;
|
|
|
|
|
+ cnt++;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* MSB */
|
|
|
|
|
+ TempData = tmpArray[0] << 16 | tmpArray[1] << 8 | tmpArray[2];
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ if (TempData & 0x800000) {
|
|
|
|
|
+ TempData |= 0xff000000;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /* // 24 bit to 32 bit
|
|
|
|
|
+ if(TempData&0x800000)
|
|
|
|
|
+ {
|
|
|
|
|
+ // 1:minus
|
|
|
|
|
+ TempData |= 0x80000000;
|
|
|
|
|
+ TempData &= 0xff7fffff;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ // 0:plus
|
|
|
|
|
+ //do noting
|
|
|
|
|
+ } */
|
|
|
|
|
+ return TempData;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @brief Enable Compensation by set CMPS_EN bit on 0x0F PARA register
|
|
|
|
|
|
|
+ @brief Enable Compensation by set CMPS_EN bit on 0x0F PARA register
|
|
|
*/
|
|
*/
|
|
|
-void HP20x_dev::HP20X_EnableCompensate(void)
|
|
|
|
|
-{
|
|
|
|
|
- HP20X_IIC_WriteReg(REG_PARA, OK_HP20X_DEV);
|
|
|
|
|
|
|
+void HP20x_dev::HP20X_EnableCompensate(void) {
|
|
|
|
|
+ HP20X_IIC_WriteReg(REG_PARA, OK_HP20X_DEV);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * @brief Disable Compensation by clear CMPS_EN bit on 0x0F PARA register
|
|
|
|
|
|
|
+ @brief Disable Compensation by clear CMPS_EN bit on 0x0F PARA register
|
|
|
*/
|
|
*/
|
|
|
-void HP20x_dev::HP20X_DisableCompensate(void)
|
|
|
|
|
-{
|
|
|
|
|
- HP20X_IIC_WriteReg(REG_PARA, 0);
|
|
|
|
|
|
|
+void HP20x_dev::HP20X_DisableCompensate(void) {
|
|
|
|
|
+ HP20X_IIC_WriteReg(REG_PARA, 0);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**************************************END OF FILE**************************************/
|
|
/**************************************END OF FILE**************************************/
|