#include "ad5667.h"
#include "myiic.h"
#include "sys.h"
#include "delay.h"
unsigned char AD5667_DACA_Buffer[3];
unsigned char AD5667_DACB_Buffer[3];
void AD5667_Write_DATA(unsigned char RegisterAddr, unsigned int WriteValue)
{
unsigned char temp_high,temp_low;
unsigned int temp_value;
temp_value=WriteValue;
temp_low=temp_value&0x00ff;
temp_value=WriteValue;
temp_value>>=8;
temp_high=temp_value;
IIC_Start();
IIC_Send_Byte(AD5667_ADD);
IIC_Wait_Ack();
IIC_Send_Byte(RegisterAddr);
IIC_Wait_Ack();
IIC_Send_Byte(temp_high);
IIC_Wait_Ack();
IIC_Send_Byte(temp_low);
IIC_Wait_Ack();
IIC_Stop();
}
//Read register from AD5667R
void AD5667_Read_DATA(unsigned char RegisterAddr, unsigned char *buf)
{
IIC_Start();
IIC_Send_Byte(AD5667_ADD|0x01);
IIC_Wait_Ack();
IIC_Send_Byte(RegisterAddr);
IIC_Ack();
buf[0]=IIC_Read_Byte(1);
buf[1]=IIC_Read_Byte(0);
IIC_Stop();
}
void AD5667Init(void)
{
AD5667_Write_DATA(AD5667_RST_COMM, AD5667_RST_COMM_DATA);
delay_ms(5);
AD5667_Write_DATA(AD5667_REF_ON, AD5667_REF_ON_DATA);
delay_ms(5);
AD5667_Write_DATA(AD5667_LDAC_ON, AD5667_LDAC_ON_DATA);
delay_ms(5);
AD5667_Write_DATA(AD5667_POW_ON, AD5667_POW_ON_DATA);
delay_ms(5);
AD5667_Write_DATA(AD5667_DACA_SET, AD5667_DACA_SET_DATA_MIN);
delay_ms(5);
AD5667_Write_DATA(AD5667_DACB_SET, AD5667_DACB_SET_DATA_MIN);
delay_ms(5);
memset(AD5667_DACA_Buffer,0,3);memset(AD5667_DACB_Buffer,0,3);
AD5667_Read_DATA(AD5667_DACA_SET,AD5667_DACA_Buffer);
AD5667_Read_DATA(AD5667_DACB_SET,AD5667_DACB_Buffer);
}
void DAC_AD5667_Out_Volt(uchar ch,float volt)
{
float Volt_Value;
unsigned int Volt_Write_Value;
if((volt>10)||(volt<0))return;
Volt_Value=volt/4;
Volt_Value=Volt_Value/2.5;
Volt_Value=Volt_Value*(0x9080);
Volt_Write_Value=(unsigned int)Volt_Value;
if(ch==1){
AD5667_Write_DATA(AD5667_DACA_SET, Volt_Write_Value);
}
else if(ch==2){
AD5667_Write_DATA(AD5667_DACB_SET, Volt_Write_Value);
}
}
评论1