⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adt_if.h

📁 ADT7470驱动,SM-BUS接口,驱动,同I2C
💻 H
字号:
#ifndef _ADT_H_
#define _ADT_H_

#include <i2c.h>
#include <stdio.h>

#define ADT_I2C_ADDR			0x5e

#define ADT_TEMP0_ADR			0x20
#define ADT_TEMP1_ADR 			0x21
#define ADT_TEMP2_ADR 			0x22
#define ADT_TEMP3_ADR 			0x23
#define ADT_TEMP4_ADR 			0x24
#define ADT_TEMP5_ADR 			0x25
#define ADT_TEMP6_ADR 			0x26
#define ADT_TEMP7_ADR 			0x27
#define ADT_TEMP8_ADR 			0x28
#define ADT_TEMP9_ADR 			0x29

#define FAN1_TACH_ADR 			0x2A
#define FAN2_TACH_ADR 			0x2C
#define FAN3_TACH_ADR 			0x2E
#define FAN4_TACH_ADR 			0x30


#define FAN1_UNDERSPEED_ADDR 	0x58
#define FAN2_UNDERSPEED_ADDR 	0x5A
#define FAN3_UNDERSPEED_ADDR 	0x5C
#define FAN4_UNDERSPEED_ADDR 	0x5E

#define FAN1_OVERSPEED_ADDR		0x60
#define FAN2_OVERSPEED_ADDR		0x62
#define FAN3_OVERSPEED_ADDR		0x64
#define FAN4_OVERSPEED_ADDR		0x66

#define ADT_PWM1_ADR 			0x32
#define ADT_PWM2_ADR 			0x33
#define ADT_PWM3_ADR 			0x34
#define ADT_PWM4_ADR 			0x35

#define FANS_ONLINE_ADR 		0x36
#define ADT_TEST_REG 			0x37

#define ADT_COFIG				0x40

void SetFan_Underspeed()
{
uchar FanUnder_vaule[] = {0x20,0x0};
IICSendStr(ADT_I2C_ADDR,FAN1_UNDERSPEED_ADDR,FanUnder_vaule,0x2);
IICSendStr(ADT_I2C_ADDR,FAN2_UNDERSPEED_ADDR,FanUnder_vaule,0x2);
IICSendStr(ADT_I2C_ADDR,FAN2_UNDERSPEED_ADDR,FanUnder_vaule,0x2);
IICSendStr(ADT_I2C_ADDR,FAN2_UNDERSPEED_ADDR,FanUnder_vaule,0x2);
}

void SetFan_Overspeed()
{
uchar FanOver_vaule[] = {0x80,0x0};

IICSendStr(ADT_I2C_ADDR,FAN1_OVERSPEED_ADDR,FanOver_vaule,0x2);
IICSendStr(ADT_I2C_ADDR,FAN2_OVERSPEED_ADDR,FanOver_vaule,0x2);
IICSendStr(ADT_I2C_ADDR,FAN3_OVERSPEED_ADDR,FanOver_vaule,0x2);
IICSendStr(ADT_I2C_ADDR,FAN4_OVERSPEED_ADDR,FanOver_vaule,0x2);
}



uchar Meter_FanSpeed()
{
	uchar Temp_Value[8];
	IICRcvStr(ADT_I2C_ADDR,ADT_TEMP1_ADR,&Temp_Value,8);
	return(Temp_Value);

}

uchar Get_Temp(uchar Sensor_No)
{
uchar Temp_Value;
uchar Temp_addr;
switch(Sensor_No)
{
	case 0:Temp_addr = ADT_TEMP0_ADR;break;
	case 1:Temp_addr = ADT_TEMP1_ADR;break;
	case 2:Temp_addr = ADT_TEMP2_ADR;break;
	case 3:Temp_addr = ADT_TEMP3_ADR;break;
	case 4:Temp_addr = ADT_TEMP4_ADR;break;
	case 5:Temp_addr = ADT_TEMP5_ADR;break;
	case 6:Temp_addr = ADT_TEMP6_ADR;break;
	case 7:Temp_addr = ADT_TEMP7_ADR;break;
	case 8:Temp_addr = ADT_TEMP8_ADR;break;
	case 9:Temp_addr = ADT_TEMP9_ADR;break;
}
IICRcvStr(ADT_I2C_ADDR,Temp_addr,&Temp_Value,1);
return(Temp_Value);
}

//hl_sel = 0, select TACH_L, hl_sel = 1, select TACH_h
unsigned int Get_FanTACH(uchar Fan_No)
{
	uchar Temp_addr;
	uchar Tach_l,Tach_h;
	unsigned int Tach;
	switch(Fan_No)
	{
		case 1:Temp_addr = FAN1_TACH_ADR;break;
		case 2:Temp_addr = FAN2_TACH_ADR;break;
		case 3:Temp_addr = FAN3_TACH_ADR;break;
		case 4:Temp_addr = FAN4_TACH_ADR;break;
	}
	IICRcvStr(ADT_I2C_ADDR,Temp_addr,&Tach_l,1);
	IICRcvStr(ADT_I2C_ADDR,Temp_addr+1,&Tach_h,1);
	Tach = Tach_h<<8 + Tach_l;
	return(Tach);
}

uchar Get_FanOnline()
{
uchar Fan_online;

IICRcvStr(ADT_I2C_ADDR,FANS_ONLINE_ADR,&Fan_online,1);
printf("The fan status is %x\n",Fan_online);
return(Fan_online);
}


void ADT_Init()
{
uchar Reg_Read;
uchar Wr_data ;
IICRcvStr(ADT_I2C_ADDR,0x3d,&Reg_Read,1);
printf("Dev ID = %x\n",Reg_Read);
IICRcvStr(ADT_I2C_ADDR,0x3e,&Reg_Read,1);
printf("Com ID = %x\n",Reg_Read);
IICRcvStr(ADT_I2C_ADDR,0x3f,&Reg_Read,1);
printf("Rev ID = %x\n",Reg_Read);


SetFan_Overspeed();
SetFan_Underspeed();

Wr_data = 0x1;
IICSendStr(ADT_I2C_ADDR,ADT_COFIG,&Wr_data,1);

Wr_data = 0x55;
IICSendStr(ADT_I2C_ADDR,ADT_TEST_REG,&Wr_data,1);
IICRcvStr(ADT_I2C_ADDR,ADT_TEST_REG,&Reg_Read,1);
if(Reg_Read == Wr_data)
	printf("ADT success\n");
else
	printf("ADT error\n");
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -