|
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "key.h"
#include "usart.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "stmflash.h"
#include "usb_lib.h"
#include "math.h"
#include "hw_config.h"
#include "string.h"
#include "stdlib.h"
#include "lcd.h"
#include "task_manage.h"
#include "bsp_ads1256.h"
int main(void)
{
int32_t adc[8];
int32_t volt[8];
uint8_t i;
uint8_t ch_num;
char infoBackPC[64];
char infoShowLCD[64];
SystemInit();
delay_init(72); //延時初始化
NVIC_Configuration();
uart_init(256000); //串口初始化
key_init();//按鍵初始化
initial_lcd();//液晶初始化
LCD_Clear();
LCD_Refresh_Gram();
LCD_Show_CEStr(0,0,"ADS1256");//黑色
LCD_Refresh_Gram();
USBRelinkConfig();
delay_ms(100); /* 等待上電穩定,等基準電壓電路穩定, bsp_InitADS1256() 內部會進行自校準 */
bsp_InitADS1256(); /* 初始化配置ADS1256. PGA=1, DRATE=30KSPS, BUFEN=1, 輸入正負5V */
/* 打印芯片ID (通過讀ID可以判斷硬件接口是否正常) , 正常時狀態寄存器的高4bit = 3 */
{
uint8_t id;
id = ADS1256_ReadChipID();
USB_SendStr("\r\n");
USB_SendStr("讀取芯片ID\r\n");
if (id != 3)
{
sprintf(infoBackPC, "Error, ASD1256 Chip ID = 0x%X\r\n", id);
}
else
{
sprintf(infoBackPC, "Ok, ASD1256 Chip ID = 0x%X\r\n", id);
}
USB_TxWrite((uint8_t*)infoBackPC, strlen(infoBackPC));
}
/* 設置PGA增益,數據更新速率 */
#if 1
USB_SendStr("\r\nPGA增益 = 1, 數據輸出速率 = 15sps, 單端8路掃描\r\n\r\n");
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS); /* 配置ADC參數: 增益1:1, 數據輸出速率 15Hz */
/*
中斷服務程序會自動讀取ADC結果保存在全局變量,主程序通過 ADS1256_GetAdc() 函數來讀取這些數據
*/
ADS1256_StartScan(0); /* 啟動中斷掃描模式. 0表示單端8路,1表示差分4路 */
ch_num = 8; /* 通道數 = 8 或者4 */
#else
USB_SendStr("\r\nPGA增益 = 1, 數據輸出速率 = 15sps, 差分4路掃描\r\n\r\n");
ADS1256_CfgADC(ADS1256_GAIN_1, ADS1256_15SPS); /* 配置ADC參數: 增益1:1, 數據輸出速率 15Hz */
/*
中斷服務程序會自動讀取ADC結果保存在全局變量,主程序通過 ADS1256_GetAdc() 函數來讀取這些數據
*/
ADS1256_StartScan(1); /* 啟動中斷掃描模式. 0表示單端8路,1表示差分4路 */
ch_num = 4; /* 通道數 = 8 或者4 */
#endif
while(1)
{
for (i = 0; i < ch_num; i++)
{
/* 從全局緩沖區讀取采樣結果。 采樣結果是在中斷服務程序中讀取的。*/
adc[i] = ADS1256_GetAdc(i);
/* 4194303 = 2.5V , 這是理論值,實際可以根據2.5V基準的實際值進行公式矯正 */
volt[i] = ((int64_t)adc[i] * 2500000) / 4194303; /* 計算實際電壓值(近似估算的),如需準確,請進行校準 */
}
if(upToPC)
/* 打印采集數據 */
{
int32_t iTemp;
upToPC = 0;
sprintf(infoBackPC, "[%dCH_NUM]\r\n", ch_num);USB_TxWrite((uint8_t*)infoBackPC, strlen(infoBackPC));
for (i = 0; i < ch_num; i++)
{
iTemp = volt[i]; /* 余數,uV */
if (iTemp < 0)
{
iTemp = -iTemp;
sprintf(infoBackPC, "%d=%6d,(-%d.%03d %03d V) \r\n", i, adc[i], iTemp /1000000, (iTemp%1000000)/1000, iTemp%1000);
}
else
{
sprintf(infoBackPC,"%d=%6d,( %d.%03d %03d V) \r\n", i, adc[i], iTemp/1000000, (iTemp%1000000)/1000, iTemp%1000);
}
USB_TxWrite((uint8_t*)infoBackPC, strlen(infoBackPC));
}
//在液晶均顯示8通道電壓,單位0.1mv
for(i = 0; i < 4; i++)
{
sprintf(infoShowLCD, "CH%d", i*2);
LCD_ShowString(1,0 , i*16, (const u8*)infoShowLCD);
LCD_Refresh_Gram();
sprintf(infoShowLCD, "%05d", volt[i*2]/100);
LCD_ShowString(0,24 , i*16, (const u8*)infoShowLCD);
LCD_Refresh_Gram();
sprintf(infoShowLCD, "CH%d", i*2+1);
LCD_ShowString(1,64 , i*16, (const u8*)infoShowLCD);
LCD_Refresh_Gram();
sprintf(infoShowLCD, "%05d", volt[i*2+1]/100);
LCD_ShowString(0,88 , i*16, (const u8*)infoShowLCD);
LCD_Refresh_Gram();
}
LCD_Refresh_Gram();
}
}
}
|
-
-
8通道AD轉換stm32.zip
2017-7-5 16:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
434.14 KB, 下載次數: 102, 下載積分: 黑幣 -5
|