專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

ADC0832雙通道實(shí)現(xiàn)AD電壓轉(zhuǎn)換

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年03月05日   【字體:


最近用到雙通道ADC0832,發(fā)現(xiàn)網(wǎng)上的程序很多不能使用,存在各種各樣的一些問題。現(xiàn)提供完整的C程序,供電子愛好者交流使用。

下面是關(guān)于ADC0832的一些資料(部分資料來自互聯(lián)網(wǎng),但均經(jīng)檢驗(yàn)正確無誤,放心使用):

ADC0832 是美國國家半導(dǎo)體公司生產(chǎn)的一種8 位分辨率、雙通道A/D轉(zhuǎn)換芯片。由于它體積小,兼容性,性價(jià)比高而深受單片機(jī)愛好者及企業(yè)歡迎,其目前已經(jīng)有很高的普及率。

ADC0832 具有以下特點(diǎn):
· 8位分辨率;
· 雙通道A/D轉(zhuǎn)換;
· 輸入輸出電平與TTL/CMOS相兼容;
· 5V電源供電時(shí)輸入電壓在0~5V之間;
· 工作頻率為250KHZ,轉(zhuǎn)換時(shí)間為32μS;
· 一般功耗僅為15mW;
· 8P、14P—DIP(雙列直插)、PICC 多種封裝;
· 商用級(jí)芯片溫寬為0°C to +70°C,工業(yè)級(jí)芯片溫寬為−40°C to +85°C;

 

芯片接口說明:
· CS_ 片選使能,低電平芯片使能。
· CH0 模擬輸入通道0,或作為IN+/-使用。
· CH1 模擬輸入通道1,或作為IN+/-使用。
· GND 芯片參考0 電位(地)。
· DI 數(shù)據(jù)信號(hào)輸入,選擇通道控制。
· DO 數(shù)據(jù)信號(hào)輸出,轉(zhuǎn)換數(shù)據(jù)輸出。
· CLK 芯片時(shí)鐘輸入。
· Vcc/REF 電源輸入及參考電壓輸入(復(fù)用)。

ADC0832 為8位分辨率A/D轉(zhuǎn)換芯片,其最高分辨可達(dá)256級(jí),可以適應(yīng)一般的模擬量轉(zhuǎn)換要求。其內(nèi)部電源輸入與參考電壓的復(fù)用,使得芯片的模擬電壓輸入在0~5V之間。芯片轉(zhuǎn)換時(shí)間僅為32μS,據(jù)有雙數(shù)據(jù)輸出可作為數(shù)據(jù)校驗(yàn),以減少數(shù)據(jù)誤差,轉(zhuǎn)換速度快且穩(wěn)定性能強(qiáng)。獨(dú)立的芯片使能輸入,使多器件掛接和處理器控制變的更加方便。通過DI 數(shù)據(jù)輸入端,可以輕易的實(shí)現(xiàn)通道功能的選擇。


單片機(jī)對(duì)ADC0832 的控制原理:
正常情況下ADC0832 與單片機(jī)的接口應(yīng)為4條數(shù)據(jù)線,分別是CS、CLK、DO、DI。但由于DO端與DI端在通信時(shí)并未同時(shí)有效并與單片機(jī)的接口是雙向的,所以電路設(shè)計(jì)時(shí)可以將DO和DI 并聯(lián)在一根數(shù)據(jù)線上使用。當(dāng)ADC0832未工作時(shí)其CS輸入端應(yīng)為高電平,此時(shí)芯片禁用,CLK 和DO/DI 的電平可任意。當(dāng)要進(jìn)行A/D轉(zhuǎn)換時(shí),須先將CS使能端置于低電平并且保持低電平直到轉(zhuǎn)換完全結(jié)束。此時(shí)芯片開始轉(zhuǎn)換工作,同時(shí)由處理器向芯片時(shí)鐘輸入端CLK 輸入時(shí)鐘脈沖,DO/DI端則使用DI端輸入通道功能選擇的數(shù)據(jù)信號(hào)。在第1 個(gè)時(shí)鐘脈沖的下沉之前DI端必須是高電平,表示啟始信號(hào)。在第2、3個(gè)脈沖下沉之前DI端應(yīng)輸入2 位數(shù)據(jù)用于選擇通道功能,其功能項(xiàng)見下圖。


 

