~~ 如果有什么问题可以在我的个人博客留言 ,我会及时回复。欢迎来访交流 ~~


树莓派 pcf8591 AD转换模块使用

因为 项目需要因此要使用 PCF8591

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 转换,第二次是读取当前的转换结果。如果我们只使用第二条语句的话,每次读到的都是上一次的转换结果。

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

在树莓派上开启SPI和I2C

python 实现

创建 ac.py

编辑代码如下

#!/usr/bin//env python
# -*- coding:utf-8 -*-
import smbus
import timeaddress = 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

如何同时使用多片 I2C  设备 :https://blog.csdn.net/qq_41923622/article/details/86104132

树莓派上使用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);}
}

树莓派 pcf8591 AD转换模块使用相关推荐

  1. 树莓派实现AD转换(pcf8591模块)

    一.树莓派启动I2C 使用: ls /dev/命令可以查看I2C设备是启动. 如果没有启动执行 sudo raspi-config选择 interfacing Options->I2C-> ...

  2. PCF8591 ---AD\DA转换器的使用(IIC通信的软件模拟与应用) (by 51单片机)

    依旧是借着蓝桥杯的机会,来学习一些模块,和软件模拟一些通信方式. 今天学习的模块是PCF8591,一款AD\DA转换器,使用IIC通信方式. 芯片的内部框图如下所示: 各引脚作用如下表所示: 仍旧和之 ...

  3. HX711双通道AD转换模块

    作者:卓晴博士,清华大学自动化系 更新时间:2020-07-27 Monday 在下面两个推文给出了HX711的转换介绍. HX711电子秤专用转换芯片读取MCU模块 电子秤专用模拟/数字(A/D)转 ...

  4. 基于AD9957实现射频数字化变频模块和AD转换模块的方案详细教程

    1.引言 数字化短波发射机的设计思路是尽可能让数/模转换器(Digital to Analog Converter,DAC)靠近天线,尽可能用数字信号处理代替传统模拟信号处理.随着DSP.FPGA等硬 ...

  5. 树莓派学习笔记(五)——烟雾浓度检测(ONENET云平台收发数据代码)

    文章目录 前言 一.硬件连接 MQ-2 PCF8591 二.Onenet平台数据收发程序 onenetsub.py onenetget.py 三.程序 树莓派开启iic功能 完整程序 OneNet界面 ...

  6. 树莓派空气质量检测之——GP2Y1010AU0F粉尘传感器模块的使用记录

    项目场景: 笔者前段时间接触到了一个环境监测类的项目,需要对空气质量进行读取.也因此买了部分气体类的传感器进行调试.调试过程中就遇到了这么一个粉尘传感器--GP2Y1010AU0F.在树莓派上很多资料 ...

  7. 树莓派与PCF8591模数转换器的那些事儿

    文章目录 一.简介 二.硬件准备 1.PCF8591 * 1 2.KY-011双色LED模块 * 1 3.树莓派4B * 1 4.硬件引脚连线 三.软件准备 1.PCF8591.py 2.main.p ...

  8. AD模数转换模块diy(AD9236/12位/80MSPS)

    本篇博客主要是针对网上店家卖的各种类型AD转换模块有些小贵,所以着重介绍了如何自己制作一款AD转换模块,并且通过FPGA进行控制,实时采集模拟量.B站对应讲解本文视频链接 所设计的AD模块为单通道 1 ...

  9. RaspberryPi 4B 使用 PCF8591 8位AD和DA转换器

    模数/数模转换在实际应用中非常有用.如何使用树莓派操作挂载到 PCF8591 I²C 线路上的设备?实际上和其他 I²C 设备操作并无差异.首先来学习 PCF8591 的使用方法,然后通过树莓派控制 ...

  10. 树莓派4b hat板机械图ad版(ad6.9)

    树莓派4b AD机械图 如下 图中绘制了机械层1和禁止布线层.其他层可以更加自己的需求选择. 详细的机械图如下 文件下载链接 链接:https://pan.baidu.com/s/1D32SlOvUa ...

最新文章

  1. nginx虚拟目录配置
  2. 树言树语:谁动了苹果的弦
  3. 如何测试网络视频服务器(DVS)
  4. pyqt 获取 UI 中组件_一起学Vue:UI框架(elementui)
  5. css在线留言星号,使用CSS 给表单必选项添加星号的实现方法
  6. IBM Cloud Video工程师Scott Grizzle谈流媒体协议和Codec
  7. go zap去除程序名称_适用于Zip,Zap和Zoom游戏的Python程序
  8. 文件与流 -- fopen/fclose
  9. 正反斜杠的区别_电脑中的正斜杠(/)与反斜杠(\)的区别
  10. 【UVA12169】不爽的裁判
  11. iTunes出现“iTunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后点击“恢复””的解决办法
  12. skywalking elasticsearch 版本匹配问题
  13. Java实现FTP文件上传和下载
  14. android一键root权限获取,怎样获得root权限(一键root手机的教程)
  15. .lib不是有效的Win32应用程序
  16. Linux下unzip解压文件时报错:End-of-central-directory signature not found.
  17. 吕旭军:如何打造区块链数字资产交易?
  18. Matlab虚拟现实工具箱——没有VRML Editor时的使用办法(应该是Simulink 3D Animation Demo版本的都是这样)
  19. 2020北航计算机夏令营机试题目个人理解
  20. 计算机二级office题库APP_2019最新题库_计算机二级office选择题

热门文章

  1. 查看源代码的几种方法
  2. 计算机硬盘分区win7,win7如何磁盘分区 教您win7磁盘分区
  3. 大型网站架设,LMP+Nginx负载均衡+Keepalived热备+Ceph存储集群架构+Web动静分离架构
  4. css实现六边形图片(最简单易懂方法实现高逼格图片展示)
  5. 企业邮箱出现问题我们该联系谁?联系邮箱是什么?
  6. rk3328或树莓派开发板系统镜像备份制作剪裁
  7. CAD打断的技巧、AUTOCAD——批量偏移
  8. 犬心犬意 - 狗为什么会趴在地板上睡觉,不怕着凉吗?活久见
  9. Fluentd (td-agent) 日志处理
  10. MAR位数反映存储单元的个数笔记