單片機(jī)模數(shù)轉(zhuǎn)換的處理方法
1. 電路需求在一些舊式單片機(jī)如51/52等等,內(nèi)部沒有集成模數(shù)轉(zhuǎn)換模塊,所以此類芯片的開發(fā)板要學(xué)習(xí)模數(shù)轉(zhuǎn)換,需要借助外部模數(shù)轉(zhuǎn)換電路。其中一個常用的外部模數(shù)轉(zhuǎn)換芯片是PCF8591。下圖顯示了使用P
1. 電路需求
在一些舊式單片機(jī)如51/52等等,內(nèi)部沒有集成模數(shù)轉(zhuǎn)換模塊,所以此類芯片的開發(fā)板要學(xué)習(xí)模數(shù)轉(zhuǎn)換,需要借助外部模數(shù)轉(zhuǎn)換電路。其中一個常用的外部模數(shù)轉(zhuǎn)換芯片是PCF8591。下圖顯示了使用PCF8591芯片的模數(shù)轉(zhuǎn)換電路圖。只需按照圖中連接相應(yīng)的電路即可實(shí)現(xiàn)模數(shù)轉(zhuǎn)換。另外,一些增強(qiáng)性8050內(nèi)核芯片已經(jīng)集成了模數(shù)轉(zhuǎn)換模塊,例如STC15等。
2. 原理
模數(shù)轉(zhuǎn)換即是將輸入電壓與內(nèi)部參考基準(zhǔn)電壓進(jìn)行比較。模塊內(nèi)部將基準(zhǔn)電壓分成多個電壓開關(guān)(例如256個,精度為8位),輸入電壓與每個開關(guān)電壓進(jìn)行比較。當(dāng)輸入電壓的值與某個電壓開關(guān)的值相等或最接近時,該開關(guān)打開,并且對應(yīng)的二進(jìn)制編碼存儲到存儲器中。這樣就完成了一次模擬量到數(shù)字量的轉(zhuǎn)換。
3. 接口
模數(shù)轉(zhuǎn)換芯片PCF8591具有以下接口:
1. 數(shù)據(jù)傳輸接口:SCL、SDA(IIC協(xié)議)
2. 可設(shè)置地址的接口:A0-A2
3. 輸入通道:AIN0-AIN3
4. 數(shù)模轉(zhuǎn)換輸出引腳:AOUT
5. 參考基準(zhǔn)電壓和模擬地:VREF和AGND
4. IIC協(xié)議底層
要實(shí)現(xiàn)模數(shù)轉(zhuǎn)換,需要先驅(qū)動PCF8591芯片使其工作。而IIC協(xié)議則是驅(qū)動芯片的一種規(guī)則,包括開始信號、結(jié)束信號、應(yīng)答信號、數(shù)據(jù)有效性、發(fā)送一字節(jié)、接收一字節(jié)等操作。
5. 工作流程
以下是一個AD轉(zhuǎn)換函數(shù)的示例代碼:
```c
unsigned char AD_zhuan(void){
unsigned char temp;
PCF8591_start(); // 開始信號
PCF8591_write(0x90); // 寫入器件地址+數(shù)據(jù)讀/寫方向位,第一字節(jié)
PCF8591_write(0x02); // 寫入控制字,器件功能設(shè)置,第二字節(jié)(單通道,通道2)
PCF8591_start(); // 重新開始新的操作
PCF8591_write(0x91); // 器件地址,讀操作
temp PCF8591_read(); // 采集電壓,放到temp里面
Zhu_ack(1); // 采集完畢,主機(jī)應(yīng)答
PCF8591_stop(); // 關(guān)閉AD
return temp;
}
```
通過以上工作流程,可以完成模數(shù)轉(zhuǎn)換的過程。具體實(shí)現(xiàn)時,可根據(jù)需要進(jìn)行相應(yīng)的配置和操作。