找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5731|回复: 6
打印 上一主题 下一主题
收起左侧

ATT7053BU 驱动代码共享

[复制链接]
跳转到指定楼层
楼主
ID:209079 发表于 2018-7-25 11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//我们的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

1.57 KB, 下载次数: 146, 下载积分: 黑币 -5

实际项目代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:502297 发表于 2019-4-1 11:38 | 只看该作者
值得学习一下。提升一下自己
回复

使用道具 举报

板凳
ID:245354 发表于 2019-6-11 18:21 | 只看该作者
请问有没有试过不使用cs脚啊?
回复

使用道具 举报

地板
ID:713086 发表于 2020-3-21 21:05 | 只看该作者
厉害,标定看着很复杂,一定很麻烦
回复

使用道具 举报

5#
ID:159600 发表于 2020-10-7 23:17 | 只看该作者

值得学习一下。提升一下
回复

使用道具 举报

6#
ID:3666 发表于 2020-10-27 14:43 | 只看该作者
这个东西如何计算电压呀
回复

使用道具 举报

7#
ID:78522 发表于 2022-12-22 09:40 | 只看该作者
标定最头疼,搞了一天也没有标定好,同一电器电流标定好了, 换其他电流,就不对了,也不知道怎么搞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表