久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1428|回復: 13
打印 上一主題 下一主題
收起左側

單片機讀取兩個通道ADC電壓出現問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:322939 發表于 2024-11-19 19:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大家有沒有遇到使用AI8G1J08A這款芯片在使用查詢方式讀取兩個通道ADC電壓時,只能正確讀取一個通道電壓值,另一個通道讀取的不是輸入電壓值,甚至如:通道2輸入5V,數值沒有變化,如將5V接入通道3那么通道2顯示(1020)數值,通道2輸入接地,在通道3輸入接5V通道2也會顯示正確讀數,使用一個ADC通道就沒問題,如使用兩個通道則會出現前面的問題。奇怪了!

unsigned int Tvuer=0;
unsigned int sum=0,Set_Sum=0;
void Delay(unsigned  int z)
{
unsigned  int y,x;
for(y=0;y<z;y++)
   for(x=0;x<1140;x++);
   }


void Uart1_Init(void)        //9600bps@11.0592MHz
{
      SCON = 0x50;                //8位數據,可變波特率
        AUXR |= 0x40;                //定時器時鐘1T模式  
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //設置定時器模式
        TL1 = 0xE0;                        //設置定時初始值
        TH1 = 0xFE;                        //設置定時初始值
        ET1 = 0;                        //禁止定時器中斷
        TI=1;
        TR1 = 1;                        //定時器1開始計時
        EA=1;
}

/****************Io設置**************/
void IO_init(void)
{
        P3M0=0X03;
        P3M1=0XfC;
        P5M0=0XDF;
        P5M1=0X20;
}

/*************ADC初始化************/
void  ADC_Init(void)
{
        //  P3M0=0x03;
         // P3M1=0xfc;

   ADC_RES=0;
    ADC_RESL=0;           
    P_SW2|=0x80;
    ADCTIM=0x3f;  //??????
   P_SW2&=0x7f;
    ADCCFG=0x0f;   //????????2/16
    ADC_CONTR=0x80;
    Delay(1);
}

/**************ADC處理*************/
unsigned  int Get_adc_tep(unsigned char channel)
{

         ADC_CONTR|=0x40|channel;
              
                _nop_();
         _nop_();
                 
       while(!(ADC_CONTR&0x20));         //????                                       
         ADC_CONTR&=~0x20;                     //??     
     return  (ADC_RES<<2)|ADC_RESL;//??+??????
}

void fighting_1(void)
{
        u8 f;
        u16 volue=0;
        for(f=0;f<20;f++)
        {
                volue+=Get_adc_tep(3);
        }
        Tvuer=volue/20;        
        ZKB=(unsigned  char)Tvuer;
        volue=0;
}
void fighting_2()
{
        u8 t;
        u16 Imst=0;
        for(t=0;t<10;t++)
        {
                Imst+=Get_adc_tep(2);
        }
        sum=Imst/10;
        Imst=0;

}

