树莓派实现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 -lwiringPi
2.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上端。测量结果显示,显示的数据与实际相差甚微。
信号强度(dBm) | 显示电压(mV) | 万用表电压(v) |
---|---|---|
-40 | 4443.15 | 4.43 |
-45 | 4336.13 | 4.33 |
-50 | 4217.60 | 4.21 |
-55 | 4066.65 | 4.06 |
树莓派实现AD转换(pcf8591模块)相关推荐
- 51单片机AD转换pcf8591+数码管显示+Proteus仿真二
51单片机AD转换pcf8591+数码管显示+Proteus仿真二
- proteus仿真4路AD转换——pcf8591芯片
1.proteus原理图 AIN0-AIN3:模拟信号输入端. A0-A2:引脚地址端. VDD.VSS:电源端. SDA.SCL:I2C 总线的数据线.时钟线. OSC:外部时钟输入端,内部时钟输出 ...
- [网友问答1]STM32驱动PCF8591模块,实现AD/DA转换
欢迎关注 程序员小哈带你玩转嵌入式,微信搜索:嵌入式从0到1,更多干货等着你. 想进小哈技术交流群,请加程序员小哈个人微信,带你嵌入式入门进阶. 问题原由 粉丝提问,STM32如何驱动PCF8591? ...
- 利用PCF8591进行AD转换
上学期用过这款芯片,主要还是IIC的应用-- 原理的话没有太多时间深究了,主要还是应用 芯片引脚图 AN0~AN3为模拟量输入(可以选择输入方式) A0~A2为硬件地址引脚,用来编码地址 AOUT应该 ...
- 通过PCF8591读取电压值(AD转换)
通过PCF8591读取电压值(AD转换) A/D的主要指标 常用A/D器件 PCF8591 PCF8591的控制字节 A/D的主要指标 1.ADC的位数:n位ADC代表,2的n次方个刻度 2.基准源: ...
- 蓝桥杯单片机之PCF8591模块的使用
蓝桥杯单片机之PCF8591模块的使用 简述 原理图: 引脚定义: 相关地址 IIC寻址设备地址 控制地址 IIC时序分析 数模转换D/A 模数转换 代码: 一:光敏电阻和可变电阻的AD转换,S4控制 ...
- STC89C52R单片机以及CF85911的AD转换
第一章 器件清单以及器件介绍 表1 器件清单 序号 器件 型号 数量 1 51开发板 MCS-51 1 2 AD/DA转换模块 PCF8591P 1 3 杜邦线 15cm 11 4 指示灯 \ 8 5 ...
- 强交变磁场下的AD转换数值的变化
简 介: 针对无线充电线圈内强磁场的干扰引起单片机电路中测量信号的变化,讨论了产生这种变化的背后的机理.给出了在强信号.高频信号下对于电路设计中的EMC的要求以及想预定的处理方法. 关键词: EMC, ...
- pic1路AD转换c语言,pic单片机的ad转换(实例解析)
描述 AD转换就是模数转换.顾名思义,就是把模拟信号转换成数字信号.主要包括积分型.逐次逼近型.并行比较型/串并行型.Σ-Δ调制型.电容阵列逐次比较型及压频变换型.A/D转换器是用来通过一定的电路将模 ...
最新文章
- 多系统交互中DBA该确认的一些事情
- uniapp实战项目仿糗事百科_项目设计最好用的底层思考模型——黄金圈
- 在线五子棋JAVA网络编程_实验五 Java网络编程及安全
- golang 数组组合成最小的整数_golang数组-----寻找数组中缺失的整数方法
- Papers with Code 2020 全年回顾
- 为啥用mencoder执行格式转换不退出_kindle|什么?calibre还能这么用?
- Android UI事件传递就是这么个事儿
- 如何设计一份令人舒服的PPT
- 线性代数学习笔记(一)——二阶和三阶行列式
- 粒子追踪 matlab,粒子追踪软件 - 研究粒子与场的相互作用
- 自己动手制作系统安装盘
- 18 个 JavaScript 入门技巧
- Python 自动化办公:Excel 自动绘制图表
- 计算机网络里不显示共享打印机驱动,win10连接共享打印机时“找不到驱动程序”怎么回事...
- 【图像压缩】高斯混合-注意力模型 《Learned Image Compression with Discretized Gaussian Mixture Likelihoods and Atten》
- 基于FPGA的频率计设计
- 有测试狗狗好坏的软件吗,想要养狗的朋友们请一定看完全文,测试一下自己适不适合养狗 ​...
- 密码学概述与基本加密方式
- 爬虫----b站弹幕
- 蓝汛之,MIC的MUTE【篇】