近期调试过的tla2528采样芯片,以下为相关驱动代码记录:
1 c文件
/*******************************************************************************
- Function Name : sTla2528Init
- Description : 初始化TLA2528,TLA2528默认均为模拟输入,该函数可能不需要调用
- Input : None.
- Output : None.
- Return : None.
*******************************************************************************/
void sTla2528Init(uint8_t i2cAddress)
{
}
/*******************************************************************************
-
Function Name : sTLA2528_ReadChannels
-
Description : TLA2528所有channels读取采样值
-
Input : None.
-
Output : None.
-
Return : None.
*******************************************************************************/
uint16_t sTLA2528_ReadChannels(uint8_t i2cAddress,uint8_t channel)
{
uint16_t adc_value;uint8_t reg_value = channel & MANUAL_CHID_MASK;
sTLA2528_WriteReg_WithOpc(i2cAddress,0x08,MANUAL_CH_SEL_ADDRESS,reg_value);
sIIC_DlyUs(500);
adc_value = sTLA2528_SigleAdcRead(i2cAddress);
return adc_value;
}
/*******************************************************************************
-
Function Name : sTLA2528_SingleRegRead
-
Description: sTLA2528读ADC
-
Parameters:
-
Returns: None
*******************************************************************************/
uint16_t sTLA2528_SigleAdcRead(uint8_t i2cAddress)
{
uint16_t temp = 0;sIIC_Start();
sIIC_Send_Byte((i2cAddress<<1)+1);
sIIC_Wait_Ack();temp = sIIC_Read_Byte(1); //读取高8位
temp = temp << 8;
temp += sIIC_Read_Byte(0); //读取低8位 + 高8位 构成一个字
sIIC_Stop();
return temp;
}
/*******************************************************************************
-
Function Name : sTLA2528_SingleRegRead
-
Description: sTLA2528从寄存器读一个字节,注意与读ADC区分开
-
Parameters:
-
Returns: None
*******************************************************************************/
uint8_t sTLA2528_ReadReg_WithOpC(uint8_t i2cAddress,uint8_t i2cCmd,uint8_t RegAddress)
{
uint8_t temp = 0;sIIC_Start();
sIIC_Send_Byte(i2cAddress << 1);
sIIC_Wait_Ack();sIIC_Send_Byte(i2cCmd);
sIIC_Wait_Ack();
sIIC_Send_Byte(RegAddress);
sIIC_Wait_Ack();
sIIC_Stop();sIIC_Start();
sIIC_Send_Byte((i2cAddress<<1)+1);
sIIC_Wait_Ack();
temp = sIIC_Read_Byte(1); //读取高8位
sIIC_Stop();
return temp;
}
/*******************************************************************************
- Function Name : sTLA2528_WriteReg_WithOpc
- Description: sTLA2528写单一寄存器(手册图31)
- Parameters:
- Returns: None
*******************************************************************************/
void sTLA2528_WriteReg_WithOpc(uint8_t i2cAddress,uint8_t i2cCmd,uint8_t RegAddress,uint8_t RegData)
{
sIIC_Start();
sIIC_Send_Byte(i2cAddress << 1);
sIIC_Wait_Ack();
sIIC_Send_Byte(i2cCmd);
sIIC_Wait_Ack();
sIIC_Send_Byte(RegAddress);
sIIC_Wait_Ack();
sIIC_Send_Byte(RegData);
sIIC_Wait_Ack();
sIIC_Stop();
}
/*******************************************************************************
- Function Name : sTLA2528_WriteReg
- Description: sTLA2528不通过opc code
- Parameters:
- Returns: None
*******************************************************************************/
void sTLA2528_WriteReg(uint8_t i2cAddress,uint8_t RegAddress,uint8_t RegData)
{
sIIC_Start();
sIIC_Send_Byte(i2cAddress << 1);
sIIC_Wait_Ack();
sIIC_Send_Byte(RegAddress);
sIIC_Wait_Ack();
sIIC_Send_Byte(RegData);
sIIC_Wait_Ack();
sIIC_Stop();
}
/*******************************************************************************
-
Function Name : sReadReg
-
Description: 读取寄存器值
-
Parameters:
-
Returns: None
*******************************************************************************/
uint8_t sReadReg(uint8_t i2cAddress,uint8_t RegAddress)
{
uint8_t temp = 0;temp = sTLA2528_ReadReg_WithOpC(i2cAddress,0x10,RegAddress);
return temp;
}
2 头文件
//I2C总线2地址0x17
define TLA2528_I2C2_ADDR 0x17 //TLA2528 I2C地址
//I2C总线1地址0x14
define TLA2528_I2C1_ADDR 0x14 //TLA2528 I2C地址
/* MANUAL_CH_SEL register */
#define MANUAL_CH_SEL_ADDRESS ((uint8_t) 0x11)
#define MANUAL_CH_SEL_DEFAULT ((uint8_t) 0x00)
/* MANUAL_CHID field */
#define MANUAL_CHID_MASK ((uint8_t) 0x0F)
#define MANUAL_CHID_AIN0 ((uint8_t) 0x00) // DEFAULT
#define MANUAL_CHID_AIN1 ((uint8_t) 0x01)
#define MANUAL_CHID_AIN2 ((uint8_t) 0x02)
#define MANUAL_CHID_AIN3 ((uint8_t) 0x03)
#define MANUAL_CHID_AIN4 ((uint8_t) 0x04)
#define MANUAL_CHID_AIN5 ((uint8_t) 0x05)
#define MANUAL_CHID_AIN6 ((uint8_t) 0x06)
#define MANUAL_CHID_AIN7 ((uint8_t) 0x07)
3 应用层调用
应用层代码调用简略如下:
….
sIIC_Init();
while(1)
{
//定时任务100ms进来一次
//adc 0~4095
OpVolt24_1Adc = sTLA2528_ReadChannels(TLA2528_I2C1_ADDR,2)>>4;
sIIC_DlyUs(500); //延时
OpCurr24_1Adc = sTLA2528_ReadChannels(TLA2528_I2C1_ADDR,3)>>4;
sIIC_DlyUs(500); //延时
ThermalAdc = sTLA2528_ReadChannels(TLA2528_I2C2_ADDR,6)>>4;
sIIC_DlyUs(500); //延时
//adc 0~4095
IpVoltAdc = sTLA2528_ReadChannels(TLA2528_I2C2_ADDR,2)>>4;
sIIC_DlyUs(500); //延时
IpCurrAdc = sTLA2528_ReadChannels(TLA2528_I2C2_ADDR,3)>>4;
sIIC_DlyUs(500); //延时
OpVolt24_2Adc = sTLA2528_ReadChannels(TLA2528_I2C2_ADDR,4)>>4;
sIIC_DlyUs(500); //延时
OpCurr24_2Adc = sTLA2528_ReadChannels(TLA2528_I2C2_ADDR,5)>>4;
sIIC_DlyUs(500); //延时
….
仅供参考。
浙公网安备 33010602011771号