扩展库使用说明——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();
}
}
手册资料:
初始化模块比你例程中的多一个设备地址项,咋回事?运行后出错:选择端口没有相应板子或选择错误。求解答。 楼主您好,我刚开始用您的这个库组件,我在设置DA输出时,(还没有测试AD功能)怎么也没有变化,不知道可否给一个提示,我现在控制芯片用的是8H8K64U,主频24M,用P66和P67(SDA,SCL)驱动,您的库模块输入框中输入0xFF和0x00都没有任何反应,PCF8951测试电路模块是标准的模块,地址线全部接地,基准接VCC,PCF8591模块使用内部时钟。望指教,谢谢。 8591DA输出频率太低了,10HZ都做不到。我准备用MCP4802做一个库模块,搞了几天都不成功。:lol
页:
[1]