树莓派实现AD转换(pcf8591模块)
一、樹莓派啟動(dòng)I2C
-
使用: ls /dev/命令可以查看I2C設(shè)備是啟動(dòng)。
-
如果沒有啟動(dòng)執(zhí)行 sudo raspi-config選擇 interfacing Options->I2C->yes啟動(dòng)i2c內(nèi)核驅(qū)動(dòng)。
- 使用sudo i2cdetect -y -a 1 命令可以查看是否配置好。因?yàn)槲业腎2c連接了數(shù)模轉(zhuǎn)換器PCF8591 ADC,所以顯示的48地址,同理,如果拔了這個(gè)設(shè)備就會(huì)顯示:
二、AD轉(zhuǎn)換
2.1 轉(zhuǎn)換模塊介紹
? PCF8591是一個(gè)8位模數(shù)轉(zhuǎn)換器或8位數(shù)模轉(zhuǎn)換器模塊,這意味著每個(gè)引腳可以讀取高達(dá)256的模擬值。它還具有板上提供的LDR和熱敏電阻電路。該模塊有四個(gè)模擬輸入和一個(gè)模擬輸出。它適用于I2C通信,因此SCL和SDA引腳用于串行時(shí)鐘和串行數(shù)據(jù)地址。它需要2.5-6V電源電壓并具有低待機(jī)電流。我們還可以通過調(diào)節(jié)模塊上電位器的旋鈕來控制輸入電壓。板上還有三個(gè)跳線。 J4連接選擇熱敏電阻接入電路,J5連接選擇LDR /光電阻接入電路和J6連接選擇可調(diào)電壓接入電路。要訪問這些電路,您必須使用這些跳線的地址:J6為0x50,J5為0x60,J4為0x70。電路板上有兩個(gè)LED,D1和D2 - D1表示輸出電壓強(qiáng)度,D2表示電源電壓強(qiáng)度。輸出或電源電壓越高,LED D1或D2的強(qiáng)度越高。
2.2 實(shí)現(xiàn)代碼
#include <wiringPi.h> #include <pcf8591.h> #include <stdio.h> #include <time.h>//PCF8591默認(rèn)的I2C設(shè)備地址 #define Address 0x48//模擬信號(hào)輸入端的地址 #define BASE 0x40 #define A0 0x40 #define A1 0x41 #define A2 0x42 #define A3 0x43//供電(mV) #define POWER 5000//函數(shù)聲明 void ShowTime(); float AD_work(unsigned char channel);int main(void) {//初始化wiringPi設(shè)置wiringPiSetup();//設(shè)置pcf8591的器件地址pcf8591Setup(BASE, Address);float AD_val;while (1){AD_val=AD_work(A0);//讀取A0端口的電壓值ShowTime(); //打印當(dāng)前時(shí)間printf("A0 value: %fmV\n", AD_val); //打印A0引腳的輸入電壓//printf("asgydasg");delay(100);} }//顯示系統(tǒng)時(shí)間 void ShowTime() {time_t t;struct tm *p;int hour = 0, min = 0, sec = 0;time(&t);p = gmtime(&t);hour = 8 + p->tm_hour; //獲取當(dāng)?shù)貢r(shí)間,與UTC時(shí)間相差8小時(shí)min = p->tm_min;sec = p->tm_sec;printf("\nNow time: %.2d:%.2d:%.2d\n", hour, min, sec); }float AD_work(unsigned char channel) {float AD_val; //定義處理后的數(shù)值A(chǔ)D_val為浮點(diǎn)數(shù)unsigned char i;for (i = 0; i < 10; i++) AD_val += analogRead(channel); //轉(zhuǎn)換10次求平均值(提高精度)AD_val /= 10;AD_val = (AD_val * POWER)/ 255 ; //AD的參考電壓是單片機(jī)上的5v,所以乘5即為實(shí)際電壓值return AD_val; }編譯命令
gcc -adc.c -o adc -Wall -lwiringPi2.3 結(jié)果顯示
2.3.1 GPIO口
2.3.2 連接示意圖
? 將pcf8591的SCL和SDA連接至樹莓派的SCL和SDA,AIN0接入模擬信號(hào),相當(dāng)于圖示中的A0口。
2.3.3 結(jié)果顯示
? 輸入5V,顯示結(jié)果正常
輸入3.3V,輸出一致
? 在監(jiān)播機(jī)上的實(shí)際測量效果,測量信號(hào)強(qiáng)度電壓,1.008MHz,調(diào)制度90%。將D4上端輸入到pcf8591的AIN0端,GND接到監(jiān)播機(jī)的PP5上端。測量結(jié)果顯示,顯示的數(shù)據(jù)與實(shí)際相差甚微。
| -40 | 4443.15 | 4.43 |
| -45 | 4336.13 | 4.33 |
| -50 | 4217.60 | 4.21 |
| -55 | 4066.65 | 4.06 |
總結(jié)
以上是生活随笔為你收集整理的树莓派实现AD转换(pcf8591模块)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下批量转换语音采样率(8000
- 下一篇: windows下的守护进程C++