新聞中心

        AD7705程序

        作者: 時間:2016-11-30 來源:網絡 收藏
        AD7705應用注意要點:
        (1)DRDY邏輯不要搞反,高電平時等待轉換狀態,低電平為可以讀取轉換數據
        (2)系統校準時輸入信號要大于所選量程的4/5,否則校準不到32767。
        (3)校準時要等待一定的時間,讀取數據也一樣,不能超過轉換速率。
        (4)一般的應用只要內部校準,這個很簡單,只要初始化就可以。如果測量范圍不是芯片的范圍,可以通過系統校準來實現,滿量程校準電壓要大于量程的4/5

        #include
        #include
        #include"ad7705.h"
        #include"main.h"
        #include"crc16.h"
        #include"Usart.h"

        //針對四個量程的設置寄存器的設置內容
        //(1)對于單極性V級別輸入0-5V、0-20mA、0-10V這三個量程,輸入范圍為0-2V,無極性,增益為1,緩沖模式--0-2V
        //(2)對于雙極性V級別輸入+-2.5V、+-5V這兩個量程,輸入范圍為+-1V,雙極性,增益為2,緩沖模式--+-2V
        //(3)對于雙精度mV級別輸入+-500mV,增益為4,雙極性,緩沖模式--+-2V
        //(4)對雙精度mV級別+-50mV,增益為32,雙極性,緩沖模式--+-1.6V
        //------MD1(0)MD0(0)G2(0)G1(0)G0(0)B/U(0)BUF(0)FSYNC(0)--------------------------//
        constunsignedchartext_of_setup[4]={0X04,0X08,0X10,0X28};//非緩沖模式,數字濾波同步
        //constunsignedchartext_of_setup[4]={0X06,0X0A,0X12,0X2A};//緩沖模式,數字濾波同步

        externvolatileunsignedcharcommand[7];//校準命令全局數組
        externvolatileunsignedcharscale;//記錄系統量程
        externvolatileunsignedcharNO_CALI_TYPE;//未校準類型
        externvolatileunsignedlongintZS,GS;//當前量程的校準系數
        externvolatileunsignedchartime_count;//超時標志

        //----------------------------------------------------------------------------
        //函數:reset_AD7705
        //功能:AD7705串行接口失步后將其復位。復位后要延時500us再訪問
        //參數:無
        //返回:無
        //變量:無
        //備注:無
        //----------------------------------------------------------------------------
        voidreset_AD7705(void)
        {
        unsignedchari;

        AD_DIN1;
        for(i=0;i<36;i++)
        {
        AD_CLK0;
        asm("nop");
        asm("nop");
        asm("nop");
        AD_CLK1;
        asm("nop");
        asm("nop");
        asm("nop");
        }

        _delay_ms(1);
        }

        //------------------------------------------------------------------------------------------
        //函數:read_AD7705_byte
        //功能:從AD7705讀一個字節的數據
        //參數:無
        //返回:讀到的一字節數據
        //變量:無
        //備注:無
        //------------------------------------------------------------------------------------------
        unsignedcharread_AD7705_byte(void)
        {
        unsignedchardata=0;
        unsignedchari=0;

        for(i=0;i<8;i++)
        {
        data<<=1;
        AD_CLK0;
        asm("nop");
        asm("nop");
        asm("nop");
        if(AD_DOUT)
        {
        data++;
        }
        AD_CLK1;
        asm("nop");
        asm("nop");
        asm("nop");
        }

        returndata;
        }

        //------------------------------------------------------------------------------------------
        //函數:read_AD7705_word
        //功能:從AD7705讀一個字的數據,共16bit
        //參數:無
        //返回:讀到的一字節數據
        //變量:無
        //備注:無
        //------------------------------------------------------------------------------------------
        unsignedintread_AD7705_word(void)
        {
        unsignedintdata=0;
        unsignedchari=0;

        for(i=0;i<16;i++)
        {
        data<<=1;
        AD_CLK0;
        asm("nop");
        asm("nop");
        asm("nop");
        if(AD_DOUT)
        {
        data++;
        }
        AD_CLK1;
        asm("nop");
        asm("nop");
        asm("nop");
        }

        returndata;
        }


        //------------------------------------------------------------------------------------------
        //函數:read_AD7705_dword
        //功能:從AD7705讀一個24的數據
        //參數:無
        //返回:讀到的一字節數據
        //變量:無
        //備注:AD7705是一個24位AD,選定刷新頻率在16.7HZ下,有效位是19位,暫時讀出全部24位數據
        //------------------------------------------------------------------------------------------
        unsignedlongintread_AD7705_dword(void)
        {
        unsignedlongdata=0;
        unsignedchari=0;

        for(i=0;i<24;i++)
        {
        data<<=1;
        AD_CLK0;
        asm("nop");
        asm("nop");
        asm("nop");
        if(AD_DOUT)
        {
        data++;
        }
        AD_CLK1;
        asm("nop");
        asm("nop");
        asm("nop");
        }

        returndata;
        }


        //------------------------------------------------------------------------------------------
        //函數:write_AD7705_byte
        //功能:往AD7705寫8位數據
        //參數:IN-uint8_tdata,要寫入AD7705的數據
        //返回:無
        //變量:無
        //備注:無
        //------------------------------------------------------------------------------------------
        voidwrite_AD7705_byte(unsignedchardata)
        {
        for(unsignedchari=0;i<8;i++)
        {
        AD_CLK0;
        if(data&0x80)
        AD_DIN1;
        else
        AD_DIN0;
        asm("nop");
        asm("nop");
        asm("nop");
        AD_CLK1;
        asm("nop");
        asm("nop");
        asm("nop");
        data<<=1;
        }

        AD_DIN1;
        }

        //------------------------------------------------------------------------------------------
        //函數:write_AD7705_dword
        //功能:往AD7705寫24位數據,因為AD7705是24位的器件
        //參數:IN-int32_tdata,要寫入AD7705的數據
        //返回:無
        //變量:無
        //備注:無
        //------------------------------------------------------------------------------------------
        voidwrite_AD7705_dword(unsignedlongintdata)
        {
        for(unsignedchari=0;i<24;i++)
        {
        AD_CLK0;
        if(data&0x800000)
        AD_DIN1;
        else
        AD_DIN0;
        asm("nop");
        asm("nop");
        asm("nop");
        AD_CLK1;
        asm("nop");
        asm("nop");
        asm("nop");
        data<<=1;
        }

        AD_DIN1;
        }

        上一頁 1 2 下一頁

        關鍵詞: AD7705轉換數

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阜阳市| 罗源县| 东乡| 遂溪县| 吉林市| 望都县| 富裕县| 攀枝花市| 磐石市| 田林县| 尼玛县| 奉贤区| 黄梅县| 孝感市| 丘北县| 古浪县| 丽水市| 友谊县| 宁都县| 长汀县| 宁国市| 都兰县| 宁安市| 原平市| 凌海市| 石城县| 酒泉市| 封开县| 盖州市| 河池市| 行唐县| 通渭县| 新邵县| 邯郸市| 扶沟县| 凤冈县| 红桥区| 浦江县| 合山市| 固原市| 肥乡县|