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