新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32驅(qū)動(dòng)16位精度A/D轉(zhuǎn)換芯片ADS1120

STM32驅(qū)動(dòng)16位精度A/D轉(zhuǎn)換芯片ADS1120

作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏

四.STM32程序
void ADC_1120_AIN1_CONVER()
{
//**********************************************
//ADC初始化
//**********************************************
Delay_N_ms(1);//延時(shí)
ADC_CS_LOW;//選中ADC芯片
Delay_N_ms(1);//延時(shí)
SPI1_SendByte(0x06);//復(fù)位ADC命令
Delay_N_ms(1);//延時(shí)
SPI1_SendByte(0x43);//0x43--01000011,寫四個(gè)寄存器,從00-11開始寫
SPI1_SendByte(0x91);//寫00寄存器----AIN1為模擬輸入管腳,無增益,PGA失能
SPI1_SendByte(0xc4);//寫01寄存器----數(shù)據(jù)傳輸率1000SPS,單次轉(zhuǎn)換模式
SPI1_SendByte(0x00);//寫10寄存器----內(nèi)部2.048V參考源
SPI1_SendByte(0x00);//寫11寄存器----DRAY提示轉(zhuǎn)換結(jié)束
//SPI1_SendByte(0x23);//讀寄存器,查看是否正確
//Delay_N_ms(1);//延時(shí)
//UART2_PutChar(SPI1_ReadByte(0x00));
//UART2_PutChar(SPI1_ReadByte(0x00));
//UART2_PutChar(SPI1_ReadByte(0x00));
//UART2_PutChar(SPI1_ReadByte(0x00));
SPI1_SendByte(0x08);//打開ADC轉(zhuǎn)換使能,開始ADC轉(zhuǎn)換
Delay_N_ms(1);//延時(shí)
ADC_CS_HIGN;
//**********************************************
//ADC結(jié)果讀取并進(jìn)行數(shù)據(jù)處理后通過RS485發(fā)送至計(jì)算機(jī)
//**********************************************
u16 ADC_HIGN_DATA=0,ADC_LOW_DATA=0;
unsigned char counter,a,b,c,d,e;
u16 ADC_DATA=0;
u32 ADC_8TIMES_DATA=0;
for(counter=0;counter<8;counter++)
{
while(!(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_10) == RESET));//判斷DRAY管腳點(diǎn)平是否變低,數(shù)據(jù)是轉(zhuǎn)換完成準(zhǔn)備
ADC_CS_LOW;
Delay_N_ms(1);
ADC_HIGN_DATA=SPI1_ReadByte(0x00);//讀取ADC結(jié)果高8位
ADC_LOW_DATA=SPI1_ReadByte(0x00);//讀取ADC結(jié)果低8位
Delay_N_ms(1);
ADC_CS_HIGN;
//UART2_PutChar(ADC_HIGN_DATA);
//UART2_PutChar(ADC_LOW_DATA);
ADC_DATA = ADC_HIGN_DATA*256 + ADC_LOW_DATA;//得到16位AD數(shù)據(jù)
ADC_8TIMES_DATA += ADC_DATA;//累加八次做濾波處理
ADC_DATA=0;
}
ADC_DATA = ADC_8TIMES_DATA >> 3;//取八次平均值
ADC_8TIMES_DATA=0;//清零累加器
ADC_DATA = (unsigned int)(((unsigned long)ADC_DATA)*2*20480/65536);//電壓值*10000,用以下來分離各個(gè)數(shù)字,取小數(shù)點(diǎn)后4位
//ADC_DATA = Real_ADC * 10000;
a = ADC_DATA /10000;
b = ADC_DATA % 10000 / 1000;
c = ADC_DATA % 1000 / 100;
d = ADC_DATA % 100 / 10;
e = ADC_DATA % 10;
UART2_PutChar(0x56);//V
UART2_PutChar(0x4C);//L
UART2_PutChar(0x3D);//=
UART2_PutChar(a+48);
UART2_PutChar(0x2E);//.
UART2_PutChar(b+48);
UART2_PutChar(c+48);
UART2_PutChar(d+48);
UART2_PutChar(e+48);
//UART2_PutChar(0x0D);//回車
//UART2_PutChar(0x0A);//換行
Delay_N_ms(5);
ADC_CS_HIGN;
//**********************************************
//結(jié)束后使ADC進(jìn)行掉電模式
//**********************************************
ADC_CS_LOW;//選中ADC芯片
Delay_N_ms(1);//延時(shí)
SPI1_SendByte(0x02);//POWERDOWN掉電命令
Delay_N_ms(1);//延時(shí)
}


上一頁 1 2 下一頁

關(guān)鍵詞: STM32轉(zhuǎn)換芯片ADS112

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