久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 數模轉換(芯片PCF8591)

數模(mo)轉換(huan)(芯(xin)片PCF8591) 時(shi)間:2018-08-15      來(lai)源:未知

一.AD轉換的概念

AD轉(zhuan)換的功(gong)能是把模擬(ni)量(liang)電壓轉(zhuan)換為數(shu)字量(liang)電壓。DA轉(zhuan)換的功(gong)能正(zheng)好相反,就是將數(shu)字量(liang)轉(zhuan)換位(wei)模擬(ni)量(liang)。

二.芯片PCF8591介紹

PCF8591是一(yi)個(ge)單(dan)片集(ji)成、單(dan)獨供電、低功耗、8-bit CMOS數據(ju)獲取器件。PCF8591具有4個(ge)模(mo)擬輸入(ru)、1個(ge)模(mo)擬輸出(chu)和1個(ge)串行I²C總線(xian)接(jie)口。PCF8591的3個(ge)地址引腳A0, A1和A2可用于硬件地址編程,允(yun)許在同(tong)個(ge)I2C總線(xian)上接(jie)入(ru)8個(ge)PCF8591器件,而無需(xu)額外的硬件。在PCF8591器件上輸入(ru)輸出(chu)的地址、控(kong)制和數據(ju)信(xin)號都是通過雙(shuang)(shuang)線(xian)雙(shuang)(shuang)向I²C總線(xian)以串行的方式進行傳輸。

PCF8591 是具有(you)(you)I2C 總線接(jie)口的8 位A/D 及D/A 轉換(huan)器。有(you)(you)4 路A/D 轉換(huan)輸入,1 路D/A 模擬輸出(chu)。這(zhe)就是說(shuo),它既可(ke)以作(zuo)A/D 轉換(huan)也可(ke)以作(zuo)D/A 轉換(huan)。A/D 轉換(huan)為逐次(ci)比較型。電源電壓典型值為5V。

AIN0~AIN3:模擬(ni)信(xin)號輸入端(duan)。

A0~A3:引腳地址端。

VSS:電源(yuan)負極。

SDA、SCL:I2C 總線(xian)(xian)的數據線(xian)(xian)、時鐘線(xian)(xian)。

OSC:外部時(shi)鐘(zhong)輸入端,內部時(shi)鐘(zhong)輸出端。

EXT:內部、外(wai)部時(shi)(shi)鐘選(xuan)擇線,使用內部時(shi)(shi)鐘時(shi)(shi)EXT 接地。

AGND:模(mo)擬信號地。

VREF:基準電源端。

AOUT:D/A 轉換輸出端。

VDD:電源端。(2.5~6V)

數模轉換芯片

模塊原理圖

PCF8591的(de)器件地址:

PCF8591 采用(yong)典型的(de)I2C 總(zong)線接口(kou)器(qi)(qi)件尋址(zhi)(zhi)方(fang)法,即總(zong)線地(di)(di)址(zhi)(zhi)由器(qi)(qi)件地(di)(di)址(zhi)(zhi)、引腳(jiao)地(di)(di)址(zhi)(zhi)和(he)方(fang)向(xiang)位(wei)組(zu)成(cheng)。飛(fei)利蒲公司規定A/D 器(qi)(qi)件地(di)(di)址(zhi)(zhi)為(wei)(wei)(wei)1001。引腳(jiao)地(di)(di)址(zhi)(zhi)A2A1A0,其(qi)值由用(yong)戶選擇,因此I2C 系統(tong)中(zhong)多可(ke)接2^3=8 個具有I2C 總(zong)線接口(kou)的(de)A/D 器(qi)(qi)件。地(di)(di)址(zhi)(zhi)的(de)后一(yi)位(wei)為(wei)(wei)(wei)方(fang)向(xiang)位(wei)R/w ,當(dang)主(zhu)控器(qi)(qi)對A/D 器(qi)(qi)件進行(xing)讀操(cao)作(zuo)時為(wei)(wei)(wei)1,進行(xing)寫(xie)操(cao)作(zuo)時為(wei)(wei)(wei)0。總(zong)線操(cao)作(zuo)時,由器(qi)(qi)件地(di)(di)址(zhi)(zhi)、引腳(jiao)地(di)(di)址(zhi)(zhi)和(he)方(fang)向(xiang)位(wei)組(zu)成(cheng)的(de)從(cong)地(di)(di)址(zhi)(zhi)為(wei)(wei)(wei)主(zhu)控器(qi)(qi)發送(song)的(de)第(di)一(yi)字節。

數模轉換芯片

D7~D4:1001

D3~D1:分別是(shi)A2、A1、A0的電平,我們原理圖上面是(shi)全部接地(di),所以為000。

D0:為方(fang)向設置,當為1時進(jin)(jin)行(xing)讀(du)操作,當為0時進(jin)(jin)行(xing)寫操作。

PCF8591的控制寄存器

數模轉換芯片

D1、D0:AD通(tong)道(dao)選(xuan)擇00通(tong)道(dao)0,01通(tong)道(dao)1,10通(tong)道(dao)2,11通(tong)道(dao)3

D2:自動增益(yi)選擇(有效位(wei)為1)

 D5、D4:輸(shu)入模(mo)(mo)式(shi)選擇:00四(si)路(lu)單數輸(shu)入;01三路(lu)差分(fen)輸(shu)入;10單端與差分(fen)配合(he)輸(shu)入;11為模(mo)(mo)擬輸(shu)入有效

D6:模(mo)擬輸出(chu)使能(neng)位。(時能(neng)為1)

I2C總線的(de)數據(ju)傳送

起始、終止、應答信號時序圖

