新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR單片機驅動高精度AD芯片ADS1256的C程序

        AVR單片機驅動高精度AD芯片ADS1256的C程序

        作者: 時間:2016-11-30 來源:網絡 收藏
        #include

        #include
        #include

        本文引用地址:http://www.104case.com/article/201611/323905.htm


        /*************************************************************************************/
        volatile void delay_us(unsigned char a) //挺時1uS
        {
        volatile unsigned int i=0,j=0;
        for(i=0;ifor(j=0;j<50;j++)
        ;
        }

        /*************************************************************************************/
        //ads126發送一字節的數據
        unsigned char ads_senddata(unsigned char data) //SPI發送數據,要在外部保證SS = 0
        {
        SPDR =data; //啟動數據傳輸
        while((SPSR & 0x80) == 0); // 等待傳輸結束
        data = SPDR;
        return data;
        }

        /*************************************************************************************/
        void ad_write(unsigned char reg,unsigned char data)//寫寄存器。選擇寄存器地址,寫入的數據。
        {
        PORTB&=~(1< while((PIND&0X8)!=0); //DRDY信號高時才能寫寄存器
        ads_senddata(0x50+reg);//選擇寫入寄存器
        ads_senddata(0x00); //寫入1個寄存器
        ads_senddata(data); //寫入數據
        PORTB|=(1< delay_us(1); //挺時1uS //可更改。但讀數據必須在要等待最小一個采集周期(大約90ms)后。
        }
        /*************************************************************************************/
        unsigned long int ad_read()//讀A/D數據。
        {
        unsignedlongintsum=0;
        unsigned char r=0,a=0;
        PORTB&=~(1< ads_senddata(0xfc); //SYNC AD同步
        ads_senddata(0xff); //WAKEUP 喚醒,并啟動AD轉換
        while((PIND&0X8)!=0); //DRDY信號低時才能寫寄存器 ,等待轉換完畢
        {
        delay_us(1); //挺時1uS
        ads_senddata(0x01); //發送讀取數據命令
        delay_us(1); //挺時1uS
        for (r=0;r<3;r++) //讀取24位數據
        {
        a=ads_senddata(0x00); //讀取數據,先高位,后低位
        sum|=a;
        sum=sum<<8;
        }
        sum=sum>>8;
        }
        PORTB|=(1< sum=0xffffff-sum;
        returnsum;
        delay_us(1); //挺時1uS
        }

        /*************************************************************************************/
        void ADS1256(void) //初始化ADS1256
        {
        DDRD&=~(1<PORTD|=(1<DDRD|=(1<PORTD|=(1<PORTB&=~(1<PORTB|=1<ad_write(00,0xf7); //初始化STATUS reg ID位為f,數據輸出高位在先,自動校準開,輸入緩沖關閉,DRDY高電平
        ad_write(01,0x80); //初始化MUX reg 單端輸入第0通道為選通
        ad_write(02,0x00); //初始化ADCOM reg時鐘輸出關閉,傳感器檢測關閉,放大倍數為1
        ad_write(03,0xf0); //初始化DRATE reg 數據速率為30K
        ad_write(04,0x0f); //初始化DRATE reg 定義IO為輸出高電平,節能模式
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鸡东县| 西乌珠穆沁旗| 蚌埠市| 巨野县| 莱芜市| 安乡县| 娱乐| 元谋县| 环江| 娄烦县| 柳江县| 庆城县| 上杭县| 株洲市| 胶南市| 定陶县| 富阳市| 汤原县| 漠河县| 清水河县| 平阳县| 克东县| 芷江| 湖南省| 浙江省| 游戏| 屏东县| 芜湖县| 永清县| 凭祥市| 浙江省| 渝北区| 合江县| 阜平县| 怀化市| 剑河县| 德昌县| 南投市| 绥滨县| 呼玛县| 彰武县|