查看: 1312|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)讀取兩個(gè)通道ADC電壓出現(xiàn)問(wèn)題

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

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位數(shù)據(jù),可變波特率
        AUXR |= 0x40;                //定時(shí)器時(shí)鐘1T模式  
        AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
        TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
        TL1 = 0xE0;                        //設(shè)置定時(shí)初始值
        TH1 = 0xFE;                        //設(shè)置定時(shí)初始值
        ET1 = 0;                        //禁止定時(shí)器中斷
        TI=1;
        TR1 = 1;                        //定時(shí)器1開(kāi)始計(jì)時(shí)
        EA=1;
}

/****************Io設(shè)置**************/
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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:161164 發(fā)表于 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. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

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

問(wèn)題還是一樣,就相當(dāng)于第2通道和第3通道并在一起,以第3通道為主,當(dāng)?shù)?通道有電壓輸入它就有變化,通道2輸入電壓卻沒(méi)顯示變化.
回復(fù)

使用道具 舉報(bào)

地板
ID:322939 發(fā)表于 2024-11-20 15:51 | 只看該作者
廠家芯片都做出來(lái)了正常不會(huì)有這問(wèn)題吧?其它系列型號(hào)以這代碼不會(huì)出現(xiàn)這問(wèn)題
回復(fù)

使用道具 舉報(bào)

5#
ID:879348 發(fā)表于 2024-11-20 16:01 | 只看該作者
大部分單片機(jī)ADC切換通道過(guò)快的時(shí)候,就會(huì)有通道相互影響的問(wèn)題,因?yàn)楸举|(zhì)是電容充電,解決辦法是加長(zhǎng)采樣時(shí)間(內(nèi)部電容充電時(shí)間)
回復(fù)

使用道具 舉報(bào)

6#
ID:322939 發(fā)表于 2024-11-21 16:37 | 只看該作者
wufa1986 發(fā)表于 2024-11-20 16:01
大部分單片機(jī)ADC切換通道過(guò)快的時(shí)候,就會(huì)有通道相互影響的問(wèn)題,因?yàn)楸举|(zhì)是電容充電,解決辦法是加長(zhǎng)采樣 ...

加長(zhǎng)采樣時(shí)間也沒(méi)用,一樣會(huì)影響別的通道
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

8#
ID:1136609 發(fā)表于 2024-11-23 17:38 | 只看該作者
加長(zhǎng)采樣時(shí)間也沒(méi)用,一樣會(huì)影響別的通道
回復(fù)

使用道具 舉報(bào)

9#
ID:1072347 發(fā)表于 2024-11-24 16:01 | 只看該作者
沒(méi)找到這個(gè)芯片的資料,想看看其是否同時(shí)支持多路adc,如果按你所說(shuō)的,要么是芯片壞了,要么就是干擾問(wèn)題
回復(fù)

使用道具 舉報(bào)

10#
ID:1100726 發(fā)表于 2024-11-25 09:55 | 只看該作者
可能的原因:
1、通道間干擾:
當(dāng)兩個(gè)ADC通道同時(shí)工作時(shí),可能會(huì)存在通道間的電磁干擾或信號(hào)串?dāng)_,導(dǎo)致一個(gè)通道的讀取結(jié)果受到另一個(gè)通道的影響。
2、多路復(fù)用器配置問(wèn)題:
AI8G1J08A芯片可能使用多路復(fù)用器來(lái)選擇不同的ADC通道。如果多路復(fù)用器配置不正確或存在故障,可能會(huì)導(dǎo)致通道選擇錯(cuò)誤,從而影響讀取結(jié)果。
3、內(nèi)部寄存器或電路故障:
芯片內(nèi)部的寄存器或電路可能發(fā)生故障,導(dǎo)致無(wú)法正確讀取或處理兩個(gè)通道的ADC電壓值。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

12#
ID:322939 發(fā)表于 2024-11-25 16:11 | 只看該作者
wohaiainine 發(fā)表于 2024-11-25 09:55
可能的原因:
1、通道間干擾:
當(dāng)兩個(gè)ADC通道同時(shí)工作時(shí),可能會(huì)存在通道間的電磁干擾或信號(hào)串?dāng)_,導(dǎo)致一 ...

芯片也換過(guò)了,還是一樣
回復(fù)

使用道具 舉報(bào)

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

看了官網(wǎng)的資料可以支持多路ADC,也換過(guò)芯片,故障還是一樣
回復(fù)

使用道具 舉報(bào)

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

兩路采樣ADC值不一樣,明明設(shè)置選通道2的,數(shù)值讀出來(lái)相差很大,如通道3輸入電壓,則通道2讀出來(lái)很穩(wěn)定
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

快速回復(fù) 返回頂部 返回列表