|
在嵌入式电子设备中,模数转换器是中非常重要的部分,因为大多数传感器提供的输出信号是模拟值,模数转换器将它们馈入只能理解二进制值的微控制器,我们必须将这些号转换为数字值。因此,为了能够处理模拟数据,微控制器需要模数转换器。
有些微控制器有内置ADC,如Arduino、MSP430、PIC16F877A,但有些微控制器没有,如8051、Raspberry Pi等,我们必须使用一些外部模数转换器IC,如ADC0804、ADC0808。在本篇文章中,我们将研究如何将PCF8591 ADC/DAC模块连接到Arduino开发板。
必需的组件 ● Arduino UNO开发板 ● PCF8591 ADC模块 ● 100K电位器 ● 连接导线
PCF8591 ADC / DAC模块 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的强度越高。您也可以使用VCC上的电位计或AOUT引脚测试这些LED。
PCF8591 ADC / DAC模块与Arduino的连接电路 PCF8591与Arduino的连接非常简单。在这个连接示例中,我们将从任何模拟引脚读取模拟值,并将这些值更改为100K电位器。首先,将VCC和GND连接到Arduino的5V和GND。接下来,将SDA和SCL连接到Arduino的A4和A5。现在,连接100K电位器和AIN0,如图所示。对于LCD,数据引脚(D4-D7)连接到Arduino和RS的数字引脚D5-D2,EN引脚连接到Arduino的D12和D11。 LCD的V0连接到电位器和100k电位器,用于控制LCD的亮度。
Arduino PCF8591模数转换(ADC)编程 完整的程序将在本文末尾处给出。
首先,我们需要定义用于I2C通信和LCD显示的库。 - #include<Wire.h>
- #include <LiquidCrystal.h>
复制代码然后定义一些宏。第一个宏用于定义IC的数据总线地址,第二个宏用于定义模块的第一个输入引脚的地址,其中给出了来自电位器的输入。 - #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);
- int Value = 0;
复制代码
现在,让我们来开始setup()函数。在这里,我们在第一行初始化了I2C通信。在第二行中,我们初始化了正在打印模拟值的LCD显示屏。 - void setup()
- {
- Wire.begin();
- lcd.begin(16,2);
- }
复制代码
在loop)函数中,第一行代码是开始传输,即它启动PCF8591。第二行告诉IC在第一个模拟输入引脚上进行模拟测量。第三行结束传输,第四行从模拟引脚获取测量数据。 - void loop()
- {
- Wire.beginTransmission(PCF8591);
- Wire.write(AIn0);
- Wire.endTransmission();
- Wire.requestFrom(PCF8591, 1);
复制代码接下来将从模拟引脚读取的值放入先前定义的值变量。然后,将该值打印显示在LCD上。 - Value=Wire.read();
- lcd.print("ADC Value=");
- lcd.print(Value);
- delay(500);
- lcd.clear();}
复制代码最后将代码上传到Arduino开发板中,并且运行。模拟值将开始显示在LCD显示屏上。调整电位器的旋钮,您将看到值的逐渐变化。
代码 以下是本文使用的完整代码:
main.rar
(376 Bytes, 下载次数: 164)
|