主機(ji)可以采用(yong)不帶I2C總線(xian)接口(kou)的單片機(ji),如80C51、AT89C2051等單片機(ji),利用(yong)軟件(jian)實現I2C總線(xian)的數(shu)據傳(chuan)送(song),即軟件(jian)與(yu)硬件(jian)結合(he)的信(xin)號模(mo)擬(ni)。為了保證數(shu)據傳(chuan)送(song)的可靠性(xing),標準的I2C總線(xian)的數(shu)據傳(chuan)送(song)有嚴格的時序要(yao)求。I2C總線(xian)的起始信(xin)號、終止信(xin)號、發(fa)送(song)“0”及發(fa)送(song)“1”的模(mo)擬(ni)時序 :

數模轉換芯片

起始信號程序:

void Start_I2c()

{

sda=1; /*發送起始條件的數據信號*/

_nop_();

scl=1;

_nop_(); /*起(qi)始條件建立時間大(da)于4.7us,延時*/

_nop_(); _nop_(); _nop_(); _nop_();

sda=0; /*發(fa)送起(qi)始信號*/

_nop_(); /* 起始條(tiao)件(jian)鎖定(ding)時間大(da)于4μs*/

_nop_(); _nop_(); _nop_(); _nop_();

scl=0; /*開啟(qi)I2C總(zong)線,準備發送或接(jie)收數據 */

_nop_(); _nop_();

}

終止信號程序:

void Stop_I2c()

{

sda=0; /*發送(song)結束條件(jian)的(de)數據信號*/

_nop_(); /*發送結束條件的時鐘信(xin)號(hao)*/

scl=1; /*結(jie)束條件(jian)建立時間大(da)于4μs*/

_nop_(); _nop_(); _nop_(); _nop_(); _nop_();

sda=1; /*發送(song)I2C總線結束信號*/

_nop_(); _nop_(); _nop_(); _nop_();

}

應答信號程序(xu):

void Ack_I2c(bit a)

{

if(a==0)sda=0; /*在(zai)此發(fa)出應答或(huo)非應答信號 */

else sda=1;

_nop_(); _nop_(); _nop_();

scl=1;

_nop_(); /*時(shi)鐘(zhong)低電平周期(qi)大于4μs*/

_nop_(); _nop_(); _nop_(); _nop_();

scl=0; /*清(qing)時鐘線(xian),開啟I2C總(zong)線(xian)以便繼續接收*/

_nop_(); _nop_();

}

PCF8591的寫入

第一(yi)個字(zi)節是器(qi)件地址和讀(du)寫控制

第二個字節被存到控(kong)制寄存器,用于控(kong)制器件功(gong)能。

第三個字(zi)節被存儲(chu)到DAC數(shu)據(ju)寄存器(qi),并(bing)使用(yong)片上(shang)D/A轉換器(qi)轉換成對應的模擬電壓(ya)。(所以(yi)(yi)不輸入D/A時(shi),可以(yi)(yi)不用(yong)輸入。)

PCF8591發(fa)送一個字節的程(cheng)序

bit PCF8591_SendByte(unsigned char addr,unsigned char channel)

{

Start_I2c(); //啟動(dong)總(zong)線

I2C_SendByte(addr); //發送(song)器(qi)件地址

if(ack==0)return(0);

I2C_SendByte(0x40|channel); //發送(song)控制字節

if(ack==0)return(0);

Stop_I2c(); //結束總線

return(1);

}

PCF8591的讀取(qu)

讀(du)取(qu)(qu)的(de)(de)第一(yi)(yi)(yi)個(ge)字(zi)節(jie)是包含(han)上一(yi)(yi)(yi)次轉換(huan)結(jie)果(guo)。將上一(yi)(yi)(yi)個(ge)字(zi)節(jie)讀(du)取(qu)(qu)時,才(cai)開始(shi)進行(xing)這(zhe)次轉換(huan)的(de)(de)采(cai)樣。讀(du)取(qu)(qu)的(de)(de)第二個(ge)字(zi)節(jie)才(cai)是這(zhe)次的(de)(de)轉換(huan)結(jie)果(guo)。所以讀(du)取(qu)(qu)轉換(huan)結(jie)果(guo)的(de)(de)步驟是:發送轉換(huan)命令(ling),將上次的(de)(de)結(jie)果(guo)讀(du)走,然后(hou)等一(yi)(yi)(yi)會兒(er),然后(hou)讀(du)取(qu)(qu)結(jie)果(guo)。

數模轉換芯片

PCF8591讀取一個(ge)字(zi)節的程序:

unsigned char PCF8591_RcvByte(unsigned char addr)

{ unsigned char dat;

Start_I2c(); //啟動總(zong)線

I2C_SendByte(addr+1); //發送器件地址

if(ack==0)return(0);

dat=I2C_RcvByte(); //讀取數據

Ack_I2c(1); //發送(song)非應答信號

Stop_I2c(); //結束總線(xian)

return(dat);

}

PCF8591發送一次轉換的程序(xu):

bit Pcf8591_DaConversion(unsigned char addr,unsigned char channel, unsigned char Val)

{

Start_I2c(); //啟動(dong)總線

I2C_SendByte(addr); //發送器件地址

if(ack==0)return(0);

I2C_SendByte(0x40|channel); //發送控制字節

if(ack==0)return(0);

I2C_SendByte(Val); //發送DAC的數值

if(ack==0)return(0);

Stop_I2c(); //結束總線

return(1);

}

 
 

上一篇:Android藍牙調試助手實現

下一篇:Activity生命周期攻略

熱點文(wen)章(zhang)推薦
華清學(xue)員就業榜(bang)單
高薪學員(yuan)經驗(yan)分享
熱點(dian)新聞(wen)推薦
前臺(tai)專線(xian):010-82525158 企業培訓洽談專(zhuan)線:010-82525379 院校(xiao)合作(zuo)洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部