Sound 发表于 2021-3-2 15:25:59

扩展库使用说明——PCF8591

本帖最后由 陈哲东 于 2021-7-1 15:29 编辑

1-硬件概述

PCF8591是一个单片集成、单独供电、低功耗、8位CMOS数据采集器件。PCF8591具有四个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的三个地址引脚A0、A1、A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591,而无需额外的硬件电路。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。

2-引脚定义





AIN0、AIN1、AIN2、AIN3

模拟信号输入端。
A0~A2 引脚地址端
VSS 公共地
SDA、SCL I2C总线数据线、时钟线
OSC 外部时钟输入端,内部时钟输出端
VDD 电源正极
EXT 内部外部时钟选择线、使用内部时钟时候,EXT接地
AGND 模拟信号地
AOUT D/A转换输出端
VREF 基准电源端

3-电路原理图
4-硬件连接图


5-图形化模块

1.PCF8591 I2C初始化引脚选择

2.PCF8591 写入DA值

3.PCF8591 读取通道AD值


6-范例代码
OLED显示AD值

#define SOFTIIC_SCL P1_0
#define SOFTIIC_SCL_OUT {P1M1|=0x01;P1M0|=0x01;}//P1_0开漏输出
#define SOFTIIC_SDA P1_1
#define SOFTIIC_SDA_IN {P1M1|=0x02;P1M0&=~0x02;}//P1_1高阻输入
#define SOFTIIC_SDA_OUT {P1M1|=0x02;P1M0|=0x02;}//P1_1开漏输出

#include <STC8HX.h>
uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#include "lib/oled.h"
#include "mylib/pcf8591.h"
#include "lib/delay.h"

void setup()
{
oled_init();//OLED初始化
pcf8591_init();//pcf8591初始化
}

void loop()
{
oled_clear();//OLED清屏
oled_show_num(64,3,(pcf8591_analog_read(3)));
oled_display();//OLED更新显示
delay(1000);
}

void main(void)
{
setup();
while(1){
    loop();
}
}


手册资料:



hyhyx1 发表于 2022-3-4 20:11:50

初始化模块比你例程中的多一个设备地址项,咋回事?运行后出错:选择端口没有相应板子或选择错误。求解答。

linzhenghua 发表于 2022-7-12 17:57:30

楼主您好,我刚开始用您的这个库组件,我在设置DA输出时,(还没有测试AD功能)怎么也没有变化,不知道可否给一个提示,我现在控制芯片用的是8H8K64U,主频24M,用P66和P67(SDA,SCL)驱动,您的库模块输入框中输入0xFF和0x00都没有任何反应,PCF8951测试电路模块是标准的模块,地址线全部接地,基准接VCC,PCF8591模块使用内部时钟。望指教,谢谢。

一千个爱你的理由 发表于 2022-9-7 16:46:38

8591DA输出频率太低了,10HZ都做不到。我准备用MCP4802做一个库模块,搞了几天都不成功。:lol
页: [1]
查看完整版本: 扩展库使用说明——PCF8591