CC2541板载温度传感器,数据采集采用如下方式获取:
- <p>uint16 ADC_Read (uint8 channel)</p><p>{</p><p> int16 reading = 0;</p><p> uint8 adcChannel = 0x01<<channel;</p><p> int16 Result = 0;</p><p> if (channel <= 7) // 通道0-7需要通过P0.0-P0.7输入</p><p> {</p><p> ADCCFG |= adcChannel;</p><p> }</p><p> uint8 i=0;</p><p> do{</p><p> ADCCON3 = channel | 0x20; // 12位精度,启动转换</p><p> while (!(ADCCON1 & 0x80)); // 等待转换完成</p><p> // 读取采样结果</p><p> reading = (int16)(ADCL);</p><p> reading |= (int16)(ADCH << 8);</p><p> reading >>= 4; // 丢弃低位</p><p> Result += reading; // 累加</p><p> }while(i++ < 10); // 连续采样10次</p><p> if (channel <= 7)</p><p> {</p><p> ADCCFG &= (adcChannel ^ 0xFF);</p><p> }</p><p> return (Result/10);</p><p>}</p>
复制代码
其中为什么要连续采样10次呢?
我测试了下,在同一温度下采样,循环1次采出来的是2900;循环2次采出来的是2175;循环5次采出来的是1740;循环8次采出来的是1632;循环10次采出来的是1595;这个是什么原因呢?
首先确认输入是不是电压本身就是下降了,由于2541是sigma delta的ADC,采样需要抽电流,你在输入端加一个大一点的电容看看有没有改善
一周热门 更多>