歡迎你們關注個人我的博客:www.wangchaochao.top
或微信掃碼關注個人公衆號
PCF8591 是單電源,低功耗8 位CMOS 數據採集器件,具備4 個模擬輸入、一個輸出和一個串行I2C 總線接口。3 個地址引腳A0、A1 和A2 用於編程硬件地址,容許將最多8 個器件鏈接至I2C總線而不須要額外硬件。PCF8591因爲其使用的簡單方便和集成度高,在單片機應用系統中獲得了普遍的應用,這篇文章是介紹IIC通訊在ADDA轉換芯片PCF8591中的應用。html
IIC總線通訊協議的介紹在"基於51單片機IIC通訊的AT24C02學習筆記"有詳細的介紹。git
PCF8591是單片、單電源低功耗8位CMOS數據採集器件,具備4個模擬輸入、一個輸出和一個串行I2C總線接口。3個地址引腳A0、A1 和A2 用於編程硬件地址,容許將最多8個器件鏈接至I2C總線而不須要額外硬件。器件的地址、控制和數據經過兩線雙向I2C總線傳輸。器件功能包括多路複用模擬輸入、片上跟蹤和保持功能、8位模數轉換和8位數模擬轉換。最大轉換速率取決於I2C總線的最高速率。算法
PCF8591的操做和AT24C02很是相似,只不過AT24C02是寫入或讀出數據,而PCF8591是AIN端口輸入模擬電壓,而後PCF8591將轉換後的數字量經過IIC總線發送給單片機,或是單片機經過IIC總線給一個數字量,而後PCF8591經過AOUT端口將模擬電壓輸出.編程
最高位默認爲0微信
第6位是選擇是否容許模擬電壓輸出,在DA轉換時設置爲1,AD轉換時設置爲0或1都可markdown
第5/4位是選擇模擬電壓輸出方式,通常選擇00單端輸入方式,其餘的幾種方式以下圖所示併發
第3位默認爲0模塊化
第2位是自動增量使能位,若是自動增量(auto-increment)標誌置1,每次A/D 轉換後通道號將自動增長。函數
第1/0爲是在AD轉換時選擇哪個通道輸入的電壓轉換爲數字量.post
每個IIC器件都有一個器件地址,來區分不一樣的IIC設備,下面是PCF8591的地址
它的地址是由1001和A2A1A0組成的,在原理圖中能夠看出,A2A1A0均爲0,因此器件地址爲0x90/0x91,最後一位是讀寫方向位,0表示下一個字節往總線上寫數據,1表示下一個字節從總線上讀取數據.
AD轉換即將AIN端口輸入的模擬電壓轉換爲數字量併發送到總線上,能夠知道該函數須要指定輸入的通道,還要將轉換後的數字量返回,因此該函數有返回值,和一個形參
程序實現:
/*讀取某一個通道轉換後的數字量*/
uchar Read_D(uchar Channel)
{
uchar dat;
start();
write_byte(0x90); //器件地址+0
ack();
write_byte(Channel); //控制字0x01表示通道1
ack();
start();
write_byte(0x91); //器件地址+1,下一個字節要讀取
ack();
dat=read_byte();
ack();
stop();
// AD_led=0; //轉換成功顯示
return dat;
}
DA轉換即將從總線上接收到的數字量經過AOUT輸出,該函數無返回值,有一個形參
程序實現:
void Out_A(uchar Digital) { start(); write_byte(0x90); //器件地址+0,下一個字節爲寫入 ack(); write_byte(0x40); //設置控制字 0100 0000 容許模擬輸出,不自增單端 ack(); write_byte(Digital); //將要轉換的數字量寫入 ack(); stop(); // DA_led=0; //轉換成功顯示 }
咱們能夠用一個轉換公式,將AD轉換後的數字量轉換爲對應的電壓值,在數碼管或液晶上顯示,公式以下:
#define fun(x) (int)(5*x/255.0*100+0.5) //數字電壓x轉換爲模擬電壓的公式
dat1 = Read_D(0x01); //將通道1(電位器v2)的模擬電壓轉換的數字量讀出 Out_A(dat1); //將數字量轉換爲模擬量輸出到led顯示 dis_Voltage1(fun(dat1)); //數碼管顯示電壓值 Delay_Ms(5); //延時緩衝
這樣就能夠實時顯示輸入的電壓值了.還能夠將電壓值輸出到led亮度顯示出來.這樣就能夠做爲一個簡易的小量程(5v)的電壓表了
從程序能夠看出PCF8591的操做和AT24C02基本一致,就是增長了控制字的內容,相比於其餘的ADDA轉換芯片,它結構簡單,不須要外圍的電路,能夠直接使用,並且容易實現模塊化設計,在大多數單片機系統中ADDA幾乎是不可缺乏的,而PCF8591只須要兩個IO口(時鐘和數據)和電源就能夠實現,大大節省了IO口的使用。
關於AT24C02的使用,請看我另外一篇隨筆:「基於51單片機IIC通訊的AT24C02學習筆記」
個人其餘博文:
歡迎你們關注個人我的博客:www.wangchaochao.top
或微信掃碼關注個人公衆號