日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

基于51单片机IIC通信的PCF8591学习笔记

發(fā)布時(shí)間:2023/12/31 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 基于51单片机IIC通信的PCF8591学习笔记 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

引言

PCF8591 是單電源,低功耗8 位CMOS 數(shù)據(jù)采集器件,具有4 個(gè)模擬輸入、一個(gè)輸出和一個(gè)串行I2C 總線接口。3 個(gè)地址引腳A0、A1 和A2 用于編程硬件地址,允許將最多8 個(gè)器件連接至I2C總線而不需要額外硬件。PCF8591由于其使用的簡單方便和集成度高,在單片機(jī)應(yīng)用系統(tǒng)中得到了廣泛的應(yīng)用,這篇文章是介紹IIC通信在ADDA轉(zhuǎn)換芯片PCF8591中的應(yīng)用。

關(guān)于IIC

IIC總線通信協(xié)議的介紹在"基于51單片機(jī)IIC通信的AT24C02學(xué)習(xí)筆記"有詳細(xì)的介紹。

關(guān)于PCF8591

PCF8591是單片、單電源低功耗8位CMOS數(shù)據(jù)采集器件,具有4個(gè)模擬輸入、一個(gè)輸出和一個(gè)串行I2C總線接口。3個(gè)地址引腳A0、A1 和A2 用于編程硬件地址,允許將最多8個(gè)器件連接至I2C總線而不需要額外硬件。器件的地址、控制和數(shù)據(jù)通過兩線雙向I2C總線傳輸。器件功能包括多路復(fù)用模擬輸入、片上跟蹤和保持功能、8位模數(shù)轉(zhuǎn)換和8位數(shù)模擬轉(zhuǎn)換。最大轉(zhuǎn)換速率取決于I2C總線的最高速率。

PCF8591的操作和AT24C02非常類似,只不過AT24C02是寫入或讀出數(shù)據(jù),而PCF8591是AIN端口輸入模擬電壓,然后PCF8591將轉(zhuǎn)換后的數(shù)字量通過IIC總線發(fā)送給單片機(jī),或是單片機(jī)通過IIC總線給一個(gè)數(shù)字量,然后PCF8591通過AOUT端口將模擬電壓輸出.

控制字格式

最高位默認(rèn)為0

第6位是選擇是否允許模擬電壓輸出,在DA轉(zhuǎn)換時(shí)設(shè)置為1,AD轉(zhuǎn)換時(shí)設(shè)置為0或1均可

第5/4位是選擇模擬電壓輸出方式,一般選擇00單端輸入方式,其他的幾種方式如下圖所示

第3位默認(rèn)為0

第2位是自動(dòng)增量使能位,如果自動(dòng)增量(auto-increment)標(biāo)志置1,每次A/D 轉(zhuǎn)換后通道號將自動(dòng)增加。

第1/0為是在AD轉(zhuǎn)換時(shí)選擇哪一個(gè)通道輸入的電壓轉(zhuǎn)換為數(shù)字量.

PCF8591的器件地址

每一個(gè)IIC器件都有一個(gè)器件地址,來區(qū)分不同的IIC設(shè)備,下面是PCF8591的地址

它的地址是由1001和A2A1A0組成的,在原理圖中可以看出,A2A1A0均為0,所以器件地址為0x90/0x91,最后一位是讀寫方向位,0表示下一個(gè)字節(jié)往總線上寫數(shù)據(jù),1表示下一個(gè)字節(jié)從總線上讀取數(shù)據(jù).

AD轉(zhuǎn)換函數(shù)

AD轉(zhuǎn)換即將AIN端口輸入的模擬電壓轉(zhuǎn)換為數(shù)字量并發(fā)送到總線上,可以知道該函數(shù)需要指定輸入的通道,還要將轉(zhuǎn)換后的數(shù)字量返回,所以該函數(shù)有返回值,和一個(gè)形參

程序?qū)崿F(xiàn):


/*讀取某一個(gè)通道轉(zhuǎn)換后的數(shù)字量*/
uchar Read_D(uchar Channel)
{
uchar dat;
start();
write_byte(0x90); //器件地址+0
ack();
write_byte(Channel); //控制字0x01表示通道1
ack();
start();
write_byte(0x91); //器件地址+1,下一個(gè)字節(jié)要讀取
ack();
dat=read_byte();
ack();
stop();
// AD_led=0; //轉(zhuǎn)換成功顯示
return dat;
}


