在嵌入式电子设备中,模数转换是一项非常重要的任务,因为大多数传感器都将输出提供为模拟值,并将其输入到仅了解二进制值的微控制器中,因此我们必须将其转换为数字值。因此,为了能够处理模拟数据,微控制器需要 模数转换器。
一些微控制器具有内置的ADC,例如Arduino,MSP430,PIC16F877A,但一些微控制器则没有8051,Raspberry Pi等,我们必须使用一些外部模数转换器IC,例如ADC0804,ADC0808。下面您可以找到具有不同微控制器的ADC的各种示例:
- 如何在Arduino Uno中使用ADC?
- Raspberry Pi ADC教程
- ADC0808与8051单片机的接口
- 使用AVR单片机的0-25V数字电压表
- 如何在STM32F103C8中使用ADC
- 如何在MSP430G2中使用ADC
- 如何在ARM7 LPC2148中使用ADC
- 将PIC微控制器的ADC模块与MPLAB和XC8一起使用
在本教程中,我们将检查 如何将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。D1和D2-板上有两个LED,D1显示输出电压强度,D2显示电源电压强度。输出或电源电压越高,LED D1或D2的强度越高。您还可以通过在VCC或AOUT引脚上使用电位计来测试这些LED。
将PCF8591 ADC / DAC模块与Arduino接口
该 完整的程序和工作视频 在本教程的最后给出。
首先,我们需要定义用于I 2 C通信和LCD显示的库。
#包括
然后定义一些宏。第一个宏用于定义IC的数据总线的地址,第二个宏用于定义模块的第一个输入引脚的地址,其中给出了电位计的输入。
#定义PCF8591(0x90 >> 1) #定义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值= 0;
现在,让我们进入 设置 功能。在这里,在第一行中,我们已经初始化了I 2 C通信。在第二行中,我们已经初始化了要在其上打印模拟值的LCD显示器。在此处了解有关将16x2 LCD与Arduino接口的更多信息。
void setup() { Wire.begin(); lcd.begin(16,2); }
在 循环 功能中,第一行将开始传输,即,它将启动PCF8591。第二行告诉IC在第一个模拟输入引脚上进行模拟测量。第三行结束传输,第四行从模拟引脚获取测量数据。
void loop() { Wire.beginTransmission(PCF8591); Wire.write(AIn0); Wire.endTransmission(); Wire.requestFrom(PCF8591,1);
在下一部分中,将从模拟引脚读取的值放入之前定义的 Value 变量。然后在下一行中将该值打印到LCD。
值= Wire.read(); lcd.print(“ ADC Value =”); lcd.print(Value); 延迟(500); lcd.clear();}
最后将代码上传到Arduino中并运行。模拟值将开始显示在LCD显示屏上。调节锅的旋钮,您将看到数值的逐渐变化。