bios 发表于 2019-8-22 20:12:31

求助大家:AD转换,为什么0通道正常,后面1通道就不正常呢

求助大家,我按教程编PCF8591AD/DA转换芯片的实验。
输出的信息,输出到数码管上,动态扫描,可以为什么0通道可以正常工作,1通道,就显示最高电压5V
如果把1通道的语句,放在前面,它能工作,紧跟在后面那个通道,就不正常,我弄了一下午,也没找出原因,特请教大家。

while (1)
    {
      if (flag300ms)
      {
            flag300ms = 0;
            //显示通道0的电压
            val = GetADCValue(0);   //获取ADC通道0的转换值
            val = (val*25) / 255;   //电压值=转换结果*2.5V/255,式中的25隐含了一位十进制小数
            LedBuff = LedChar & 0x7F;//通道0的整数位显示到数码管第5位,并点亮第5位的小数点
            LedBuff = LedChar;         //通道0的小数位显示到数码管第4位

             //显示通道1的电压
            val = GetADCValue(1);   //获取ADC通道1的转换值
            val = (val*25) / 255;   //电压值=转换结果*2.5V/255,式中的25隐含了一位十进制小数
            LedBuff = LedChar & 0x7F;//通道1的整数位显示到数码管第1位,并点亮第1位的小数点
            LedBuff = LedChar;         //通道1的小数位显示到数码管第0位
      }
    }

fshwen 发表于 2019-8-24 10:15:46

楼主的这个现象我当初在搞ADC0832的时候遇到过,也是在发送了通道切换命令,但还是程序第一次操作的那个通道,搞了很久最后看芯片的指导书,才发现是在切换通道的时候片选没有高电平(没有放开片选),楼主的这个是IIC的,没搞过,您不妨再仔细看看芯片的资料,或许能发现问题的所在

bios 发表于 2019-8-24 11:22:13

谢谢您 的回复
程序是我按教程,做完AD采集显示在LCD这个实验后,再做的显示在LED上。原LCD程序是这样的,真奇怪,下面这个程序,是正常的,三路同时采集,都正常。
换用LED就不行了,差别最大的,是LED需要动态刷新,我感觉可能是刷新导致的,我再查一下。

if (flag300ms)
{
   flag300ms=0;
   val=getadcvalue(0);
   valuetostring(str,val);
   lcdshowstr(0,1,str);

   val=getadcvalue(1);
   valuetostring(str,val);
   lcdshowstr(6,1,str);

   val=getadcvalue(3);
   valuetostring(str,val);
   lcdshowstr(12,1,str);
    }
页: [1]
查看完整版本: 求助大家:AD转换,为什么0通道正常,后面1通道就不正常呢