​携手创造,共同成长!这是我参加「掘金日新计划 8 月更文应战」的第24天,点击查看活动概况

树莓派 pcf8591 AD转化模块运用

由于项目需求因此要运用PCF8591

​树莓派 pcf8591 AD转换模块使用

​树莓派 pcf8591 AD转换模块使用

1.预备东西

树莓派pi一个。pcf8591一个。模仿量传感器一个(我这用热敏电阻当温度计运用)。

2.原理。

PCF8591 是单片、单电源低功耗8位CMOS数据收集器材,具有4个模仿输入、一个输出和一个行I2C总线接口。

3个地址引脚A0、A1和A2用于编程硬件地址,答应将最多8个器材连接至I2C总线而不需求额定硬件。

器材的地址、操控和数据经过两线双向I2C总线传输。器材功用包括多路复用模仿输入、片上盯梢和坚持功用、

8位模数转化和8位数模仿转化。最大转化速率取决于I2C 总线的最高速率。

【想知道 怎么一起运用两片pcf8591 请点击】


引脚定义:
本模块左面和右边别离外扩2路排针接口,别离说明如下:
左面 AOUT 芯片DA输出接口
AINO 芯片模仿输入接口0 我在运用的时候接的时A0,接的是光敏传感器的AO口;
AIN1 芯片模仿输入接口1
AIN2 芯片模仿输入接口2
AIN3 芯片模仿输入接口3
右边 SCL IIC时钟接口 接树莓派的scl口
SDA IIC数字接口 接树莓派的sda口
GND 模块地 外接地
VCC 电源接口 外接3.3v-5v 我用的是3.3
我用的是pcf8591模块。包含了热敏和光敏电阻。
模块共有3个赤色短路帽,别离作用如下:
P4 接上P4短路帽,挑选热敏电阻接入电路

P5 接上P5短路帽,挑选光敏电阻接入电路

P6 接上P6短路帽,挑选0-5V可调电压接入电路

模块为下图。

下面为芯片引脚定义。

(1)、AD的位数:标明这个AD共有2^n个刻度,8位AD,输出的刻度是0~255. 8591便是8为精度的,因此它digtalRead的数据在0-255之间。
(2)、分辩率:便是AD可以分辩的最小的模仿量改变,假定5.10V的系统用8位的AD采样,那么它能分辩的最小电压便是5.10/255=0.02V。

AD转化的原理简略来了解便是经过电路将非电信号转为电信号,然后经过一个基准电压(PCF8591的基准电压是5V),然后判断这个这个电信号的电压高低,然后得到一个0-255(8位精度)的比值。

详细完成:
程序在进行 A/D 读取数据的时候,共运用了两条程序去读了 2 个字节:I2CReadACK(); val = I2CReadNAK(); PCF8591 的转化时钟是 I2C 的 SCL,8 个SCL 周期完结一次转化,所以当时的转化成果总是在下一个字节的 8 个 SCL 上才干读出,因此咱们这儿第一条句子的作用是产生一个整体的 SCL 时钟提供给 PCF8591 进行 A/D 转化,第2次是读取当时的转化成果。假如咱们只运用第二条句子的话,每次读到的都是上一次的转化成果。

操控字节的第 0 位和第 1 位便是通道挑选位了,00、01、10、11 代表了从 0 到 3 的总共4 个通道挑选。
先连接好线

​树莓派 pcf8591 AD转换模块使用

​树莓派 pcf8591 AD转换模块使用

在树莓派上敞开SPI和I2C

​树莓派 pcf8591 AD转换模块使用

python 完成

创建 ac.py

编辑代码如下

#!/usr/bin//env python
# -*- coding:utf-8 -*-
import smbus   
import time
address = 0x48 ## address  ---> 器材的地址(硬件地址 由器材决议)
A0 = 0x40      ##  A0    ----> 器材某个端口的地址(数据存储的寄存器)
A1 = 0x41
A2 = 0x42
A3 = 0x43
bus = smbus.SMBus(1) ## 敞开总线
while True: ##循环查询
    bus.write_byte(address,A2)  ## 告诉树莓派 你想获取那个器材的那个端口的数据
    value = 143-bus.read_byte(address) ## 取得数据
    print("当时温度:%1.0f  ℃ " %(value)) ##打印数据
    time.sleep(1) ##延迟1秒

然后测验 输入python./ac.py

​树莓派 pcf8591 AD转换模块使用

怎么一起运用多片I2C 设备 :[一起运用两片I2C同类型设备时地址怎样设置 (怎么更改器材地址)_Five-菜鸟级的博客-CSDN博客_i2c从设备地址相同](blog.csdn.net/qq_41923622… “一起运用两片I2C同类型设备时地址怎样设置 (怎么更改器材地址))

树莓派上运用WiringPI的操作步骤。

一。装置wiringPi

这儿给出官方做法:

If you do not have GIT installed, then under any of the Debian releases (e.g. Raspbian), you can install it with:

$ sudo apt-get install git-core
If you get any errors here, make sure your Pi is up to date with the latest versions of Raspbian: (this is a good idea to do regularly, anyway)

sudo apt-get update\ sudo apt-get upgrade
To obtain WiringPi using GIT:

cd\ git clone git://git.drogon.net/wiringPi
If you have already used the clone operation for the first time, then

cd ~/wiringPi\ git pull origin
Will fetch an updated version then you can re-run the build script below.

To build/install there is a new simplified script:

cd ~/wiringPi\ ./build
The new build script will compile and install it all for you – it does use the sudo command at one point, so you may wish to inspect the script before running it.

装置之后假如运用gpio -v,呈现以下内容即可。

附上GPIO 引脚图

然后打开i2c

sudo raspi-config

挑选8 Advanced Options,打开SPI和I2C,然后会提示重启。重启完之后。

装置i2c东西sudo apt-get install i2c-tools

然后运行i2cdetect -l

可是我在这一步呈现了一个问题,便是在输入上述指令后什么都没有呈现,也已经确认了spi和i2c敞开。经过查资料找到的解决方法是。

sudo cat /sys/module/i2c_bcm2708/parameters/baudrate 改了波特率 100000 //但我并不知道这是不是关键点。

sudo nano /etc/modules
添加以下两行内容:
i2c-bcm2708
i2c-dev
sudo nano /etc/modprobe.d/raspi-blacklist.conf
到这两行:
blacklist spi-bcm2708
blacklist i2c-bcm2708
将他们删掉,然后保存退出,并重启树莓派!

发现问题解决了。

然后i2cdetect -y 1,发现一个48,而0x48便是我的pcf8591的I2C地址。这个后面需求运用。

代码

ad.c

#include <wiringPi.h>
#include <pcf8591.h>
#include <stdio.h>
#define Address 0x48
#define BASE 64
#define A0 BASE+0
#define A1 BASE+1
#define A2 BASE+2
#define A3 BASE+3
int main(void)
{
int value;
wiringPiSetup();
pcf8591Setup(BASE,Address);
while(1)
{
value=analogRead(A0);
printf("value: %d\n",value);
delay(20);
}
}