/***************主程序*****************/
void main(void)
{
        IO_init();        
        ADC_Init();
        Uart1_Init();
        while(1)
        {
        fighting_1();  
          fighting_2();        
                printf("讀取ADC5的值=%x\n",sum);
                Delay(1000);
        }   
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2024-11-20 09:12 | 只看該作者
  1. /**************ADC處理*************/
  2. unsigned  int Get_adc_tep(unsigned char channel)
  3. {

  4.          [color=Red]ADC_CONTR=0xC0|channel;[/color]
  5.               
  6.                 _nop_();
  7.          _nop_();
  8.                  
  9.        while(!(ADC_CONTR&0x20));         //????                                       
  10.          ADC_CONTR&=~0x20;                     //??     
  11.      return  (ADC_RES<<2)|ADC_RESL;//??+??????
  12. }
復制代碼
回復

使用道具 舉報

板凳
ID:322939 發表于 2024-11-20 11:56 | 只看該作者

問題還是一樣,就相當于第2通道和第3通道并在一起,以第3通道為主,當第3通道有電壓輸入它就有變化,通道2輸入電壓卻沒顯示變化.
回復

使用道具 舉報

地板
ID:322939 發表于 2024-11-20 15:51 | 只看該作者
廠家芯片都做出來了正常不會有這問題吧?其它系列型號以這代碼不會出現這問題
回復

使用道具 舉報

5#
ID:879348 發表于 2024-11-20 16:01 | 只看該作者
大部分單片機ADC切換通道過快的時候,就會有通道相互影響的問題,因為本質是電容充電,解決辦法是加長采樣時間(內部電容充電時間)
回復

使用道具 舉報

6#
ID:322939 發表于 2024-11-21 16:37 | 只看該作者
wufa1986 發表于 2024-11-20 16:01
大部分單片機ADC切換通道過快的時候,就會有通道相互影響的問題,因為本質是電容充電,解決辦法是加長采樣 ...

加長采樣時間也沒用,一樣會影響別的通道
回復

使用道具 舉報

7#
ID:322939 發表于 2024-11-22 08:28 | 只看該作者
概然解決不了還是換別的芯片來得快
回復

使用道具 舉報

8#
ID:1136609 發表于 2024-11-23 17:38 | 只看該作者
加長采樣時間也沒用,一樣會影響別的通道
回復

使用道具 舉報

9#
ID:1072347 發表于 2024-11-24 16:01 | 只看該作者
沒找到這個芯片的資料,想看看其是否同時支持多路adc,如果按你所說的,要么是芯片壞了,要么就是干擾問題
回復

使用道具 舉報

10#
ID:1100726 發表于 2024-11-25 09:55 | 只看該作者
可能的原因:
1、通道間干擾:
當兩個ADC通道同時工作時,可能會存在通道間的電磁干擾或信號串擾,導致一個通道的讀取結果受到另一個通道的影響。
2、多路復用器配置問題:
AI8G1J08A芯片可能使用多路復用器來選擇不同的ADC通道。如果多路復用器配置不正確或存在故障,可能會導致通道選擇錯誤,從而影響讀取結果。
3、內部寄存器或電路故障:
芯片內部的寄存器或電路可能發生故障,導致無法正確讀取或處理兩個通道的ADC電壓值。
回復

使用道具 舉報

11#
ID:1034262 發表于 2024-11-25 11:38 | 只看該作者
如果兩路采樣ADC值一樣,則可能是硬件短路、軟件通道選擇沒改變。
回復

使用道具 舉報

12#
ID:322939 發表于 2024-11-25 16:11 | 只看該作者
wohaiainine 發表于 2024-11-25 09:55
可能的原因:
1、通道間干擾:
當兩個ADC通道同時工作時,可能會存在通道間的電磁干擾或信號串擾,導致一 ...

芯片也換過了,還是一樣
回復

使用道具 舉報

13#
ID:322939 發表于 2024-11-25 16:12 | 只看該作者
aldnoahz 發表于 2024-11-24 16:01
沒找到這個芯片的資料,想看看其是否同時支持多路adc,如果按你所說的,要么是芯片壞了,要么就是干擾問題

看了官網的資料可以支持多路ADC,也換過芯片,故障還是一樣
回復

使用道具 舉報

14#
ID:322939 發表于 2024-11-25 16:15 | 只看該作者
coody_sz 發表于 2024-11-25 11:38
如果兩路采樣ADC值一樣,則可能是硬件短路、軟件通道選擇沒改變。

兩路采樣ADC值不一樣,明明設置選通道2的,數值讀出來相差很大,如通道3輸入電壓,則通道2讀出來很穩定
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情亚洲 | 夜久久 | 人人做人人澡人人爽欧美 | 91精品国产综合久久久亚洲 | 成人黄色电影在线播放 | 日本精品视频一区二区三区四区 | 国产成人a亚洲精品 | 成年人网站在线观看视频 | av日日操 | 在线观看第一区 | 精品视频一区二区三区 | 天堂av免费观看 | 嫩草视频网 | 精品国产一区二区国模嫣然 | 国产午夜精品一区二区三区 | 一区二区精品视频 | 91视频进入 | 亚洲永久| 亚洲激情一区二区三区 | 日韩在线第一 | 在线视频一区二区 | 81精品国产乱码久久久久久 | 亚洲天堂av网 | 国产精品美女久久久免费 | 欧美 日韩 亚洲91麻豆精品 | 久久久久久黄 | 久久久精品网站 | 美女黄网 | 免费不卡av| 国产一区二区三区四区五区3d | 久久激情视频 | 日韩精品一区二区三区视频播放 | 亚洲精品乱码 | 国产成人免费视频 | 中文字幕第一页在线 | 日韩一区二区免费视频 | 超碰97人人人人人蜜桃 | 日韩精品久久久 | av天天澡天天爽天天av | 日韩午夜场 | 亚洲第一视频 |