1. 程式人生 > >TI CC2530 學習筆記-15-NewBit-CC2530-ADC-外部電壓週期性採集

TI CC2530 學習筆記-15-NewBit-CC2530-ADC-外部電壓週期性採集

功能:使用CC2530對外部電壓週期性(5s)的採集,當電壓值發生變化時輸出當時電壓。這裡的外部電壓是由Newbit-ZDK的TPHP底板上的電位器提供。按下S0也可以強制進行一次取樣並將結果由串列埠傳送出來。

  1. 初始化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;   //開總中斷
  1. 迴圈檢測按鍵和電壓
  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);
      }
    }
  }