gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 數(shù)模轉(zhuǎn)換(芯片PCF8591)

數(shù)模轉(zhuǎn)換(芯片PCF8591) 時(shí)間:2018-08-15      來源:未知

一.AD轉(zhuǎn)換的概念

AD轉(zhuǎn)換的功能是把模擬量電壓轉(zhuǎn)換為數(shù)字量電壓。DA轉(zhuǎn)換的功能正好相反,就是將數(shù)字量轉(zhuǎn)換位模擬量。

二.芯片PCF8591介紹

PCF8591是一個(gè)單片集成、單獨(dú)供電、低功耗、8-bit CMOS數(shù)據(jù)獲取器件。PCF8591具有4個(gè)模擬輸入、1個(gè)模擬輸出和1個(gè)串行I²C總線接口。PCF8591的3個(gè)地址引腳A0, A1和A2可用于硬件地址編程,允許在同個(gè)I2C總線上接入8個(gè)PCF8591器件,而無需額外的硬件。在PCF8591器件上輸入輸出的地址、控制和數(shù)據(jù)信號(hào)都是通過雙線雙向I²C總線以串行的方式進(jìn)行傳輸。

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

AIN0~AIN3:模擬信號(hào)輸入端。

A0~A3:引腳地址端。

VSS:電源負(fù)極。

SDA、SCL:I2C 總線的數(shù)據(jù)線、時(shí)鐘線。

OSC:外部時(shí)鐘輸入端,內(nèi)部時(shí)鐘輸出端。

EXT:內(nèi)部、外部時(shí)鐘選擇線,使用內(nèi)部時(shí)鐘時(shí)EXT 接地。

AGND:模擬信號(hào)地。

VREF:基準(zhǔn)電源端。

AOUT:D/A 轉(zhuǎn)換輸出端。

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

數(shù)模轉(zhuǎn)換芯片

模塊原理圖

PCF8591的器件地址:

PCF8591 采用典型的I2C 總線接口器件尋址方法,即總線地址由器件地址、引腳地址和方向位組成。飛利蒲公司規(guī)定A/D 器件地址為1001。引腳地址A2A1A0,其值由用戶選擇,因此I2C 系統(tǒng)中多可接2^3=8 個(gè)具有I2C 總線接口的A/D 器件。地址的后一位為方向位R/w ,當(dāng)主控器對(duì)A/D 器件進(jìn)行讀操作時(shí)為1,進(jìn)行寫操作時(shí)為0。總線操作時(shí),由器件地址、引腳地址和方向位組成的從地址為主控器發(fā)送的第一字節(jié)。

數(shù)模轉(zhuǎn)換芯片

D7~D4:1001

D3~D1:分別是A2、A1、A0的電平,我們?cè)韴D上面是全部接地,所以為000。

D0:為方向設(shè)置,當(dāng)為1時(shí)進(jìn)行讀操作,當(dāng)為0時(shí)進(jìn)行寫操作。

PCF8591的控制寄存器

數(shù)模轉(zhuǎn)換芯片

D1、D0:AD通道選擇00通道0,01通道1,10通道2,11通道3

D2:自動(dòng)增益選擇(有效位為1)

D5、D4:輸入模式選擇:00四路單數(shù)輸入;01三路差分輸入;10單端與差分配合輸入;11為模擬輸入有效

D6:模擬輸出使能位。(時(shí)能為1)

I2C總線的數(shù)據(jù)傳送

起始、終止、應(yīng)答信號(hào)時(shí)序圖

主機(jī)可以采用不帶I2C總線接口的單片機(jī),如80C51、AT89C2051等單片機(jī),利用軟件實(shí)現(xiàn)I2C總線的數(shù)據(jù)傳送,即軟件與硬件結(jié)合的信號(hào)模擬。為了保證數(shù)據(jù)傳送的可靠性,標(biāo)準(zhǔn)的I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)、終止信號(hào)、發(fā)送“0”及發(fā)送“1”的模擬時(shí)序 :

數(shù)模轉(zhuǎn)換芯片

起始信號(hào)程序:

void Start_I2c()

{

sda=1; /*發(fā)送起始條件的數(shù)據(jù)信號(hào)*/

_nop_();

scl=1;

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

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

sda=0; /*發(fā)送起始信號(hào)*/

_nop_(); /* 起始條件鎖定時(shí)間大于4μs*/

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

scl=0; /*開啟I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */

_nop_(); _nop_();

}

終止信號(hào)程序:

void Stop_I2c()

{

sda=0; /*發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)*/

_nop_(); /*發(fā)送結(jié)束條件的時(shí)鐘信號(hào)*/

scl=1; /*結(jié)束條件建立時(shí)間大于4μs*/

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

sda=1; /*發(fā)送I2C總線結(jié)束信號(hào)*/

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

}

應(yīng)答信號(hào)程序:

void Ack_I2c(bit a)

{

if(a==0)sda=0; /*在此發(fā)出應(yīng)答或非應(yīng)答信號(hào) */

else sda=1;

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

scl=1;

_nop_(); /*時(shí)鐘低電平周期大于4μs*/

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

scl=0; /*清時(shí)鐘線,開啟I2C總線以便繼續(xù)接收*/

_nop_(); _nop_();

}

PCF8591的寫入

第一個(gè)字節(jié)是器件地址和讀寫控制

第二個(gè)字節(jié)被存到控制寄存器,用于控制器件功能。

第三個(gè)字節(jié)被存儲(chǔ)到DAC數(shù)據(jù)寄存器,并使用片上D/A轉(zhuǎn)換器轉(zhuǎn)換成對(duì)應(yīng)的模擬電壓。(所以不輸入D/A時(shí),可以不用輸入。)

PCF8591發(fā)送一個(gè)字節(jié)的程序

bit PCF8591_SendByte(unsigned char addr,unsigned char channel)

{

Start_I2c(); //啟動(dòng)總線

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

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

I2C_SendByte(0x40|channel); //發(fā)送控制字節(jié)

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

Stop_I2c(); //結(jié)束總線

return(1);

}

PCF8591的讀取

讀取的第一個(gè)字節(jié)是包含上一次轉(zhuǎn)換結(jié)果。將上一個(gè)字節(jié)讀取時(shí),才開始進(jìn)行這次轉(zhuǎn)換的采樣。讀取的第二個(gè)字節(jié)才是這次的轉(zhuǎn)換結(jié)果。所以讀取轉(zhuǎn)換結(jié)果的步驟是:發(fā)送轉(zhuǎn)換命令,將上次的結(jié)果讀走,然后等一會(huì)兒,然后讀取結(jié)果。

數(shù)模轉(zhuǎn)換芯片

PCF8591讀取一個(gè)字節(jié)的程序:

unsigned char PCF8591_RcvByte(unsigned char addr)

{ unsigned char dat;

Start_I2c(); //啟動(dòng)總線

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

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

dat=I2C_RcvByte(); //讀取數(shù)據(jù)

Ack_I2c(1); //發(fā)送非應(yīng)答信號(hào)

Stop_I2c(); //結(jié)束總線

return(dat);

}

PCF8591發(fā)送一次轉(zhuǎn)換的程序:

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

{

Start_I2c(); //啟動(dòng)總線

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

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

I2C_SendByte(0x40|channel); //發(fā)送控制字節(jié)

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

I2C_SendByte(Val); //發(fā)送DAC的數(shù)值

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

Stop_I2c(); //結(jié)束總線

return(1);

}

 
 

上一篇:Android藍(lán)牙調(diào)試助手實(shí)現(xiàn)

下一篇:Activity生命周期攻略

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部