标题:
ATT7053BU 驱动代码共享
[打印本页]
作者:
wshm1127
时间:
2018-7-25 11:31
标题:
ATT7053BU 驱动代码共享
//我们的SPI速度最高可以达到1.5M左右
//需要注意的是每次CS拉低启动传输,需要给2-3us的延时时间。
//CS拉高结束数据传输之前也需要给出2-3us的延时时间
void Delay(unsigned int time) //一个控制信号高电平低电平时间的延时
{
int i;
for(i=0; i<time; i++);
}
unsigned long SPI_Read(unsigned char address)
{
int i;
unsigned long temp_data;
temp_data = 0;
SPI_CLK_LOW; //确保CLK初始状态是0
Delayus(1);
SPI_CS_HIGH;
Delayus(2);
SPI_CS_LOW;
Delayus(5);
SPI_CLK_HIGH; //启动数据传输
Delayus(1);
SPI_DIN_LOW; //0表示主机向从机读数据
Delayus(1);
SPI_CLK_LOW; //从机需要在下降沿取数据
Delayus(1);
for(i=6; i>=0; i--)
{
SPI_CLK_HIGH; //启动数据传输
Delayus(10);
if( (address& (0x01<<i))>>i)//(address & 0x01)
{
SPI_DIN_HIGH;
}
else
SPI_DIN_LOW;
Delayus(1);
SPI_CLK_LOW; //从机需要在下降沿取数据
Delayus(10);
}
SPI_CLK_HIGH;
Delayus(10);
SPI_CLK_LOW;
if(READ_SPI_DOUT)
temp_data = temp_data | 1;
Delayus(2); //从机接收到命令后,开始送出数据,上升沿送数据
for(i=0; i<23; i++)
{
SPI_CLK_HIGH;
Delayus(10);
SPI_CLK_LOW;
Delayus(10);
temp_data = temp_data<<1;
if(READ_SPI_DOUT)
temp_data++;
Delayus(1);
}
SPI_CS_HIGH;
return temp_data;
}
void SPI_Write(unsigned char address, unsigned long write_data)
{
int i;
unsigned long temp_data;
temp_data = 1;
SPI_CLK_LOW; //确保CLK初始状态是0
Delayus(100);
SPI_CS_HIGH;
Delayus(50);
SPI_CS_LOW;
Delayus(100);
SPI_CLK_HIGH; //启动数据传输
Delayus(10);
SPI_DIN_HIGH; //1表示主机向从机写数据
Delayus(10);
SPI_CLK_LOW; //从机需要在下降沿取数据
Delayus(10);
for(i=6; i>=0; i--)
{
SPI_CLK_HIGH; //启动数据传输
Delayus(10);
if((address & (0x01<<i))>>i)
{
SPI_DIN_HIGH;
}
else
SPI_DIN_LOW;
Delayus(10);
SPI_CLK_LOW; //从机需要在下降沿取数据
Delayus(10);
}
//从机接收到命令后,开始送出数据,上升沿送数据
Delayus(40);
for(i=23; i>=0; i--)
{
SPI_CLK_HIGH; //启动数据传输
Delayus(10);
if((write_data & (temp_data<<i))>>i)
{
SPI_DIN_HIGH;
}
else
SPI_DIN_LOW;
Delayus(10);
SPI_CLK_LOW; //从机需要在下降沿取数据
Delayus(10);
}
SPI_CS_HIGH;
}
void ATT7053_Init(void)
{
SPI_Write(0x32, 0xBC); //Open written-protect 只能操作 40H 到 45H 的校表参数寄存器
SPI_Write(0x43, 0xFA); //I1 ADC Enable
// SPI_Write(0x43, 0xDF); //close bor
SPI_Write(0x42, 0x01FF); //I1Angle Enable, I2Angle Enable
SPI_Write(0x32, 0xA6); //Open written-protect 只能操作 50H 到 71H 的校表参数寄存器
SPI_Write(0x59, 0x0001); //模拟通道增益I1*2
Delayms(10);
SPI_Read(0x06);
}
ATT7053.zip
2018-7-25 11:31 上传
点击文件名下载附件
下载积分: 黑币 -5
1.57 KB, 下载次数: 146, 下载积分: 黑币 -5
实际项目代码
作者:
gspine
时间:
2019-4-1 11:38
值得学习一下。提升一下自己
作者:
Merak
时间:
2019-6-11 18:21
请问有没有试过不使用cs脚啊?
作者:
osman.li
时间:
2020-3-21 21:05
厉害,标定看着很复杂,一定很麻烦
作者:
atl0402
时间:
2020-10-7 23:17
值得学习一下。提升一下
作者:
liushiming82
时间:
2020-10-27 14:43
这个东西如何计算电压呀
作者:
PL564
时间:
2022-12-22 09:40
标定最头疼,搞了一天也没有标定好,同一电器电流标定好了, 换其他电流,就不对了,也不知道怎么搞
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1