电路设计论坛
直播中

李霞

7年用户 1273经验值
私信 关注
[问答]

造成AD5315无电压输出的原因有哪些?


STM32F207控制,AD5315供电和参考电压都是3.3V,结果无电压输出,以下是相关代码:
void main(void)
{
   int i,j;
   SystemInit();
   delay_init(120);
   GPIO_Init();
   SPI_Init();
   GPIOA->ODR |= SCLK_5315;
   GPIOA->ODR |= SDA_5315;
   GPIOA->ODR  = ~A0_5315;
    Write_5315(DACA,0x3FF);
   while(1);
}
void Write_5315(u8 number,u16 data)
{
   int i;
   u8 AddressByte=0x18;
   u8 PointerByte;
   u16 DataByte;
switch(number)
   {
   case DACA:
     PointerByte=0x01;
     break;
   case DACB:
     PointerByte=0x02;
     break;
   case DACC:
     PointerByte=0x04;
     break;
   case DACD:
     PointerByte=0x08;
     break;
   default :break;
   }
   DataByte=0x3000|(data<<2);
   
   //address byte
   for(i=7;i>=0;i--)
     WriteOneBit((AddressByte>>i) 0x01);
   WriteOneBit(0);//wait
   //pointer byte
   for(i=7;i>=0;i--)
     WriteOneBit((PointerByte>>i) 0x01);
   WriteOneBit(0);//waite
   //DataByte
   for(i=15;i>=0;i--)
     WriteOneBit((DataByte>>i) 0x01);
   WriteOneBit(0);//wait
   WriteOneBit(0);//wait
   GPIOA->ODR |= SDA_5315;
}
void WriteOneBit(u8 bit)
{
   if(bit)
   {
     GPIOA->ODR  =~ SCLK_5315;
     delay_us(1);
     GPIOA->ODR |= SDA_5315;
     delay_us(1);
     GPIOA->ODR |= SCLK_5315;
     delay_us(1);
   }
   else
   {
     GPIOA->ODR  =~ SCLK_5315;
     delay_us(1);
     GPIOA->ODR  =~ SDA_5315;
     delay_us(1);
     GPIOA->ODR |= SCLK_5315;
     delay_us(1);
   }
}

                                                               

回帖(1)

贺若龙

2023-12-21 15:16:40
首先请您核查供电电压和参考电压是否正确,然后看接口时序,是否可以正确读写寄存器的值,另外,LDAC是否置高电平,或者拉低后置高。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分