熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2018-7-25 10:23
正文摘要:最近看到網(wǎng)上很多PCF8591程序,如下 /* 讀取當(dāng)前的 ADC 轉(zhuǎn)換值,chn-ADC 通道號(hào) 0~3 */unsigned char GetADCValue(unsigned char chn){ unsigned char val; I2CStart(); if ... |
對(duì)于 PCF8591 芯片的尋址,它使用 7 位的地址(A6~A0)進(jìn)行尋址,其中最高位(MSB)是固定為 0。因此,當(dāng)我們將芯片地址寫(xiě)入 I2C 總線時(shí),需要將地址左移一位,并將最低位置為 0,以與讀寫(xiě)位進(jìn)行組合。這就是為什么在代碼中將地址寫(xiě)為 (0x48 << 1) 的原因。 以 0x48 為例,二進(jìn)制表示為 0100 1000,左移一位后為 1001 0000,再將最低位置為 0,即 1001 0000(0x90)為寫(xiě)操作,1001 0001(0x91)為讀操作。這樣可以確保正確的地址與讀寫(xiě)位組合。 關(guān)于電壓的轉(zhuǎn)換,PCF8591 是一個(gè) 8 位 ADC(模數(shù)轉(zhuǎn)換器),它將輸入電壓轉(zhuǎn)換為數(shù)字值。該芯片的輸入范圍是 0V 到 Vref(供電電壓),對(duì)應(yīng)于 0 到 255 的數(shù)字范圍。因此,通過(guò)讀取 ADC 轉(zhuǎn)換值,可以得到輸入電壓對(duì)應(yīng)的數(shù)字值。 在給定的程序中,val 變量存儲(chǔ)了 ADC 轉(zhuǎn)換的結(jié)果,即輸入電壓對(duì)應(yīng)的數(shù)字值。為了得到電壓值,將 val 乘以系數(shù) 25。這個(gè)系數(shù)是根據(jù)特定的應(yīng)用場(chǎng)景和參考電壓(Vref)來(lái)確定的。具體的系數(shù)值可能需要根據(jù)實(shí)際情況進(jìn)行調(diào)整。 總結(jié)一下,程序中的代碼實(shí)現(xiàn)了對(duì) PCF8591 芯片進(jìn)行讀取 ADC 轉(zhuǎn)換值的操作,通過(guò)尋址和寫(xiě)入控制字節(jié)選擇轉(zhuǎn)換通道,并讀取轉(zhuǎn)換結(jié)果。轉(zhuǎn)換結(jié)果可以通過(guò)乘以系數(shù)得到相應(yīng)的電壓值。請(qǐng)注意,具體的芯片規(guī)格和應(yīng)用需求可能會(huì)有所不同,這里提供的解釋是基于一般情況的理解。 |
0x48是把LSB的R/W去掉,看起來(lái)比較清楚的意思,實(shí)際上更不清楚了,0x48<<1這個(gè)操作在編譯器階段就已經(jīng)計(jì)算完畢,并不會(huì)增加單片機(jī)運(yùn)行期間的工作量。 |
其中第五行尋址為什么要寫(xiě)成0X48<<1 , 為什么不能直接寫(xiě)成0X90?? 看的是金沙灘宋老師的視頻吧。0x48 = 0100 1000.這里是宋老師的寫(xiě)法原因,左移一位得到1001 0000. 這時(shí)候查閱PCF8591手冊(cè),這是寫(xiě)地址。1001手冊(cè)規(guī)定是0,后三位A2 ,A1,A1根據(jù)電路圖選位0,最后一位是讀寫(xiě)位。 |
Snipaste_2023-05-21_19-14-44.jpg (19.12 KB, 下載次數(shù): 42)
你的問(wèn)題不是三言?xún)烧Z(yǔ)能說(shuō)清,需要系統(tǒng)學(xué)習(xí)。介紹你一本書(shū),《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9。內(nèi)有IIC和PCF8591內(nèi)容。 |
Powered by 單片機(jī)教程網(wǎng)