概述
#include "mcp4726.h"
/* 命令位 VREF1 VREF0 PD1 PD0 G
1.命令位 //MCP47X6 支持的命令
C2 C1 C0
0 0 x 写易失性DAC 寄存器命令
0 1 0 写易失性存储器命令
0 1 1 写所有存储器命令
1 0 0 写易失性配置位命令
2.VREF1 VREF0 梯形电阻网络电压基准(VRL)选择位
0 x VDD 无缓冲
1 0 VREF引脚 无缓冲
1 1 VREF引脚 缓冲
3.PD1 PD0
0 0 正常工作
0 1 1KΩ电阻接地
1 0 125KΩ电阻接地
1 1 640KΩ电阻接地
4.G 增益选择位
0 =1x (增益为1)
1 =2x (增益为2) VDD作VRL不适用
*/
// C2 C1 C0 VREF1 VREF0 PD1 PD0 G
// 1 0 0 1 1 0 0 0 0x98 写易失性配置位命令
//写配置
void MCP4726_Writecmd(u16 data)
{
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
/*起始位*/
I2C_GenerateSTART(I2C2, ENABLE);
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C2, MCP4726_ADDR, I2C_Direction_Transmitter); //设置MCP4726设备地址 0xc0 写,0xc1 读
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/* Send data */
I2C_SendData(I2C2, data);
while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/*停止位*/
I2C_GenerateSTOP(I2C2, ENABLE);
}
void MCP4726_WriteData_Digital(u16 data) //12位数字量
{
u8 data_H=0,data_L=0;
data_H = ( 0x0F00 & data) >> 8;
data_L = 0X00FF & data ;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
/*起始位*/
I2C_GenerateSTART(I2C2, ENABLE);
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C2, MCP4726_ADDR, I2C_Direction_Transmitter); //设置MCP4726设备地址 0xc0 写,0xc1 读
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/* Send data */
I2C_SendData(I2C2, data_H);
while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C2, data_L);
while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/*停止位*/
I2C_GenerateSTOP(I2C2, ENABLE);
}
void MCP4726_WriteData_Voltage(u16 Vout) //电压单位mV
{
u8 temp = 0;
u16 Dn = 0;
Dn = ( 4096 * Vout) / 3300;
temp = (0x0F00 & Dn) >> 8;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY));
/*起始位*/
I2C_GenerateSTART(I2C2, ENABLE);
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C2, MCP4726_ADDR, I2C_Direction_Transmitter); //设置MCP4726设备地址 0xc0 写,0xc1 读
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
/* Send data */
I2C_SendData(I2C2, temp);
while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C2, Dn);
while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
/*停止位*/
I2C_GenerateSTOP(I2C2, ENABLE);
}
最后
以上就是动人滑板为你收集整理的stm32锯齿波c语言程序,STM32使用硬件IIC操作DAC芯片MCP4726输出锯齿波的全部内容,希望文章能够帮你解决stm32锯齿波c语言程序,STM32使用硬件IIC操作DAC芯片MCP4726输出锯齿波所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复