找回密码
 立即注册
查看: 28|回复: 2

8H8K64U用了两路AD,为什么只读了一路

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:3
  • 最近打卡:2025-04-16 22:30:59
已绑定手机

6

主题

6

回帖

54

积分

注册会员

积分
54
发表于 2025-4-16 22:30:59 | 显示全部楼层 |阅读模式
void avarge()//DC功率求平均值
{
char i=0;
        char j=0,k=0;
        
                for(j=0;j<9;j++)
                        adc_pre[j]=read_adc(0xce);//读取直流功率

               
                for(j=0;j<10;j++)//平均值滤波
                {
                        for(k=0;k<9-j;k++)
                        {
                                if(adc_pre[k]>=adc_pre[k+1])
                                {
                                        Vol_Value2=adc_pre[k];
                                        adc_pre[k]=adc_pre[k+1];
                                        adc_pre[k+1]=Vol_Value2;
                                }
                        }
                }
               
                Vol_Value2=0;
                for(i=2;i<8;i++)
                {
                        Vol_Value2=Vol_Value2+adc_pre;
                }
               
                Vol_Adc_num=Vol_Value2/6;

        
        

                if((USB_NUM|DC_NUM)==0)
                {
                        if(!Time_ai_bt)
                        {
                                Time_ai_Pun++;
                                if(Time_ai_Pun<=3)
                                {
                                        Time_ai_bt=1;
                                        Vol_Adc_tsi=Vol_Adc_num+3;
                                }
                        }
                }
                for(j=0;j<9;j++)
                        adc_pre[j]=read_adc(0xc3);//读取输入电压
               
                for(j=0;j<10;j++)//平均值滤波
                {
                        for(k=0;k<9-j;k++)
                        {
                                if(adc_pre[k]>=adc_pre[k+1])
                                {
                                        Vol_Value2=adc_pre[k];
                                        adc_pre[k]=adc_pre[k+1];
                                        adc_pre[k+1]=Vol_Value2;
                                }
                        }
                }
               
               
                Vol_Value2=0;
                for(i=2;i<8;i++)
                {
                        Vol_Value2=Vol_Value2+adc_pre;
                }
               
                AD_EXT_VOTAGE=(float)Vol_Value2/6.0;
                BMS_TIME=AD_EXT_VOTAGE*0.8057*7.32/1000.0;
                AD_EXT_VOTAGE=3300.0/4096.0*AD_EXT_VOTAGE;
                AD_EXT_VOTAGE=AD_EXT_VOTAGE*EXT_VOTAGE_XS;
}

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-16 22:33:00 | 显示全部楼层
在使用STC8H8K64U微控制器进行两路AD转换时,如果只读取了一路数据,可能是由于以下几个原因导致的。以下是对可能问题的分析及解决方案:

1. AD转换通道配置问题
问题描述:在STC8H8K64U中,AD转换通道需要通过寄存器进行配置。如果只配置了一个通道,那么即使硬件连接了两路AD输入,也只能读取一路数据。
解决方案:检查AD转换通道的配置代码,确保两路AD通道都已正确配置。例如,使用ADCCONTR寄存器来选择和启动AD转换通道。

  
  1. c
  2.    ADCCONTR = 0x80; // 打开ADC电源
  3.    ADCCONTR |= 0x00; // 选择通道0
  4.    nop(); nop(); nop(); nop(); // 等待稳定
  5.    ADCCONTR |= 0x08; // 启动AD转换
  6.    while (!(ADCCONTR & 0x10)); // 等待转换完成
  7.    int adcvalue0 = ADCRES; // 读取通道0的AD值
  8.    ADCCONTR |= 0x01; // 选择通道1
  9.    nop(); nop(); nop(); nop(); // 等待稳定
  10.    ADCCONTR |= 0x08; // 启动AD转换
  11.    while (!(ADCCONTR & 0x10)); // 等待转换完成
  12.    int adcvalue1 = ADCRES; // 读取通道1的AD值
复制代码

2. AD转换时序问题
问题描述:AD转换需要一定的时间来完成,如果在转换未完成时读取数据,可能会导致读取错误或只读取到一路数据。
解决方案:在启动AD转换后,确保等待足够的时间让转换完成。可以通过检查ADCCONTR寄存器的标志位来判断转换是否完成。

  
  1. c
  2.    ADCCONTR |= 0x08; // 启动AD转换
  3.    while (!(ADCCONTR & 0x10)); // 等待转换完成
复制代码

3. AD转换结果存储问题
问题描述:AD转换结果存储在ADCRES和ADCRESL寄存器中。如果只读取了一个寄存器的值,可能会导致数据不完整或只读取到一路数据。
解决方案:确保在读取AD转换结果时,同时读取ADCRES和ADCRESL寄存器的值,并将它们组合成一个完整的AD值。

   ```c
   int adcvalue = (ADCRES

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2025-4-17 16:54:26 | 显示全部楼层
read_adc(0xce)
read_adc(0xc3)
这两句分别采集了ADC14(P0.6)和ADC3(P1.3)
截图202504171654213130.jpg
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 22:05 , Processed in 0.112323 second(s), 63 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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