📄 max5533.c
字号:
//完成时间: 2008/08/21
//作者:ppt1845
//测试:ppt1845(以下全部模块通过硬件测试)
//--------我手上得到的是5532芯片,必须要提供外部参考电压,并不是5533--------//
/** MCU为51单片机,主频12M,根据IC手册和Keil指令周期,不需要加必要延时,就能
满足所有操作时序要求 **/
#include "MAX5533.h"
//---------------写控制位和DAC数据函数--------------------//
/*********************************************************
函数形参:
control_bits: 为需要写入的控制位.
DAC_dat: 为需要写入的数据,并可根据在函数调用时,可以写入
有效数据,也可以写入无效数据.
函数功能:
一个16位数据的完整写入.
*********************************************************/
void Write_MAX5533(uint8 control_bits, uint16 DAC_dat)
{
uint8 i;
MAX5533_SCLK=0;
MAX5533_CS=0; //使能
DAC_dat=((uint16)control_bits<<12)|DAC_dat;
for(i=0;i<16;i++)
{
if(DAC_dat&0x8000)
MAX5533_DIN=1;
else
MAX5533_DIN=0;
MAX5533_SCLK=1; //写入数据
DAC_dat<<=1;
MAX5533_SCLK=0;
}
MAX5533_CS=1; //禁止
MAX5533_SCLK=1; //为减少电源功耗
}
//--------------------------------------------------------//
/*********************************************************
函数形参:
Ref_Volt: 为在进入空闲模式后,内部参考电压的输出选择值
当
Ref_Volt = Ref_1v214 时,内部参考电压的输出为 1.214 v
Ref_Volt = Ref_1v940 时,内部参考电压的输出为 1.940 v
Ref_Volt = Ref_2v425 时,内部参考电压的输出为 2.425 v
Ref_Volt = Ref_3v885 时,内部参考电压的输出为 3.885 v
注意:
StandBy模式只针对MAX5533和MAX5535,参考电压输出有效,如果
将此函数用于MAX5532和MAX5534的话,那MAX5532和MAX5534将直
接进入掉电模式。
函数功能:
使所选器件进入空闲模式,DAC输出呈高阻抗,使之功耗更低
**********************************************************/
void Enter_StandBy_Mode(uint8 Ref_Volt)
{
Write_MAX5533(StandBy_Mode,Ref_Volt);
}
//----------------------------------------------------------------------------//
/*********************************************************
函数形参:
Ref_Volt: 与Enter_StandBy_Mode()函数中的说明一样。
注意:
1、Normal模式对于MAX5532--MAX5535全部适用。
2、但是对于内部参考电压输出,只对MAX5533和MAX5535有效。
函数功能:
使器件进入工作模式后,DAC输出DAC寄存器中的转换值。
**********************************************************/
void Enter_Normal_Mode(uint8 Ref_Volt)
{
Write_MAX5533(Normal_Mode,Ref_Volt);
}
//---------------------------------------------------------------------------//
/*********************************************************
函数形参:
Ref_Volt: 与Enter_StandBy_Mode()函数中的说明一样。
此函数中的Ref_Volt其实是个无效值
注意:
1、ShutDwon模式对于MAX5532--MAX5535全部适用。
2、只对MAX5533和MAX5535有效内部参考电压在掉电模式中,也被
关闭。
函数功能:
使器件进入掉电模式,DAC输出呈高阻抗,使之功耗更低
**********************************************************/
void Enter_ShutDwon_Mode(uint8 Ref_Volt)
{
Write_MAX5533(Shutdown_Mode,Ref_Volt);
}
//--------------------------------------------------------------------------//
/*********************************************************
函数形参:
Ref_Volt: 与Enter_StandBy_Mode()函数中的说明一样。
此函数中的Ref_Volt其实是个无效值
函数功能:
使器件进入掉电模式,DAC输出呈高阻抗,使之功耗更低
**********************************************************/
void Change_StandBy_to_ShutDown(uint8 Ref_Volt)
{
Enter_Normal_Mode(Ref_Volt);
Enter_ShutDwon_Mode(Ref_Volt);
}
//--------------------------------------------------------------------------//
//双通道DAC输出----方案1
/*********************************************************
函数形参:
Ch_A_dat: 向通道A写入的数据.
Ch_B_dat:向通道B写入的数据.
函数功能:
实现双通道同时输出DAC不同的有效数据.
**********************************************************/
void Double_Channle_DACOUT_Method_1(uint16 Ch_A_dat,uint16 Ch_B_dat)
{
Write_MAX5533(Shift_to_Input_A, Ch_A_dat); //仅是把输出的数据写入输入寄存器A中,此时的DAC_A为无效输出
Write_MAX5533(Shift_to_Input_B, Ch_B_dat); //仅是把输出的数据写入输入寄存器B中,此时的DAC_B为无效输出
Write_MAX5533(InputAB_to_DACRegAB,0x0000); /*把输入输入寄存器AB写入DAC寄存器中,并更新两路输出DAC,
此时的0x0000位无效值,可以任意(超过0x1000的未测试)*/
}
//----------------------------------------------------------------------------//
//双通道DAC输出----方案2
/*********************************************************
函数形参:
Ch_A_dat: 向通道A写入的数据.
Ch_B_dat:向通道B写入的数据.
函数功能:
实现双通道同时输出DAC不同的有效数据.
**********************************************************/
void Double_Channle_DACOUT_Method_2(uint16 Ch_A_dat,uint16 Ch_B_dat)
{
Write_MAX5533(Shift_to_Input_B, Ch_B_dat); //写把数据写入到输入寄存器B中,此时的DAC_B为无效输出
Write_MAX5533(SFTtoInADA_InBtoDACB,Ch_A_dat); //此时的CH_A_dat为A通道的有效数据
}
//----------------------------------------------------------------------------//
//双通道DAC输出----方案3
//双通道输出相同的DAC值
void Double_Channle_DACOUT_Method_3(uint16 Ch_AB_dat)
{
Write_MAX5533(ShiftAB_to_DACAB,Ch_AB_dat);
}
//----------------------------------------------------------------------------//
/********************************************************
方案比较:
双通道DAC输出3中方案中,在实际使用中,当需要两路输出
各自需要的DAC时,一般选用方案2,因为它比方案1的完成时
间更短,效率更高。
方案3并不是没有用处,可以作为单通道DAC输出使用。
*********************************************************/
//---------------------test main()-----------------------//
void main(void)
{
//演示测试全部OK
Double_Channle_DACOUT_Method_1(0x0400,0x0800);
Double_Channle_DACOUT_Method_2(0x0a00,0x0635);
Double_Channle_DACOUT_Method_3(0x0754);
//如果是MAX5533或者是MAX5535 =========================================================
Enter_StandBy_Mode(Ref_2v425); // 此时的Ref_Out = 2.425 v,为有效值
Change_StandBy_to_ShutDown(Ref_1v940); // 此时的Ref_1v940为无效值
Enter_Normal_Mode(Ref_3v885); /* 此时的Ref_3v885为有效值,一般在想从其他模式
回到工作模式时,想改变之前设置的内部参考
电压的话,可用到此函数
*/
//====================================================================================
Double_Channle_DACOUT_Method_2(0x0d45,0x0435);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -