標題: ATT7053BU 驅(qū)動代碼共享 [打印本頁]

作者: wshm1127    時間: 2018-7-25 11:31
標題: ATT7053BU 驅(qū)動代碼共享
//我們的SPI速度最高可以達到1.5M左右
//需要注意的是每次CS拉低啟動傳輸,需要給2-3us的延時時間。
//CS拉高結束數(shù)據(jù)傳輸之前也需要給出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初始狀態(tài)是0
        Delayus(1);       
        SPI_CS_HIGH;       
        Delayus(2);               
        SPI_CS_LOW;               
        Delayus(5);               
                                       
        SPI_CLK_HIGH;        //啟動數(shù)據(jù)傳輸       
        Delayus(1);
        SPI_DIN_LOW;        //0表示主機向從機讀數(shù)據(jù)
        Delayus(1);
        SPI_CLK_LOW;        //從機需要在下降沿取數(shù)據(jù)
        Delayus(1);
                               
        for(i=6; i>=0; i--)
        {
                SPI_CLK_HIGH;        //啟動數(shù)據(jù)傳輸       
                Delayus(10);
                if( (address& (0x01<<i))>>i)//(address & 0x01)
                {
                        SPI_DIN_HIGH;
                       
                }
                else
                        SPI_DIN_LOW;
                Delayus(1);
                SPI_CLK_LOW;        //從機需要在下降沿取數(shù)據(jù)
                Delayus(10);
        }

        SPI_CLK_HIGH;       
        Delayus(10);
        SPI_CLK_LOW;
        if(READ_SPI_DOUT)
                temp_data = temp_data | 1;
       
        Delayus(2);        //從機接收到命令后,開始送出數(shù)據(jù),上升沿送數(shù)據(jù)
        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初始狀態(tài)是0               
        Delayus(100);       
        SPI_CS_HIGH;       
        Delayus(50);               
        SPI_CS_LOW;               
        Delayus(100);               
                                       
        SPI_CLK_HIGH;        //啟動數(shù)據(jù)傳輸       
        Delayus(10);       
        SPI_DIN_HIGH;        //1表示主機向從機寫數(shù)據(jù)
        Delayus(10);       
        SPI_CLK_LOW;        //從機需要在下降沿取數(shù)據(jù)
        Delayus(10);       
       
        for(i=6; i>=0; i--)
        {
                SPI_CLK_HIGH;        //啟動數(shù)據(jù)傳輸       
                Delayus(10);       
                if((address & (0x01<<i))>>i)
                {
                        SPI_DIN_HIGH;
                       
                }
                else
                        SPI_DIN_LOW;
                Delayus(10);       
        SPI_CLK_LOW;        //從機需要在下降沿取數(shù)據(jù)
                Delayus(10);       
        }
                                                //從機接收到命令后,開始送出數(shù)據(jù),上升沿送數(shù)據(jù)
        Delayus(40);       

        for(i=23; i>=0; i--)
        {
                SPI_CLK_HIGH;        //啟動數(shù)據(jù)傳輸       
                Delayus(10);       
                if((write_data & (temp_data<<i))>>i)
                {
                        SPI_DIN_HIGH;       
                       
                }
                else
                        SPI_DIN_LOW;
                Delayus(10);       
                SPI_CLK_LOW;        //從機需要在下降沿取數(shù)據(jù)
                Delayus(10);       
        }
        SPI_CS_HIGH;
}



void ATT7053_Init(void)
{
        SPI_Write(0x32, 0xBC);                //Open written-protect 只能操作 40H 到 45H 的校表參數(shù)寄存器
        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 的校表參數(shù)寄存器
        SPI_Write(0x59, 0x0001);        //模擬通道增益I1*2       
       
        Delayms(10);
        SPI_Read(0x06);


}

ATT7053.zip

1.57 KB, 下載次數(shù): 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.torrancerestoration.com/bbs/) Powered by Discuz! X3.1