新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32驅動16位精度A/D轉換芯片ADS1120

        STM32驅動16位精度A/D轉換芯片ADS1120

        作者: 時間:2016-11-27 來源:網絡 收藏

        四.STM32程序
        void ADC_1120_AIN1_CONVER()
        {
        //**********************************************
        //ADC初始化
        //**********************************************
        Delay_N_ms(1);//延時
        ADC_CS_LOW;//選中ADC芯片
        Delay_N_ms(1);//延時
        SPI1_SendByte(0x06);//復位ADC命令
        Delay_N_ms(1);//延時
        SPI1_SendByte(0x43);//0x43--01000011,寫四個寄存器,從00-11開始寫
        SPI1_SendByte(0x91);//寫00寄存器----AIN1為模擬輸入管腳,無增益,PGA失能
        SPI1_SendByte(0xc4);//寫01寄存器----數據傳輸率1000SPS,單次轉換模式
        SPI1_SendByte(0x00);//寫10寄存器----內部2.048V參考源
        SPI1_SendByte(0x00);//寫11寄存器----DRAY提示轉換結束
        //SPI1_SendByte(0x23);//讀寄存器,查看是否正確
        //Delay_N_ms(1);//延時
        //UART2_PutChar(SPI1_ReadByte(0x00));
        //UART2_PutChar(SPI1_ReadByte(0x00));
        //UART2_PutChar(SPI1_ReadByte(0x00));
        //UART2_PutChar(SPI1_ReadByte(0x00));
        SPI1_SendByte(0x08);//打開ADC轉換使能,開始ADC轉換
        Delay_N_ms(1);//延時
        ADC_CS_HIGN;
        //**********************************************
        //ADC結果讀取并進行數據處理后通過RS485發送至計算機
        //**********************************************
        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管腳點平是否變低,數據是轉換完成準備
        ADC_CS_LOW;
        Delay_N_ms(1);
        ADC_HIGN_DATA=SPI1_ReadByte(0x00);//讀取ADC結果高8位
        ADC_LOW_DATA=SPI1_ReadByte(0x00);//讀取ADC結果低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數據
        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,用以下來分離各個數字,取小數點后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;
        //**********************************************
        //結束后使ADC進行掉電模式
        //**********************************************
        ADC_CS_LOW;//選中ADC芯片
        Delay_N_ms(1);//延時
        SPI1_SendByte(0x02);//POWERDOWN掉電命令
        Delay_N_ms(1);//延時
        }


        上一頁 1 2 下一頁

        關鍵詞: STM32轉換芯片ADS112

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 太仆寺旗| 太原市| 双鸭山市| 桐城市| 溧水县| 尼勒克县| 清水县| 德钦县| 柞水县| 邯郸县| 克东县| 莱芜市| 德昌县| 乌鲁木齐县| 宣威市| 苏尼特右旗| 峨眉山市| 西乡县| 定州市| 昆山市| 大连市| 堆龙德庆县| 紫阳县| 扶沟县| 彩票| 山西省| 千阳县| 阿尔山市| 霍城县| 来凤县| 铁岭县| 高雄市| 奉化市| 彩票| 闽清县| 沾益县| 尚义县| 湖南省| 文登市| 德兴市| 邹城市|