硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1395|回复: 10
收起左侧

ad7606的过采样设置问题

[复制链接]

1

主题

5

回帖

8

积分

新手上路

积分
8
发表于 2022-8-15 10:26:01 | 显示全部楼层 |阅读模式
请问一下,ad7606选用过采样模式应该怎么修改程序呢,这里提到的定时器中断在哪里呢,谢谢大家。在定时器中断服务程序中实现:
    定时器中断ISR:
    {
        中断入口;

        读取8个通道的采样结果保存到RAM;     ----> 读取的其实是上次的采集结果,对于连续采集来说,是没有关系的

        启动下次ADC采集;(翻转CVA和CVB)

        中断返回;
    }

    定时器的频率就是ADC采样频率。这种模式可以不连接 BUSY 口线。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-8-16 00:32:35 | 显示全部楼层
使用过采样仅需配置下相应过采样引脚就行,别的不用动,

具体AD7606的教程说明,看我们的教程文档就行:

https://www.armbbs.cn/forum.php?mod=viewthread&tid=93255

image.png


回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2022-8-16 19:55:49 | 显示全部楼层
有SPI驱动AD7606的吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-8-17 09:37:05 | 显示全部楼层
dzy 发表于 2022-8-16 19:55
有SPI驱动AD7606的吗

STM32F407板子SPI接口方式AD7606接线说明(2021-12-15)
https://www.armbbs.cn/forum.php? ... 0114&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2022-8-17 10:51:42 | 显示全部楼层
我用万用表测的电压2.45V,但是串口打印出来只有0.165V。读出来的电压比实际小了很多。选用的是64倍过采样,我感觉是busy保持高电平时间延长这里有问题,无过采样转换时间4us,64倍大约是300us,不知道在程序里面怎么延长busy时间。还有就是无过采样4us,在程序里面怎么设置的啊。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-8-17 11:35:16 | 显示全部楼层
dzy 发表于 2022-8-17 10:51
我用万用表测的电压2.45V,但是串口打印出来只有0.165V。读出来的电压比实际小了很多。选用的是64倍过采样 ...

AD7606特色是没有寄存器,全部是硬件设置,你要设置无过采样,修改下那三个OS引脚就行。
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2022-8-19 15:35:35 | 显示全部楼层
我用的串行SPI,只接了DA输出,数据是一次读16位还是读两次8位呢
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2022-8-19 15:37:07 | 显示全部楼层
我是转换后读数据,可以不用定时器中断吧
回复

使用道具 举报

1

主题

5

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2022-8-19 15:41:53 | 显示全部楼层
可以帮忙看看代码吗,读的数据不对。测的2.4V,读出来只有0.165V。用的是串行SPI,只接了一个DA输出。
void AD7606_Scan(void)                
{
        uint8_t i;                       
       
        if (BUSY_IS_LOW())          
    {
                SPI_CS_0(); /* SPI片选 = 0 */
       
                for (i = 0; i < CH_NUM; i++)
                {
                        s_adc_now[i] = bsp_spiRead1();
                       
                        s_adc_now[i] = s_adc_now[i] * 256 + bsp_spiRead1(); /* 读数据 */       
                }
       
                SPI_CS_1(); /* SPI片选 = 1 */

                AD7606_StartConv();        /* 给开始信号 */       
        }
}          
int16_t AD7606_ReadAdc(uint8_t _ch)
{
        int16_t sAdc;
       
        DISABLE_INT();       
        sAdc = s_adc_now[_ch];
        ENABLE_INT();

        return sAdc;
}
uint8_t bsp_spiRead1(void)
{
        uint8_t i;
        uint8_t read = 0;

        for (i = 0; i < 8; i++)
        {
                SCK_0();
                bsp_spiDelay();
                read = read << 1;
                if (MISO_IS_HIGH())
                {
                        read++;
                }
                SCK_1();
                bsp_spiDelay();
        }
        return read;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-8-20 11:25:40 | 显示全部楼层
dzy 发表于 2022-8-19 15:35
我用的串行SPI,只接了DA输出,数据是一次读16位还是读两次8位呢

接的DA输出? 你表达的是接的AD7606吧。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-8-20 11:27:03 | 显示全部楼层
dzy 发表于 2022-8-19 15:41
可以帮忙看看代码吗,读的数据不对。测的2.4V,读出来只有0.165V。用的是串行SPI,只接了一个DA输出。
voi ...

这个看着跟我们的程序是一样的,你的那个AD7606模块是5V供电吧,还有就是过采样引脚不要悬空,控制下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 21:14 , Processed in 0.192781 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表