打印

求个AD7923的驱动

[复制链接]
2024|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stul海盗|  楼主 | 2014-4-18 12:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我写了一个,但是AD得到的AD值完全不对,谁能给个参考
沙发
mmuuss586| | 2014-4-18 13:28 | 只看该作者
没用过这个AD。

AD7923-EP.pdf

214.56 KB

AD7923.pdf

375.17 KB

使用特权

评论回复
板凳
mmuuss586| | 2014-4-18 13:28 | 只看该作者
方便的话,你把图和你现在写的程序,发上来看看,一起讨论下

使用特权

评论回复
地板
andypanfan| | 2015-4-22 10:00 | 只看该作者
void AD7923_init(void)
{
         GPIO_InitTypeDef  GPIO_InitStructure;
         SPI_InitTypeDef  SPI_InitStructure;

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                                  //使能PA时钟
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,  ENABLE );                           //SPI1时钟使能

         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                                          //端口配置
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                                           //推挽输出
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                          //IO口速度为50MHz
         GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                  //根据设定参数初始化GPIOB.4
         GPIO_SetBits(GPIOA,GPIO_Pin_4);

         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                             //PA5/6/7复用推挽输出
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
         GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                    //初始化GPIOA

         GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);                              //PA5/6/7上拉

         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                 //设置SPI工作模式:设置为主SPI
         SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;                                         //设置SPI的数据大小:SPI发送接收16位帧结构
         SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                 //串行同步时钟的空闲状态为高电平
         SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                             //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                     //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//定义波特率预分频的值:波特率预分频值为256
     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                         //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
         SPI_InitStructure.SPI_CRCPolynomial = 7;                                 //CRC值计算的多项式
         SPI_Init(SPI1, &SPI_InitStructure);                                 //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

         SPI_Cmd(SPI1, ENABLE);                                                                                          //使能SPI外设                                                                                                                
}

u16 SPI1_ReadWriteByte(u16 TxData)
{               
        u8 retry=0;                                        
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)          //检查指定的SPI标志位设置与否:发送缓存空标志位
        {
                retry++;
                if(retry>200)return 0;
        }                          
        SPI_I2S_SendData(SPI1, TxData);                                                                         //通过外设SPIx发送一个数据
        retry=0;

        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)         //检查指定的SPI标志位设置与否:接受缓存非空标志位
        {
                retry++;
                if(retry>200)return 0;
        }                                                              
        return SPI_I2S_ReceiveData(SPI1);                                                                          //返回通过SPIx最近接收的数据                                            
}

void ENABLE_CS_AD7923(void)
{
        GPIO_ResetBits(GPIOA,GPIO_Pin_4);
}

void DISABLE_CS_AD7923(void)
{
        GPIO_SetBits(GPIOA,GPIO_Pin_4);
}


u8 test_buf[2]={0};                                                                                                    
int main(void)
{         
        u16 AD_7923_vaule=0;
        u16 VOL_vaule=0;
        Stm32_Clock_Init(9);                                                                               
        delay_init();                                                                                            
        NVIC_Configuration();                                                                                                                                                                                                                  
        RS485_USART1_init(9600);
        AD7923_init();
        while(1)
        {
                delay_ms(1000);
                ENABLE_CS_AD7923();
                delay_ms(10);
                AD_7923_vaule=SPI1_ReadWriteByte(0xC730)&0x0FFF;                                         //  0  通道0x0C33    1通道 0x0C73  2通道 0xCB3
                DISABLE_CS_AD7923();
                   VOL_vaule=(int)(AD_7923_vaule/4096.0*1000);
                test_buf[0]=VOL_vaule%65536/256;
                test_buf[1]=VOL_vaule%256;
                usart1_Send_Data(test_buf,2);                                                                           
        }
}

控制寄存器配置为  1100 0011 0011   电压范围是0~2.5V   通道是 0通道   输出为  2进制输出   电源管理为  正常PM1 PM0都为1   DONTC 为都这置位0
怎么输出都是  0   

使用特权

评论回复
5
andypanfan| | 2015-4-22 10:01 | 只看该作者
输出的结果  都是输出  0  ,不知道哪里配置错误!! 请指教???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

40

帖子

0

粉丝