ADC0832雙通道實(shí)現(xiàn)AD電壓轉(zhuǎn)換
最近用到雙通道ADC0832,發(fā)現(xiàn)網(wǎng)上的程序很多不能使用,存在各種各樣的一些問題。現(xiàn)提供完整的C程序,供電子愛好者交流使用。
下面是關(guān)于ADC0832的一些資料(部分資料來自互聯(lián)網(wǎng),但均經(jīng)檢驗(yàn)正確無誤,放心使用):
ADC0832 是美國(guó)國(guó)家半導(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.51hei.com/f/adc0832tt_c.rar
#include reg52.h> #include intrins.h>#define uchar unsigned charsbit 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=(addata11)|0x01; //左移elseaddata1=addata11;}for(i=8;i>0;i--){ if(dout)addata2=(addata2>>1)|0x80; //右移elseaddata2=addata2>>1;clk=1;_nop_();clk=0;_nop_(); } cs=1;din=1;clk=1; if(addata1==addata2) //校驗(yàn)return addata1; elsereturn 0;}void main(){ while(1){P1=adconverse(0); //選擇channel 0}}脈沖點(diǎn)火器相關(guān)文章:脈沖點(diǎn)火器原理
評(píng)論