Y-小杨 发表于 2023-9-22 19:34

AD7177-2数据输出问题

<p>最近在调试stm32+ AD7177-2,给AD7177一个50hz的正弦波,stm32用串口接收数据,接收的波形不完整。</p>

<p>这是AD7177的寄存器配置:</p>

<p>主要是配置:</p>

<p>ADC的通道:AIN0(+),AIN1(-)</p>

<p>ADC的输出速率:5000SPS</p>

<p>ADC的转换模式:连续转换;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p>还有就是,淘宝买的板子,给的例程使用的模拟SPI,没有使用硬件SPI,这对stm32接收有影响吗?</p>

<pre>
<code>#include "mcp_myspi.h"
#include "delay.h"
#include "sys.h"
#include "stm32f10x_spi.h"
//ÒÔÏÂÊÇSPIÄ£¿éµÄ³õʼ»¯´úÂ룬ÅäÖóÉÖ÷»úģʽ                                                   
//SPI¿Ú³õʼ»¯


void AD717x_Send8Bit(uint8_t _data);
uint8_t AD717x_Recive8Bit(void);
void AD717x_WaitDRDY(void);
void AD717x_DelaySCLK(void);
void AD717x_DelayDATA(void);

void AD717x_soft_spi(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;

        /* ´ò¿ªGPIOʱÖÓ */
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); // ʹÄÜPA¶Ë¿ÚʱÖÓ

        /* ÅäÖü¸¸öÍÆÍêÊä³öIO */
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        /* ÍÆÍìÊä³öģʽ */

        GPIO_InitStructure.GPIO_Pin = PIN_SCK;
        GPIO_Init(PORT_SCK, &amp;GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = PIN_DIN;
        GPIO_Init(PORT_DIN, &amp;GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = PIN_CS;
        GPIO_Init(PORT_CS, &amp;GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = PIN_SYNC;
        GPIO_Init(PORT_SYNC, &amp;GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;                /* PIN_DOUT ÉèÖÃΪÊäÈëÉÏÀ­ */
        GPIO_InitStructure.GPIO_Pin = PIN_DOUT;
        GPIO_Init(PORT_DOUT, &amp;GPIO_InitStructure);

        CS_1();
        SCK_1();                /* SPI×ÜÏß¿ÕÏÐʱ£¬ÖÓÏßÊǵ͵çƽ */
        DI_1();       
        SYNC_0;
}


void AD717x_DelaySCLK(void)
{
        uint16_t i;
        for (i = 0; i &lt; 2; i++);
}


void AD717x_DelayDATA(void)
{
        delay_us(10);        /* ¡Á?D??¨®3¨´ 6.5uS, ¡ä?¡ä|¨¨?10us */
}


void AD717x_Send8Bit(uint8_t _data)
{
        uint8_t i;

        AD717x_DelaySCLK();
        AD717x_DelaySCLK();

        for(i = 0; i &lt; 8; i++)
        {
                if (_data &amp; 0x80)
                {
                        DI_1();
                }
                else
                {
                        DI_0();
                }
                SCK_0();                               
                AD717x_DelaySCLK();               
                SCK_1();                       

                _data &lt;&lt;= 1;
                AD717x_DelaySCLK();               
        }
        AD717x_DelayDATA();
}

uint8_t AD717x_Recive8Bit(void)
{
        uint8_t i;
        uint8_t read = 0;

        AD717x_DelaySCLK();

       
        for (i = 0; i &lt; 8; i++)
        {
                SCK_1();
                AD717x_DelaySCLK();
                SCK_0();
               
                read = read&lt;&lt;1;
                if (DO_IS_HIGH())
                {
                        read++;
                }               
                AD717x_DelaySCLK();
        }
        return read;
}
</code></pre>

<p>&nbsp;</p>

<p>对于手册中的连续读取模式,我是要通过串口发送0x02;0x0080,之后再读取数据吗?</p>

<p> &nbsp;</p>

火辣西米秀 发表于 2023-9-24 08:31

<p>用串口接收数据,接收的波形不完整,表明看起来好像是程序的事情,但没看波形具体是个怎么不完整的</p>

damiaa 发表于 2023-9-25 09:30

<p>连续转换模式和连续读取模式必须配套使用。</p>

<p>&nbsp;</p>

<p>对于手册中的连续读取模式,我是要通过串口发送0x02;0x0080,之后再读取数据吗?</p>

<p>看资料上逻辑关系图描述的是。</p>

<p>&nbsp;</p>

<p>连续转换模式的读数据必须在下次转换完成前读出,否则可能出问题。</p>

ADI亚德诺 发表于 2023-12-3 13:45

<table cellpadding="0" cellspacing="0">
        <tbody>
                <tr>
                        <td id="postmessage_3283448">
                        <p><strong>我们专业代理分销ADI全线产品,部分有现货,全部产品均为原装可追溯。如有需要可以站内联系我。</strong></p>
                        </td>
                </tr>
        </tbody>
</table>
页: [1]
查看完整版本: AD7177-2数据输出问题