當(dāng)此2 位數(shù)據(jù)為“1”、“0”時(shí),只對(duì)CH0 進(jìn)行單通道轉(zhuǎn)換。當(dāng)2位數(shù)據(jù)為“1”、“1”時(shí),只對(duì)CH1進(jìn)行單通道轉(zhuǎn)換。當(dāng)2 位數(shù)據(jù)為“0”、“0”時(shí),將CH0作為正輸入端IN+,CH1作為負(fù)輸入端IN-進(jìn)行輸入。當(dāng)2 位數(shù)據(jù)為“0”、“1”時(shí),將CH0作為負(fù)輸入端IN-,CH1 作為正輸入端IN+進(jìn)行輸入。到第3 個(gè)脈沖的下沉之后DI端的輸入電平就失去輸入作用,此后DO/DI端則開始利用數(shù)據(jù)輸出DO進(jìn)行轉(zhuǎn)換數(shù)據(jù)的讀取。從第4個(gè)脈沖下沉開始由DO端輸出轉(zhuǎn)換數(shù)據(jù)最高位DATA7,隨后每一個(gè)脈沖下沉DO端輸出下一位數(shù)據(jù)。直到第11個(gè)脈沖時(shí)發(fā)出最低位數(shù)據(jù)DATA0,一個(gè)字節(jié)的數(shù)據(jù)輸出完成。也正是從此位開始輸出下一個(gè)相反字節(jié)的數(shù)據(jù),即從第11個(gè)字節(jié)的下沉輸出DATD0。隨后輸出8位數(shù)據(jù),到第19 個(gè)脈沖時(shí)數(shù)據(jù)輸出完成,也標(biāo)志著一次A/D轉(zhuǎn)換的結(jié)束。最后將CS置高電平禁用芯片,直接將轉(zhuǎn)換后的數(shù)據(jù)進(jìn)行處理就可以了。

具體時(shí)序圖如下:


參考程序如下(該程序已在硬件上調(diào)試通過):
完整代碼及hex文件下載:http://www.torrancerestoration.com/f/adc0832tt_c.rar

#include <reg52.h>       
#include <intrins.h>
#define uchar unsigned char
sbit cs=P2^4;
sbit clk=P2^5;
sbit dout=P2^6;     //din,dout兩腳可以共同接一個(gè)I/O口,因?yàn)橥ㄐ艜r(shí)并未同時(shí)有效,并且單片機(jī)接口是雙向的
sbit din=P2^7;    
uchar adconverse(bit channel)
{
 uchar i,addata1,addata2;
 clk=0;
 cs=0;
 _nop_();
 din=1;   //啟動(dòng)信號(hào)
 _nop_();
 clk=1; //pulse 1 
 _nop_();
 clk=0;
 _nop_();
   
 din=1;   //sgl ,單通道選擇
 _nop_();
 clk=1;   //pulse2
 _nop_();
 clk=0;   
 _nop_();
 
 din=channel;   //odd ,channel選擇位,為0為channel 0,為1channel 1
 _nop_();
 clk=1;     //pulse3
 _nop_();
 clk=0;    
 _nop_();
 din=1;

 for(i=8;i>0;i--)
 {
  clk=1;
  _nop_();
  clk=0;
  _nop_();
  if(dout)
  //addata1=(addata1|dout)<<1;  //dout是1位(bit),addata1是8位(Byte),不能直接按位或
  addata1=(addata1<<1)|0x01;   //左移
  else
  addata1=addata1<<1;
      
 }
 for(i=8;i>0;i--)
 { 
  
  if(dout)
  addata2=(addata2>>1)|0x80; //右移
  else
  addata2=addata2>>1;
  clk=1;
  _nop_();
  clk=0;
  _nop_();   
 } 
 cs=1;
 din=1;
 clk=1;   
 if(addata1==addata2) //校驗(yàn)
 return  addata1; 
 else
 return  0;
}
void main()
{ 
 while(1)
 {
  P1=adconverse(0);    //選擇channel 0
 }
 
}

關(guān)閉窗口

相關(guān)文章