色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

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

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

一.AD轉換的概念

AD轉換的功能是把模擬量電壓轉換為數字量電壓。DA轉換的功能正好相反,就是將數字量轉換位模擬量。

二.芯片PCF8591介紹

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

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

AIN0~AIN3:模擬信號輸入端。

A0~A3:引腳地址端。

VSS:電源負極。

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

OSC:外部時鐘輸入端,內部時鐘輸出端。

EXT:內部、外部時鐘選擇線,使用內部時鐘時EXT 接地。

AGND:模擬信號地。

VREF:基準電源端。

AOUT:D/A 轉換輸出端。

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

數模轉換芯片

模塊原理圖

PCF8591的器件地址:

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

數模轉換芯片

D7~D4:1001

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

D0:為方向設置,當為1時進行讀操作,當為0時進行寫操作。

PCF8591的控制寄存器

數模轉換芯片

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

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

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

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

I2C總線的數據傳送

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

主機可以采用不帶I2C總線接口的單片機,如80C51、AT89C2051等單片機,利用軟件實現I2C總線的數據傳送,即軟件與硬件結合的信號模擬。為了保證數據傳送的可靠性,標準的I2C總線的數據傳送有嚴格的時序要求。I2C總線的起始信號、終止信號、發送“0”及發送“1”的模擬時序 :

數模轉換芯片

起始信號程序:

void Start_I2c()

{

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

_nop_();

scl=1;

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

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

sda=0; /*發送起始信號*/

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

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

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

_nop_(); _nop_();

}

終止信號程序:

void Stop_I2c()

{

sda=0; /*發送結束條件的數據信號*/

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

scl=1; /*結束條件建立時間大于4μs*/

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

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

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

}

應答信號程序:

void Ack_I2c(bit a)

{

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

else sda=1;

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

scl=1;

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

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

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

_nop_(); _nop_();

}

PCF8591的寫入

第一個字節是器件地址和讀寫控制

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

第三個字節被存儲到DAC數據寄存器,并使用片上D/A轉換器轉換成對應的模擬電壓。(所以不輸入D/A時,可以不用輸入。)

PCF8591發送一個字節的程序

bit PCF8591_SendByte(unsigned char addr,unsigned char channel)

{

Start_I2c(); //啟動總線

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

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

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

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

Stop_I2c(); //結束總線

return(1);

}

PCF8591的讀取

讀取的第一個字節是包含上一次轉換結果。將上一個字節讀取時,才開始進行這次轉換的采樣。讀取的第二個字節才是這次的轉換結果。所以讀取轉換結果的步驟是:發送轉換命令,將上次的結果讀走,然后等一會兒,然后讀取結果。

數模轉換芯片

PCF8591讀取一個字節的程序:

unsigned char PCF8591_RcvByte(unsigned char addr)

{ unsigned char dat;

Start_I2c(); //啟動總線

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

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

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

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

Stop_I2c(); //結束總線

return(dat);

}

PCF8591發送一次轉換的程序:

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

{

Start_I2c(); //啟動總線

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生命周期攻略

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 亚洲欧美中文日韩v在线观看不卡 | 国产妇女馒头高清泬20P多 | 欧美老妇牲交vido | 国产自在线拍 | 色天天躁夜夜躁天干天干 | 涩涩av在线| 黄色片网站av | 日本免费一区二区三区日本 | 欧洲洲一区二区精华液 | 日本熟妇人妻XXXXX人HD | 深夜A级毛片免费无码视频 亚洲精品色播一区二区 | 国产女人第一次做爰视频 | 免费人成再在线观看视频 | 久久青青草原AV免费观看 | 伊人久久综合精品一区二区三区 | 国产AV巨作丝袜秘书 | 精精国产XXXX视频在线 | 被黑人猛躁10次高潮视频 | 成年无码专区在线蜜芽TV | 国产亚洲2021成人乱码 | 校花被扒开双腿强行高潮 | 章节把亲妺妺强h怀孕小说 夜夜揉揉日日人人青青 | 好看的欧美熟妇www在线 | 日韩欧群交P片内射中文 | 日韩一卡2卡3卡4卡乱码网站导航 | 国产AV巨作丝袜秘书 | 一本大道久久a久久精二佰 亚洲AV色香蕉一区二区蜜桃 | 欧美日韩精品一区二区在线视频 | 亚洲成在人线AV | 中文字幕日韩一区二区不卡 | 本道天堂成在人线AV无码免费 | 亚洲国产中文在线视频 | 中国肥老太婆高清VIDEO | 黑人玩弄人妻中文在线 | 八戒理论片午影院无码爱恋 | 人妻引诱中文字幕 | 久久亚洲中文字幕不卡一二区 | 11孩岁女被A片黑人黑与白 | 国产亚洲精品久久久999密臂 | 国产精品 欧美 亚洲 制服 | 亚洲色无码专区在线观看 |