此款DAC芯片是SOP6封装的12位的轨对轨片子,正好补偿小容量STM32没有DAC功能的缺陷,IIC接口,外围电路很简单。输出函数直接调用:MCP4725_WriteData_Voltage(u16 Vout) 这个函数。补充一下:最大输出为5V,用到了电平转换。例如:****
头文件/初始化文件忽略
****
int main(void)
{
delay_init(); //延时函数初始化
MCP4725_Init(); //MCP4725初始化
while(1)
{
MCP4725_WriteData_Voltage(4095); //输出最大 一般要求在100-4000之间
}
}
制作出来的实物图如下:
单片机源程序如下:
- #include "MCP4725.h"
- #include "delay.h"
- #include "usart.h"
- //初始化IIC接口
- void MCP4725_Init(void)
- {
- IIC_Init();
- }
- //使用快速模式写命令写DAC寄存器
- void MCP4725_WriteData_Voltage(u16 Vout) //电压单位mV
- {
- u8 temp;
- u16 Dn;
- Dn = ( 4096 * Vout) / VREF_5V;
- temp = (0x0F00 & Dn) >> 8; //12位数据
-
- IIC_Start();
- IIC_Send_Byte(0XC2); //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 1;-> 1100 0010
- IIC_Wait_Ack();
- IIC_Send_Byte(temp);
- IIC_Wait_Ack();
- IIC_Send_Byte(Dn); //将低8位送到DAC寄存器
- IIC_Wait_Ack();
- IIC_Stop();//产生一个停止条件
- delay_ms(10);
- }
-
- void MCP4725_WriteData_Digital(u16 data) //12位数字量
- {
- u8 data_H=0,data_L=0;
- data_H = ( 0x0F00 & data) >> 8;
- data_L = 0X00FF & data ;
- IIC_Start();
- IIC_Send_Byte(0XC0); //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 0;-> 1100 0000
- IIC_Wait_Ack();
- IIC_Send_Byte(data_H);
- IIC_Wait_Ack();
- IIC_Send_Byte(data_L);
- IIC_Wait_Ack();
- IIC_Stop();//产生一个停止条件
- delay_ms(10);
- }
复制代码
所有资料51hei提供下载:
MCP4725驱动.7z
(183.37 KB, 下载次数: 487)
|