DA轉(zhuǎn)換函數(shù)

DA轉(zhuǎn)換即將從總線上接收到的數(shù)字量通過AOUT輸出,該函數(shù)無返回值,有一個(gè)形參

程序?qū)崿F(xiàn):

void Out_A(uchar Digital)				
{
	start();
	write_byte(0x90);				//器件地址+0,下一個(gè)字節(jié)為寫入
	ack();
	write_byte(0x40);				//設(shè)置控制字			0100 0000 允許模擬輸出,不自增單端
	ack();
	write_byte(Digital);		//將要轉(zhuǎn)換的數(shù)字量寫入
	ack();	
	stop();
//	DA_led=0;							//轉(zhuǎn)換成功顯示				
}

 

轉(zhuǎn)換公式

我們可以用一個(gè)轉(zhuǎn)換公式,將AD轉(zhuǎn)換后的數(shù)字量轉(zhuǎn)換為對應(yīng)的電壓值,在數(shù)碼管或液晶上顯示,公式如下:

#define fun(x) (int)(5*x/255.0*100+0.5)				//數(shù)字電壓x轉(zhuǎn)換為模擬電壓的公式

 主函數(shù)調(diào)用

        dat1 = Read_D(0x01);			//將通道1(電位器v2)的模擬電壓轉(zhuǎn)換的數(shù)字量讀出
        Out_A(dat1);						//將數(shù)字量轉(zhuǎn)換為模擬量輸出到led顯示
        dis_Voltage1(fun(dat1));		//數(shù)碼管顯示電壓值
        Delay_Ms(5);						//延時(shí)緩沖

  這樣就可以實(shí)時(shí)顯示輸入的電壓值了.還可以將電壓值輸出到led亮度顯示出來.這樣就可以作為一個(gè)簡易的小量程(5v)的電壓表了

總結(jié)

從程序可以看出PCF8591的操作和AT24C02基本一致,就是增加了控制字的內(nèi)容,相比于其他的ADDA轉(zhuǎn)換芯片,它結(jié)構(gòu)簡單,不需要外圍的電路,可以直接使用,而且容易實(shí)現(xiàn)模塊化設(shè)計(jì),在大多數(shù)單片機(jī)系統(tǒng)中ADDA幾乎是不可缺少的,而PCF8591只需要兩個(gè)IO口(時(shí)鐘和數(shù)據(jù))和電源就可以實(shí)現(xiàn),大大節(jié)省了IO口的使用。

關(guān)于AT24C02的使用,請看我另一篇隨筆:“基于51單片機(jī)IIC通信的AT24C02學(xué)習(xí)筆記”

參考資料:

PCF8591_百度百科

iic_百度百科

我的其他博文:

一鍵自動(dòng)格式化你的代碼
C標(biāo)準(zhǔn)庫string.h中幾個(gè)常用函數(shù)的使用詳解
Jlink使用技巧系列教程索引
Jlink使用技巧之燒寫SPI Flash存儲(chǔ)芯片
Jlink使用技巧之虛擬串口功能
Jlink使用技巧之讀取STM32內(nèi)部的程序
Jlink使用技巧之J-Scope虛擬示波器功能

基于uFUN開發(fā)板的RGB調(diào)色板
基于uFUN開發(fā)板的心率計(jì)(一)DMA方式獲取傳感器數(shù)據(jù)
基于uFUN開發(fā)板的心率計(jì)(二)動(dòng)態(tài)閾值算法獲取心率值
基于uFUN開發(fā)板的心率計(jì)(三)Qt上位機(jī)的實(shí)現(xiàn)
Qt實(shí)現(xiàn)軟件自動(dòng)更新的一種簡單方法
【UFUN開發(fā)板評測】小巧而不失精致,簡單而不失內(nèi)涵——uFun開發(fā)板開箱爆照
如何使用串口來給STM32下載程序
STM32串口打印輸出亂碼的解決辦法
Keil報(bào)錯(cuò):cannot open source input file "core_cmInstr.h" 解決辦法

歡迎大家關(guān)注我的個(gè)人博客:www.wangchaochao.top

或微信掃碼關(guān)注我的公眾號


總結(jié)

以上是生活随笔為你收集整理的基于51单片机IIC通信的PCF8591学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。