Esempio n. 1
0
/*
*********************************************************************************************************
*	功能说明: 写指定的寄存器
*	形    参:  _RegID : 寄存器ID
*			  _RegValue : 寄存器值。 对于8位的寄存器,取32位形参的低8bit
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_WriteReg(unsigned char _RegID, unsigned long _RegValue) {
	unsigned char bits;

	switch (_RegID) {
		case REG_COMM:		/* 通信寄存器 */
		case REG_SETUP:		/* 设置寄存器 8bit */
		case REG_CLOCK:		/* 时钟寄存器 8bit */
			bits = 8;
			break;

		case REG_ZERO_CH1:	/* CH1 偏移寄存器 24bit */
		case REG_FULL_CH1:	/* CH1 满量程寄存器 24bit */
		case REG_ZERO_CH2:	/* CH2 偏移寄存器 24bit */
		case REG_FULL_CH2:	/* CH2 满量程寄存器 24bit*/
			bits = 24;
			break;

		case REG_DATA:		/* 数据寄存器 16bit */
		default:
			return;
	}

	TM7705_WriteByte(_RegID | WRITE);	/* 写通信寄存器, 指定下一步是写操作,并指定写哪个寄存器 */

	if (bits == 8) {
		TM7705_WriteByte((unsigned char)_RegValue);
	}
	else { //24 bits
		TM7705_Write3Byte(_RegValue);
	}
}
Esempio n. 2
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_SytemCalibFull
*	功能说明: 启动系统校准满位. 请将AIN+ AIN-接最大输入电压源,执行该函数。校准应该由主程序控制并保存校准参数。
*			 执行完毕后。可以通过 TM7705_ReadReg(REG_FULL_CH1) 和  TM7705_ReadReg(REG_FULL_CH2) 读取校准参数。
*	形    参:  _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_SytemCalibFull(unsigned char _ch) {
	if (_ch == 1) {
		/* 校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_FULL | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
	else if (_ch == 2) {
		/* 校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道2 */
		TM7705_WriteByte(MD_CAL_FULL | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
}
Esempio n. 3
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_CalibSelf
*	功能说明: 启动自校准. 内部自动短接AIN+ AIN-校准0位,内部短接到Vref 校准满位。此函数执行过程较长,
*			  实测约 180ms
*	形    参:  _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_CalibSelf(unsigned char _ch) {
	if (_ch == 1) {
		/* 自校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 --- 时间较长,约180ms */
	}
 	
 	else if (_ch == 2) {
		/* 自校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道2 */
		TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成  --- 时间较长,约180ms */
	}
}
Esempio n. 4
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_CalibSelf
*	功能说明: 启动自校准. 内部自动短接AIN+ AIN-校准0位,内部短接到Vref 校准满位。此函数执行过程较长,
*			  实测约 180ms
*	形    参:  _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR
TM7705_CalibSelf(uint8_t _ch)
{
	if (_ch == 1){
		/* 自校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 --- 时间较长,约180ms */
	}
	else if (_ch == 2){
		/* 自校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道2 */
		TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成  --- 时间较长,约180ms */
	}
	os_printf("TM7705_CalibSelf %d\r\n", _ch);
}
Esempio n. 5
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_ReadAdc1
*	功能说明: 读通道1或2的ADC数据
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
uint16_t ICACHE_FLASH_ATTR
TM7705_ReadAdc(u8 _ch)
{
	u8 i;
	u16 read = 0;

	/* 为了避免通道切换造成读数失效,读2次 */
	for (i = 0; i < 2; i++){
		TM7705_WaitDRDY();		/* 等待DRDY口线为0 */
		if (_ch == 1){
			TM7705_WriteByte(0x38);
		}else if (_ch == 2){
			TM7705_WriteByte(0x39);
		}
		read = TM7705_Read2Byte();
	}
	return read;
}
Esempio n. 6
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_SytemCalibZero
*	功能说明: 启动系统校准零位. 请将AIN+ AIN-短接后,执行该函数。校准应该由主程序控制并保存校准参数。
*			 执行完毕后。可以通过 TM7705_ReadReg(REG_ZERO_CH1) 和  TM7705_ReadReg(REG_ZERO_CH2) 读取校准参数。
*	形    参: _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR
TM7705_SytemCalibZero(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_ZERO | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
	else if (_ch == 2)
	{
		/* 校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_ZERO | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
}
Esempio n. 7
0
/*
*********************************************************************************************************
*	函 数 名: TM7705_ReadAdc
*	功能说明: 读通道1或2的ADC数据
*	形    参:  _ch : ADC通道,1或2
*	返 回 值: 0 ~ 65535
*********************************************************************************************************
*/
unsigned short TM7705_ReadAdc(unsigned char _ch) {
	unsigned char i;
	unsigned short read = 0;

	/* 为了避免通道切换造成读数失效,读3次 */
	for (i = 0; i < 3; i++) {
		TM7705_WaitDRDY();		/* 等待DRDY口线为0 */

		if (_ch == 1) {
			TM7705_WriteByte(0x38);
		}
		else if (_ch == 2) {
			TM7705_WriteByte(0x39);
		}

		read = TM7705_Read2Byte();
	}
	return read;
}
Esempio n. 8
0
//初始化
void TM7705_Init() {
	TM7705_ResetHard();		/* 硬件复位 */
	DelayMs(5);

	TM7705_SyncSPI();		/* 同步SPI接口时序 */
	DelayMs(5);

	/* 配置时钟寄存器 */
	/* 先写通信寄存器,下一步是写时钟寄存器 */
	TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);			
	/* 使能外部晶振,刷新速率50Hz */
	TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ);	
	//TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);	/* 刷新速率500Hz */

	/* 每次上电进行一次自校准 */
	TM7705_CalibSelf(1);	/* 内部自校准 CH1 */
	//TM7705_CalibSelf(2);	/* 内部自校准 CH2 */
	DelayMs(5);
}
Esempio n. 9
0
/*
*********************************************************************************************************
*	函 数 名: bsp_InitTM7705
*	功能说明: 配置STM32的GPIO和SPI接口,用于连接 TM7705
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR
bsp_InitTM7705(void)
{
	bsp_DelayMS(10);

	TM7705_ResetHard();		/* 硬件复位 */

	/*
		在接口序列丢失的情况下,如果在DIN 高电平的写操作持续了足够长的时间(至少 32个串行时钟周期),
		TM7705 将会回到默认状态。
	*/
	bsp_DelayMS(5);

	TM7705_SyncSPI();		/* 同步SPI接口时序 */

	bsp_DelayMS(5);

	/* 配置时钟寄存器 */
	TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);			/* 先写通信寄存器,下一步是写时钟寄存器 */

	TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ);	/* 刷新速率50Hz */
	//TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);	/* 刷新速率500Hz */

}
Esempio n. 10
0
/*
*********************************************************************************************************
*	功能说明: 读指定的寄存器
*	形    参:  _RegID : 寄存器ID
*			  _RegValue : 寄存器值。 对于8位的寄存器,取32位形参的低8bit
*	返 回 值: 读到的寄存器值。 对于8位的寄存器,取32位形参的低8bit
*********************************************************************************************************
*/
unsigned long TM7705_ReadReg(unsigned char _RegID) {
	unsigned char bits;
	unsigned long read;

	switch (_RegID) {
		case REG_COMM:		/* 通信寄存器 */
		case REG_SETUP:		/* 设置寄存器 8bit */
		case REG_CLOCK:		/* 时钟寄存器 8bit */
			bits = 8;
			break;

		case REG_ZERO_CH1:	/* CH1 偏移寄存器 24bit */
		case REG_FULL_CH1:	/* CH1 满量程寄存器 24bit */
		case REG_ZERO_CH2:	/* CH2 偏移寄存器 24bit */
		case REG_FULL_CH2:	/* CH2 满量程寄存器 24bit*/
			bits = 24;
			break;

		case REG_DATA:		/* 数据寄存器 16bit */
		default:
			return 0xFFFFFFFF;
	}

	TM7705_WriteByte(_RegID | READ);	/* 写通信寄存器, 指定下一步是写操作,并指定写哪个寄存器 */

	if (bits == 16) {
		read = TM7705_Read2Byte();
	}
	else if (bits == 8) {
		read = TM7705_ReadByte();
	}
	else { 	// 24 bits
		read = TM7705_Read3Byte();
	}
	return read;
}