完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>
標簽 > PCF8591
PCF8591是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取器件。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I2C總線接口。PCF8591的3個地址引腳A0, A1和A2可用于硬件地址編程,允許在同個I2C總線上接入8個PCF8591器件,而無需額外的硬件。
PCF8591是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取器件。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I²C總線接口。PCF8591的3個地址引腳A0, A1和A2可用于硬件地址編程,允許在同個I2C總線上接入8個PCF8591器件,而無需額外的硬件。在PCF8591器件上輸入輸出的地址、控制和數據信號都是通過雙線雙向I2C總線以串行的方式進行傳輸。
功能
PCF8591的功能包括多路模擬輸入、內置跟蹤保持、8-bit模數轉換和8-bit數模轉換。PCF8591的最大轉化速率由I2C總線的最大速率決定。
PCF8591是一個單片集成、單獨供電、低功耗、8-bit CMOS數據獲取器件。PCF8591具有4個模擬輸入、1個模擬輸出和1個串行I²C總線接口。PCF8591的3個地址引腳A0, A1和A2可用于硬件地址編程,允許在同個I2C總線上接入8個PCF8591器件,而無需額外的硬件。在PCF8591器件上輸入輸出的地址、控制和數據信號都是通過雙線雙向I2C總線以串行的方式進行傳輸。
功能
PCF8591的功能包括多路模擬輸入、內置跟蹤保持、8-bit模數轉換和8-bit數模轉換。PCF8591的最大轉化速率由I2C總線的最大速率決定。
特性
【1】單獨供電【2】PCF8591的操作電壓范圍2.5V-6V【3】低待機電流【4】通過I2C總線串行輸入/輸出【5】PCF8591通過3個硬件地址引腳尋址【6】PCF8591的采樣率由I2C總線速率決定【7】4個模擬輸入可編程為單端型或差分輸入【8】自動增量頻道選擇【9】PCF8591的模擬電壓范圍從VSS到VDD【10】PCF8591內置跟蹤保持電路【11】8-bit逐次逼近A/D轉換器【12】通過1路模擬輸出實現DAC增益
引腳信息
AIN0~AIN3:模擬信號輸入端。A0~A2:引腳地址端。VDD、VSS:電源端。(2.5~6V)SDA、SCL:I2C 總線的數據線、時鐘線。OSC:外部時鐘輸入端,內部時鐘輸出端。EXT:內部、外部時鐘選擇線,使用內部時鐘時 EXT 接地。AGND:模擬信號地。AOUT:D/A 轉換輸出端。VREF:基準電源端。
基于51單片機IIC通信的PCF8591學習筆記
PCF8591 是單電源,低功耗8 位CMOS 數據采集器件,具有4 個模擬輸入、一個輸出和一個串行I2C 總線接口。3 個地址引腳A0、A1 和A2 用于編程硬件地址,允許將最多8 個器件連接至I2C總線而不需要額外硬件。PCF8591由于其使用的簡單方便和集成度高,在單片機應用系統中得到了廣泛的應用,這篇文章是介紹IIC通信在ADDA轉換芯片PCF8591中的應用。
關于IIC
IIC總線通信協議的介紹在“基于51單片機IIC通信的AT24C02學習筆記”有詳細的介紹。
關于PCF8591
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均可
第5/4位是選擇模擬電壓輸出方式,一般選擇00單端輸入方式,其他的幾種方式如下圖所示
第3位默認為0
第2位是自動增量使能位,如果自動增量(auto-increment)標志置1,每次A/D 轉換后通道號將自動增加。
第1/0為是在AD轉換時選擇哪一個通道輸入的電壓轉換為數字量。
PCF8591的器件地址
每一個IIC器件都有一個器件地址,來區分不同的IIC設備,下面是PCF8591的地址
它的地址是由1001和A2A1A0組成的,在原理圖中可以看出,A2A1A0均為0,所以器件地址為0x90/0x91,最后一位是讀寫方向位,0表示下一個字節往總線上寫數據,1表示下一個字節從總線上讀取數據.
AD轉換函數
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轉換函數
DA轉換即將從總線上接收到的數字量通過AOUT輸出,該函數無返回值,有一個形參
程序實現:
1
2
3
4
5
6
7
8
9
10
11
12void 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轉換后的數字量轉換為對應的電壓值,在數碼管或液晶上顯示,公式如下:
1#define fun(x) (int)(5*x/255.0*100+0.5) //數字電壓x轉換為模擬電壓的公式
主函數調用
1
2
3
4dat1 = 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學習筆記”
編輯推薦廠商產品技術軟件/工具OS/語言教程專題
電機控制 | DSP | 氮化鎵 | 功率放大器 | ChatGPT | 自動駕駛 | TI | 瑞薩電子 |
BLDC | PLC | 碳化硅 | 二極管 | OpenAI | 元宇宙 | 安森美 | ADI |
無刷電機 | FOC | IGBT | 逆變器 | 文心一言 | 5G | 英飛凌 | 羅姆 |
直流電機 | PID | MOSFET | 傳感器 | 人工智能 | 物聯網 | NXP | 賽靈思 |
步進電機 | SPWM | 充電樁 | IPM | 機器視覺 | 無人機 | 三菱電機 | ST |
伺服電機 | SVPWM | 光伏發電 | UPS | AR | 智能電網 | 國民技術 | Microchip |
開關電源 | 步進電機 | 無線充電 | LabVIEW | EMC | PLC | OLED | 單片機 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 藍牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太網 | 仿真器 | RISC | RAM | 寄存器 | GPU |
語音識別 | 萬用表 | CPLD | 耦合 | 電路仿真 | 電容濾波 | 保護電路 | 看門狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 閾值電壓 | UART | 機器學習 | TensorFlow |
Arduino | BeagleBone | 樹莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 華秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |