新聞中心

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

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

作者: 時間:2016-11-30 來源:網(wǎng)絡 收藏
#include

#include
#include

本文引用地址:http://butianyuan.cn/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發(fā)送一字節(jié)的數(shù)據(jù)
unsigned char ads_senddata(unsigned char data) //SPI發(fā)送數(shù)據(jù),要在外部保證SS = 0
{
SPDR =data; //啟動數(shù)據(jù)傳輸
while((SPSR & 0x80) == 0); // 等待傳輸結(jié)束
data = SPDR;
return data;
}

/*************************************************************************************/
void ad_write(unsigned char reg,unsigned char data)//寫寄存器。選擇寄存器地址,寫入的數(shù)據(jù)。
{
PORTB&=~(1< while((PIND&0X8)!=0); //DRDY信號高時才能寫寄存器
ads_senddata(0x50+reg);//選擇寫入寄存器
ads_senddata(0x00); //寫入1個寄存器
ads_senddata(data); //寫入數(shù)據(jù)
PORTB|=(1< delay_us(1); //挺時1uS //可更改。但讀數(shù)據(jù)必須在要等待最小一個采集周期(大約90ms)后。
}
/*************************************************************************************/
unsigned long int ad_read()//讀A/D數(shù)據(jù)。
{
unsignedlongintsum=0;
unsigned char r=0,a=0;
PORTB&=~(1< ads_senddata(0xfc); //SYNC AD同步
ads_senddata(0xff); //WAKEUP 喚醒,并啟動AD轉(zhuǎn)換
while((PIND&0X8)!=0); //DRDY信號低時才能寫寄存器 ,等待轉(zhuǎn)換完畢
{
delay_us(1); //挺時1uS
ads_senddata(0x01); //發(fā)送讀取數(shù)據(jù)命令
delay_us(1); //挺時1uS
for (r=0;r<3;r++) //讀取24位數(shù)據(jù)
{
a=ads_senddata(0x00); //讀取數(shù)據(jù),先高位,后低位
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,數(shù)據(jù)輸出高位在先,自動校準開,輸入緩沖關閉,DRDY高電平
ad_write(01,0x80); //初始化MUX reg 單端輸入第0通道為選通
ad_write(02,0x00); //初始化ADCOM reg時鐘輸出關閉,傳感器檢測關閉,放大倍數(shù)為1
ad_write(03,0xf0); //初始化DRATE reg 數(shù)據(jù)速率為30K
ad_write(04,0x0f); //初始化DRATE reg 定義IO為輸出高電平,節(jié)能模式
}


上一頁 1 2 下一頁

評論


技術專區(qū)

關閉