关于PIC10F222的AD转换问题

2020-02-06 10:00发布

最近有个项目要用到PIC10F222这个芯片,本来以为这个料很简单的,现在确卡在AD转换这里,发出来请坛子的兄弟帮忙看看怎么回事。
功能描述,芯片采集一个模拟电压值,这个值的范围大概是0.3V-5V之间,当采集的值小于1.8V时,驱动一个电机,当大于2.8V时,关闭电机。现在通电之后模拟输入量接AN1,并且在AN1能测得有2.0V以上的电压,可是芯片采集到的电压经过换算大概只有0.6V,也就是这个芯片的内部绝对参考电压值。以下是程序:

void Initialization(void)//初始化程序
{
   OPTION = 0XC7; //时钟分频比1:256。
   TRIS    = 2;   //GP1使能模拟输入
   ANS0    = 0;        //数字输出
   ANS1    = 1;        //模拟输入   
   CHS1    = 1;        //选择1号通道
   TMR0    = 0;
}
void delay (void)//延时程序
{
  if(TMR0>=250)//64ms延时
     {
       TMR0     = 0;
       AD_FLAG  = 1;//64MS转换一次
     }
}
void AD_OPEN (void)//AD转换程序
{
   if(AD_FLAG)//AD转换标示位
     {
       AD_FLAG = 0;//清零标志位
       AD_OVER_FLAG = 1;//AD转换开启标志位
       ADON         = 1;
       GO           = 1;
     }
    if(AD_OVER_FLAG)//AD转换开启标志位
      {
       if(!GO)
          {
            AD_TEMP = ADRES;//AD转换结果保存
            AD_OVER_FLAG = 0;//AD转换开启标志位清零
            MOTO_OPEN_FLAG = 1;//电机控制标志位
          }
         
      }
}
void MOTO_OPEN (void)//电机控制程序
{
  if(MOTO_OPEN_FLAG)
   {
        MOTO_OPEN_FLAG = 0;
        if(AD_TEMP <=90)
            {
              MOTO_OUT   = 1;
            }
         if(AD_TEMP >=150)
            {
              MOTO_OUT   = 0;
            }
   }  

main()
{
Initialization();//初始化程序
while(1)
{
delay ();//延时程序
AD_OPEN ();//AD程序
MOTO_OPEN ();//电机控制程序
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wwkkww
1楼-- · 2020-02-06 10:10
 精彩回答 2  元偷偷看……
wangrwnyan123
2楼-- · 2020-02-06 13:27
wwkkww 发表于 2016-11-5 20:50
试试CHS0    = 0;   CHS1    = 1;        //选择1号通道

有时默认值不一定为0,如果为1,通道就错了 ...

我前面已经选择了CHS1 = 1,也就是说我已经选择了1号通道。
wwkkww
3楼-- · 2020-02-06 19:02
初始化上加一句CHS0    = 0; 试试,通道是CHS0与CHS1的组合,如果CHS0上电默认=1,那你只有一个CHS1 = 1,则组合为11,选择3通道,就可能选中的是那个0.6V的通道
wangrwnyan123
4楼-- · 2020-02-06 23:22
wwkkww 发表于 2016-11-5 21:03
初始化上加一句CHS0    = 0; 试试,通道是CHS0与CHS1的组合,如果CHS0上电默认=1,那你只有一个CHS1 = 1, ...

谢谢,现在好了,正确的用法应该是,CHS1 = 0,CHS0 = 1;.

一周热门 更多>