树莓派实现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)
-404443.154.43
-454336.134.33
-504217.604.21
-554066.654.06
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐维康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>