TI CC2530 學習筆記-15-NewBit-CC2530-ADC-外部電壓週期性採集
阿新 • • 發佈:2018-12-15
功能:使用CC2530對外部電壓週期性(5s)的採集,當電壓值發生變化時輸出當時電壓。這裡的外部電壓是由Newbit-ZDK的TPHP底板上的電位器提供。按下S0也可以強制進行一次取樣並將結果由串列埠傳送出來。
- 初始化ADC,串列埠,定時器3
halMcuWaitUs(10000); //等待時間穩定,約10ms CLKCONCMD &= ~0x47; //選擇外部32MHZ時鐘, 不分頻 //TICKSPD不改變,保持為0x01,即定時器標記頻率為16MHz while( (CLKCONSTA & 0x47) != 0x00 ); //切換時鐘源後再次等待穩定 P0DIR |= 0x80; //配置IO為輸出 /* 初始化串列埠 */ P0SEL |= 0x0C; //將P02,P03設為外設功能 PERCFG &= ~0x01; //串列埠0佔用P02 P03 U0CSR = 0X80; //USART模式設為UART模式 U0UCR = 0x00; //禁用流控,禁用奇偶檢驗,1位停止位 U0GCR |= 8; //9600 U0BAUD = 59; /* 初始化ADC取樣埠,P06 */ APCFG |= 0x40; LED_G_IO = LED_G_ACTIVE; /* 初始化定時器3 */ T3CTL = 0xE2; //128分頻(0.125Mhz),模模式 T3CCTL0 = 0x04; //比較模式 T3CC0 = 125; //溢位值 T3CTL |= 0x08; //開啟溢位中斷 T3CCTL0 |= 0x40;//開T3通道0中斷 T3IE = 1; //定時器3中斷使能 T3CTL |= 0x10; //啟動定時器 IEN0 |= 0X80; //開總中斷
- 迴圈檢測按鍵和電壓
while(1) { /* 按下K2可觸發一次取樣 */ if (KV_1 == halScanKey()) { adcResult = halAdcSampleSingle(HAL_ADC_REF_AVDD, 0x06);//P06 culPrintVoltage(adcResult); while( KV_1 == halScanKey()); } /* 反覆取樣,發現電壓變化時將新的電壓送出 */ /* 可以分辨的電壓變化是0.007V */ /* 當取樣結果小於RESOLUTION 會連續輸出 */ if(gSample){ gSample = 0; adcResult = halAdcSampleSingle(HAL_ADC_REF_AVDD, 0x06); if ((adcResult < (adcLast - RESOLUTION)) || (adcResult > (adcLast + RESOLUTION))) { adcLast = adcResult; culPrintVoltage(adcResult); } } }