- 打卡等级:初来乍到
- 打卡总天数:9
- 最近打卡:2025-10-17 01:50:27
已绑定手机
注册会员
- 积分
- 117
|
void sensor(){ //这是ADC 使用 根据测试问题发现除了第一个读取的通道值是正常的 后面两个读取的值存在很大的误差 因为我把三个通道都放到第一个位置进行测试过 都是正常 只要不是第一个位置 那么读取的数据就存在很大的误差
float xdata vl;
vl=adc('r',3.3);
print("热端原始%f\r\n",vl);
r_temp=ntc((vl)/((3.3f-vl)/10000.0f));
vl=adc('l',3.3f);
print("冷端原始%f\r\n",vl);
l_temp=ntc((vl)/((3.3f-vl)/10000.0f));
switch (efficaciousGrade[grade])
{
case 1:
l_temp=l_temp-4;
break;
case 2:
l_temp=l_temp-6.5;
break;
case 3:
l_temp=l_temp-10;
break;
case 4:
l_temp=l_temp-12;
break;
default:
break;
}
vl=adc('i',3.3f);
inputv=13000.0f*(vl/3000.0f)+0.3f;
// if (l_temp>=70)
// {
// ledflicker(0,100);
// }
print("电压%f\r\n",inputv);
print("冷端%f\r\n",l_temp);
print("热端%f\r\n",r_temp);
}
//这是adc实现代码
#include <STC8H.h>
#include "adc.h"
#include <intrins.h>
#include "delay.h"
#include "print.h"
#define start ADC_CONTR |= 0x40; // 启动转换
#define conversionFlag ADC_CONTR&0x20//转换完成标志
#define cleanConversionFlag ADC_CONTR &= ~0x20; //ADC完成标志位清零
#define powerOn ADC_CONTR |= 0x80; // 开启ADC电源
float adc(char ch, float voltage)
{
int res;
switch (ch)
{
//p10
case 'r':
ADC_CONTR &=0xF0;
break;
// //p36
// case 'l':
// ADC_CONTR = (ADC_CONTR & 0xF0) | 0x0E;
// break;
// //p33
// case 'v':
// ADC_CONTR |=0x0B;
// ADC_CONTR &=0xFB;//第三位清零
// P11
case 'i':
// ADC_CONTR = (ADC_CONTR & 0xF0) | 0x01;
ADC_CONTR &=0XF0;
ADC_CONTR |=0X01;
break;
//p10
// case 'l':
// ADC_CONTR &=0xF0;
// break;
// //p11
// case 'r':
// ADC_CONTR &=0XF0; //清除低位 ,高位不动
// ADC_CONTR |=0x01;//强制将第一位赋予1
// break;
//p33
case 'l':
ADC_CONTR &=0xF0;
ADC_CONTR |=0X0B;
break;
// //p32
// case 'l':
// ADC_CONTR &=0xF0;
// ADC_CONTR |=0x0A;
// break;
// //p34
// case 'i':
// ADC_CONTR &=0XF0; //清除低位 ,高位不动
// ADC_CONTR |=0x0c;//强制赋予
// break;
//p35
// case 'o':
// ADC_CONTR &=0xF0;
// ADC_CONTR |=0x0D;
// break;
}
EA = 0;
start
_nop_(); _nop_(); // 等待硬件响应
while (!(conversionFlag));
cleanConversionFlag
res=(ADC_RES << 8) | ADC_RESL; // 将ADC_ //读取ADC结果
return adcRes(res,voltage);
}
void adc_init()//300KSPS@24.000MHz
{
P_SW2 |= 0x80;
ADCTIM = 0x38;
ADCCFG &= ~0x0f; //SPEED(0)
ADCCFG |= 0x20; //RESFMT(1) 结果右对齐
ADCEXCFG = 0x04;
powerOn
Delay1ms(10); // 延时
}
float adcRes(int num,float voltage )
{
float res;
// print("num%d\r\n",num);
res = voltage * (num / 1024.0f);
EA = 1;
return res;
}
|
|