19.IIC通信:PCF8591:數模/模數轉換芯片

IIC通信

IIC總線是雙向、二線制、同步串行總線,是一種多向控制總線,即多個芯片可以連接到同一個總線結構下,每個芯片都可以作爲實時數據傳輸的控制源。

PCF8591芯片:

PCF8591:模數/數模轉換芯片,是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取器件,具有4個模擬輸入、1個模擬輸出和一個串行IIC總線接口。原理圖如下:
在這裏插入圖片描述
1個模擬輸出:AOUT引腳,接在外部排針OUT上(比賽沒有涉及過DA輸出);
4個模擬輸入:AIN0接在外部排針(可以由外部輸入模擬信號),AIN1接在光敏電阻,AIN2接在LM324放大器,AIN3接在滑動變阻器Rb2,比賽沒有使用過AIN0和AIN2。光敏電阻和滑動變阻器原理圖如下:
在這裏插入圖片描述
如何確定使用的是IIC總線系統的PCF8591芯片——發送PCF8591的有效地址到器件(發送的第一個字節)
在這裏插入圖片描述

IIC_SendByte(0x90);		//寫IIC_SendByte(0x91);		//讀

緊接着發送控制字到PCF8591 將被存儲在控制寄存器,用於控制器件功能。(發送的第二個字節)
在這裏插入圖片描述
控制寄存器的高半字節用於允許模擬輸出,和將模擬輸入編程爲單端或差分輸入。低半字節選擇一個由高半字節定義的模擬輸入通道。(見芯片手冊)通道3捕獲模擬信號輸入:0X03;允許模擬信號輸出:0X40。

讀模式的總線協議,A/D轉換:
在這裏插入圖片描述

uchar AD_Read(uchar add)
{
	uchar temp;
	//IIC寫
	IIC_Start();
	IIC_SendByte(0X90);
	IIC_WaitAck();
	IIC_SendByte(add);
	IIC_WaitAck();
	IIC_Stop();
	//IIC讀
	IIC_Start();
	IIC_SendByte(0X91);
	IIC_WaitAck();
	temp=IIC_AckByte();
	IIC_Stop();
	//返回temp值
	return temp;
}

寫模式的總線協議,D/A轉換:
在這裏插入圖片描述

void AD_Write(uchar dat)
{
	IIC_Start();
	IIC_SendByte(0X90);
	IIC_WaitAck();
	IIC_SendByte(0X40);
	IIC_WainAck();
	IIC_SendByte(dat);
	IIC_WaitAck();
	IIC_Stop();
}

綜上讀寫程序,我們可以總結出,使用PCF8591芯片的步驟:
1.開啓IIC;2.發送PCF8591的寫有效地址;3.發送控制字確定輸入或輸出地址;4.如果需要寫入數據,則控制字確定的是模擬輸出模式,緊接着寫入數據;如果需要讀出數據,則控制字確定的是從通道0~3之一捕獲模擬信號輸入,關閉並重新開啓IIC,發送PCF8591的讀有效地址,通過IIC獲取數據。5.關閉IIC,如果是讀取數據則需返回值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章