模拟技术
模数转换在嵌入式电子产品中是一项非常重要的任务 ,因为大多数传感器以模拟值的形式提供输出并将它们馈送到只理解二进制值的微控制器,我们必须将它们转换为数字值。因此,为了能够处理模拟数据,微控制器需要 模数转换器。
在本教程中,我们将检查 如何将 PCF8591 ADC/DAC 模块与 Arduino 连接。
所需组件
Arduino UNO
PCF8591 ADC模块
100K 锅
跨接电缆
PCF8591 ADC/DAC 模块
PCF8591 是一个 8 位模数或 8 位数模转换器 模块,这意味着每个引脚可以读取高达 256 的模拟值。它还具有 LDR 和板上提供的热敏电阻电路。该模块有四个模拟输入和一个模拟输出。它适用于 I 2 C 通信,因此有用于串行时钟和串行数据地址的 SCL 和 SDA 引脚。它需要 2.5-6V的 电源电压并且具有低待机电流。我们也可以通过调节模块上电位器的旋钮来控制输入电压。板上还有三个跳线。J4接选择 热敏电阻接入电路,J5接选择 LDR/光敏电阻接入电路 J6连接选择可调电压接入电路。要访问这些电路,您必须使用这些跳线的地址:J6 为 0x50,J5 为 0x60,J4 为 0x70。板上有两个 LED D1 和 D2-D1 显示输出电压强度,D2 显示电源电压强度。输出或电源电压越高,LED D1 或 D2 的强度越高。您还可以使用 VCC 或 AOUT 引脚上的电位器来测试这些 LED。
将 PCF8591 ADC/DAC 模块与 Arduino 连接
PCF8591 与 Arduino 的接口非常简单。在这个接口示例中,我们将从任何模拟引脚读取模拟值,并通过 100K 电位器更改这些值。首先,将 VCC 和 GND 连接到 Arduino 的 5V 和 GND。接下来,将 SDA 和 SCL 连接到 Arduino 的 A4 和 A5。现在,如图所示,用 AIN0 连接一个 100K 电位器。对于 LCD,数据引脚 (D4-D7) 连接到 Arduino 的数字引脚 D5-D2,RS 和 EN 引脚连接到 Arduino 的 D12 和 D11。LCD的V0接pot和一个100k的pot,用来控制LCD的亮度。
Arduino PCF8591 模数转换 (ADC)编程
首先,我们需要定义用于 I 2 C 通信和 LCD 显示的库。
#include#include
然后定义一些宏。第一个宏用于定义IC的数据总线地址,第二个宏用于定义模块的第一个输入引脚的地址,其中给出了来自pot的输入。
#define PCF8591 (0x90 >> 1) #define AIn0 0x00
接下来用 Arduino 定义 LCD 的引脚连接并初始化我们在模拟引脚上获得的值。
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); 整数值 = 0;
现在,让我们来设置功能。在这里,在第一行中,我们已经初始化了 I 2 C 通信。在第二行中,我们已经初始化了我们正在打印模拟值的 LCD 显示器。在此处了解有关将 16x2 LCD 与 Arduino 连接的更多信息。
void setup() { Wire.begin(); lcd.开始(16,2); }
在循环功能中,第一行是开始传输,即启动PCF8591。第二行告诉 IC 在第一个模拟输入引脚上进行模拟测量。第三行结束传输,第四行从模拟引脚获取测量数据。
无效循环() { Wire.beginTransmission(PCF8591); Wire.write(AIn0); Wire.endTransmission(); Wire.requestFrom(PCF8591, 1);
在下一部分中,将从模拟引脚读取的值放入之前定义的Value变量中。在接下来的几行中,将该值打印到 LCD 上。
值=Wire.read(); lcd.print("ADC 值="); lcd.print(值); 延迟(500); lcd.clear();}
最后上传Arduino中的代码并运行它。模拟值将开始显示在 LCD 显示屏上。调整锅的旋钮,你会看到数值的逐渐变化。
#include
#include
#define PCF8591 (0x90 >> 1)
#define AIN0 0x00
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
整数值 = 0;
void setup()
{
Wire.begin();
lcd.开始(16,2);
}
无效循环()
{
Wire.beginTransmission(PCF8591);
Wire.write(AIN0);
Wire.endTransmission();
Wire.requestFrom(PCF8591, 1);
值 = Wire.read();
lcd.print("ADC 值=");
lcd.print(值);
延迟(500);
lcd.clear();
}
全部0条评论
快来发表一下你的评论吧 !