找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1356|回复: 5
收起左侧

请教单片机+ADC0832两位数码管显示跳变

[复制链接]
ID:891876 发表于 2023-7-26 09:28 | 显示全部楼层 |阅读模式
2位数码管显示10V电压,但小数点后一位不停跳变是什么原因?谢谢

724.JPG 725.JPG

//AD转换子程序
unsigned char adc0832(unsigned char CH)
{
     unsigned char i,test,adval;
// adval = 0x00;
// test = 0x00;
    Clk = 0;       //初始化
    DATI = 1;
    _nop_();
    CS = 0;
    _nop_();
    Clk = 1;
   _nop_();
        
   if ( CH == 0x00 )      //通道选择
   {
      Clk = 0;
      DATI = 1;      //通道0的第一位
      _nop_();
      Clk = 1;
      _nop_();
      Clk = 0;
      DATI = 0;      //通道0的第二位
      _nop_();
      Clk = 1;
      _nop_();
    }
    else
    {
       Clk = 0;
    DATI = 1;      //通道1的第一位
      _nop_();
                        Clk = 1;
      _nop_();
                        Clk = 0;
      DATI = 1;      //通道1的第二位
     _nop_();
     Clk = 1;
     _nop_();
   }

      Clk = 0;
      DATI = 1;
    for( i = 0;i < 8;i++ )      //读取前8位的值   
    {
      adval <<= 1;
                        _nop_();
      Clk = 1;
      _nop_();
                        Clk = 0;
      if (DATO)
        adval |= 0x01;
    else
      adval |= 0x00;
                        
    }
      for (i = 0; i < 8; i++)      //读取后8位的值
      {
         test >>= 1;
         if (DATO)
                                 {
                                         test |= 0x80;
                                 }
        else
                                {
                                  test |= 0x00;
                                }

         _nop_();
                                 Clk = 1;
         _nop_();
                                 Clk = 0;

      }
      if (adval == test)  //比较前8位与后8位的值,如果不相同舍去
                          {
                            dat = test;
                          }
       nop_();
       CS = 1;        //释放ADC0832
       DATO = 1;
       Clk = 1;
       return dat;
}

回复

使用道具 举报

ID:1089601 发表于 2023-7-26 14:09 | 显示全部楼层
这种情况多数不是软件问题,应该是CPU供电或是ADC的参考电压是不是纹波比较大。加强滤波后试一下。
回复

使用道具 举报

ID:320306 发表于 2023-7-27 10:55 | 显示全部楼层
软件滤波,减少波动,因为ADC0832是8位的ADC,所以会波动!
回复

使用道具 举报

ID:332444 发表于 2023-7-29 11:41 | 显示全部楼层
上载所有文件方便排查
回复

使用道具 举报

ID:332444 发表于 2023-8-4 10:11 | 显示全部楼层
20230803315517.gif 昨天刚刚对照时序图写的驱动,通过示波器即可观察是否读取到信息,以及调节电位器是否数据有变化,判断驱动是否正常,电位器不动波形也不动.

回复

使用道具 举报

ID:332444 发表于 2023-8-5 06:05 | 显示全部楼层
电位器不动数据也不会变动说明驱动是正常的,那么波动的原因就是其他引起的,这样就排除了驱动程序,仿真不存在干扰波动。
20230804295843.gif 这是单通道1驱动代码,演示单通道0转换电压代码:dy=ADC0832QD(0);dy*=1.9685;满量程499.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表