AD-DA转换(PCF8591)
转换 AD DA
2023-09-14 09:15:31 时间
一、AD转换(PCF8591)
思路:(6+6,两个地址0x90写,0x91读)
①初始化函数
(1)启动IIC函数
(2)发送地址激活PCF8591:地址为0x90(A2A1A0已经接地了,最后一位为0表示写)
(3)等待应答函数
(4)发送通道函数(前面6个都是0,最后两位选择通道->0x01光敏电阻;0x03滑动变阻器)
(5)再等待应答
(6)关闭IIC函数
②读取ADC值的函数
(1)启动IIC函数
(2)发送地址激活PCF8591:地址为0x91(A2A1A0已经接地了,最后一位为1表示读)
(3)等待应答
(4)IIC读取函数
(5)等待应答
(6)关闭IIC
unsigned char AD_Read(unsigned char add)
{
unsigned char temp;
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Stop();
IIC_Start();
IIC_SendByte(0x91);
IIC_WaitAck();
temp = IIC_RecByte();
IIC_WaitAck();
IIC_Stop();
return temp;
}
*同时用滑动变阻器和光敏电阻时,会出现位置窜位 直接两个数据对调就可以了,解决方法(① 读两次 ② 反过来)
二、DA转换(PCF8591)
void AD_Write(unsigned char add,unsigned char dat)
{
IIC_Start();
IIC_SendByte(0x90);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
调用说明:
AD_Write(0x40,0xFF);//0x40-模拟输出,0xFF-5V电压
Delay5ms();
PCF8591的AD采集和DA输出功能不能同时使用
三、STC15系列单片机用户手册.pdf—第10章
———10.6.2 AD转换的测试程序(ADC查询方式)
#define | 宏名 | 值 | 注释 |
---|---|---|---|
#define | ADC_POWER | 0x80 | //ADC电源控制位 |
#define | ADC_FLAG | 0x10 | //ADC完成标志 |
#define | ADC_START | 0x08 | //ADC起始控制位 |
#define | ADC_SPEEDLL | 0x00 | //540个时钟 |
BYTE GetADCResult(BYTE ch) /*----------------------------读取ADC结果----------------------------*/
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
_nop_(); //等待4个NOP
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG)); //等待ADC转换完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC
return ADC_RES; //返回ADC结果
}
void InitADC()/*----------------------------初始化ADC----------------------------*/
{
P1ASF = 0xff; //设置P1口为AD口
ADC_RES = 0; //清除结果寄存器ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay(2); //ADC上电并延时
}
//添加头文件#include "intrins.h"
//(把BYTE改成uchar)
//Delay(2);用STC-ISP软件改成 Delay2ms();
调用说明:
ad = GetADCResult(1); //ch可取0、1、2、3、4、5、6、7(分别代表P1对应引脚)
相关文章
- java实现 洛谷 P1017 进制转换
- C#和JAVA的RSA密钥、公钥转换
- LeetCode(109):有序链表转换二叉搜索树
- Visual Studio解决方案vs2005/vs2008/vs2010/vs2012/vs2013/vs2015版本互相转换工具
- PCL .vtk文件与.pcd的相互转换
- Qt的QImage 与 OpenCV的Mat 之间的转换
- C# url 路径转换 相对路径 转换为 绝对路径
- Opencv Mat图像与HBITMAP互相转换
- 数据位宽转换(任意整数倍)设计——思路和源码
- 并行数据流转换为一种特殊串行数据流模块的设计:设计两个可综合的电路模块,第一个模块(M1)能把4位的并行数据转换为符合以下协议的串行数据流
- 生存分析 合并三个数据集的结果 自建函数id转换 geo duqiang