TI CC2530 學習筆記-13-NewBit-CC2530-ADC-內部溫度感測器
阿新 • • 發佈:2018-12-15
TI CC2530 學習筆記-目錄 功能:使用CC2530的ADC對內部溫度感測器進行取樣,並計算取樣結果所對應的真實值,溫度值通過串列埠傳送,同時翻轉LED燈,CC2530的溫度感測器並不精準,請勿在精度要求在5度以內的場合使用。外界溫度變化不會立刻體現的取樣結果上,如果使用開啟的電烙鐵靠近CC2530,取樣結果會快速發生變化,請儘量不要用手直接接觸CC2530來驗證內部溫度感測器。靜電可能會導致晶片損壞。每1000毫秒對溫度進行一次更新。
- 配置溫度感測器等
halMcuWaitUs(10000); //等待時間穩定,約10ms CLKCONCMD &= ~0x47; //選擇外部32MHZ時鐘, 不分頻 //TICKSPD不改變,保持為0x01,即定時器標記頻率為16MHz while( (CLKCONSTA & 0x47) != 0x00 ); //切換時鐘源後再次等待穩定 P0DIR |= 0x40; //配置IO為輸出 /* 初始化串列埠 */ P0SEL |= 0x0C; //將P02,P03設為外設功能 PERCFG &= ~0x01; //串列埠0佔用P02 P03 U0CSR = 0X80; //USART模式設為UART模式 U0UCR = 0x00; //禁用流控,禁用奇偶檢驗,1位停止位 U0CSR |= 0x40; //允許接收 U0GCR |= 8; //9600 U0BAUD = 59; IEN0 |= 0x04; //開串列埠0接收中斷 /* 初始化定時器3 */ T3CTL = 0xE2; //128分頻(0.125Mhz),模模式 T3CCTL0 = 0x04; //比較模式 T3CC0 = 125; //溢位值 T3CTL |= 0x08; //開啟溢位中斷 T3CCTL0 |= 0x40;//開T3通道0中斷 T3IE = 1; //定時器3中斷使能 T3CTL |= 0x10; //啟動定時器 IEN0 |= 0X80; //開總中斷 /* 溫度感測器初始化 */ TR0 |= 0x01;//連線溫度感測器到SOC_ADC ATEST |= 0x01; //使能溫度感測器 LED_R_IO = LED_R_ACTIVE; /* 取校準用的值*/ adc = ADCL; adc = ADCH; //清除ADCCON1.EOC標誌 ADCCON3 = 0x3E; //內部參考電壓,12位有效精度,對溫度感測器進行取樣 while (!(ADCCON1 & 0x80));//等待轉換完成 gVoltageAtTemp25 = ADCL;//儲存第一次採集的資料,用於後面的校正 gVoltageAtTemp25 |= (uint16)ADCH << 8; gVoltageAtTemp25 >>= 4;//去除低4位
- 在while迴圈裡檢測溫度
while(1) { /* 檢查是否需要列印 */ if (gSample == 1) { gSample = 0; adc = ADCL; adc = ADCH; //清除ADCCON1.EOC標誌 ADCCON3 = 0x3E; //內部參考電壓,12位有效精度,對溫度感測器進行取樣 while (!(ADCCON1 & 0x80));//等待轉換完成 adcResult = ADCL; adcResult |= (uint16)ADCH << 8; adcResult >>= 4;//去除低4位 tResult = 25 + ((float)adcResult - gVoltageAtTemp25) / 4.5;//溫度校正 tString[0] = (uint16)tResult / 10 + '0'; tString[1] = (uint16)tResult % 10 + '0'; tString[2] = 'C'; tString[3] = '\n'; halUart0SendString(tString,4); LED_R_TOG(); } }