风筝
发表于: 2019-8-10 18:29:49 | 显示全部楼层

在嵌入式电子设备中,模数转换器是中非常重要的部分,因为大多数传感器提供的输出信号是模拟值,模数转换器将它们馈入只能理解二进制值的微控制器,我们必须将这些号转换为数字值。因此,为了能够处理模拟数据,微控制器需要模数转换器。


有些微控制器有内置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-DA-Module.jpg


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的亮度。

Circuit-Diagram-for-Interfacing-PCF8591-ADC-with-Arduino.png

Circuit-Hardware-for-Interfacing-PCF8591-ADC-with-Arduino.jpg


Arduino PCF8591模数转换(ADC)编程

完整的程序将在本文末尾处给出。


首先,我们需要定义用于I2C通信和LCD显示的库。

  1. #include<Wire.h>
  2. #include <LiquidCrystal.h>
复制代码

然后定义一些宏。第一个宏用于定义IC的数据总线地址,第二个宏用于定义模块的第一个输入引脚的地址,其中给出了来自电位器的输入。

  1. #define PCF8591 (0x90 >> 1)
  2. #define AIn0 0x00
复制代码

接下来用Arduino定义LCD的引脚连接,并初始化我们在模拟引脚上获得的值。

  1. const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
  2. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  3. int Value = 0;
复制代码

现在,让我们来开始setup()函数。在这里,我们在第一行初始化了I2C通信。在第二行中,我们初始化了正在打印模拟值的LCD显示屏。

  1. void setup()
  2. {
  3. Wire.begin();
  4. lcd.begin(16,2);
  5. }
复制代码

loop)函数中,第一行代码是开始传输,即它启动PCF8591。第二行告诉IC在第一个模拟输入引脚上进行模拟测量。第三行结束传输,第四行从模拟引脚获取测量数据。

  1. void loop()
  2. {
  3. Wire.beginTransmission(PCF8591);
  4. Wire.write(AIn0);
  5. Wire.endTransmission();
  6. Wire.requestFrom(PCF8591, 1);
复制代码

接下来将从模拟引脚读取的值放入先前定义的值变量。然后,将该值打印显示在LCD上。

  1. Value=Wire.read();
  2. lcd.print("ADC Value=");
  3. lcd.print(Value);
  4. delay(500);
  5. lcd.clear();}
复制代码

最后将代码上传到Arduino开发板中,并且运行。模拟值将开始显示在LCD显示屏上。调整电位器的旋钮,您将看到值的逐渐变化。

Interfacing-PCF8591-ADC-with-Arduino.jpg


代码

以下是本文使用的完整代码: main.rar (376 Bytes, 下载次数: 160)

跳转到指定楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-22 01:02 , Processed in 0.055879 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表