硬汉嵌入式论坛

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

[ADC] 并行读取AD7606数据,只有上电/复位后的短时间内可以正常读取

[复制链接]

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2022-1-1 23:54:36 | 显示全部楼层 |阅读模式
改的官方例程;
我板子没有574和译码器,好在我只用一个7606;
为了兼容,程序我改了一下,地址线用的PD13(FMC_A18);
7606地址:0x60000000  (32位模式,FMC_A18 为 0);
HC574地址改成了:0x60100000  (32位模式,FMC_A18 为 1);

过采样引脚改到了FMC_D16, FMC_D17, FMC_D18, 原程序是FMC_D13, FMC_D14, FMC_D15,我没有574扩展引脚,就换了一下;
后面也试了一下直接过采样全部接地,反正我也不用过采样;
RANGE也是,直接接地和接到引脚都试了,一样;
7606片选信号直接接到PD13;
所有引脚都直接接到单片机;

定时器定时 10khz 中断,中断里面调用 AD7606_ReadNowAdc(); 和 AD7606_StartConvst();
主函数 while循环串口输出数据;

采样直接接到单片机的 3.3v 电源上;
只有上电或复位单片机之后的短时间内串口输出正常数据,然后输出数据减半,再然后就一直输出都是零了;


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2022-1-2 07:34:00 | 显示全部楼层
方便的话,发原理图,仅需AD7606部分即可。

然后发想要的配置程序看下。
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2022-1-2 18:04:27 | 显示全部楼层
eric2013 发表于 2022-1-2 07:34
方便的话,发原理图,仅需AD7606部分即可。

然后发想要的配置程序看下。

这是接线图,全部都是直接接到单片机;打x的是没接的,悬空;
CVA和CVB直接在板子上焊一起了,就只接了一个。另一个悬空;

过采样原程序是13,14,15,我改到了16,17,18;
#define        AD7606_OS0     GPIO_PIN_16
#define        AD7606_OS1     GPIO_PIN_17
#define        AD7606_OS2     GPIO_PIN_18


由于只用了地址线FMC_A18(PD13),所以下面的地址也做了响应修改
#define  AD7606_RESULT()           *(__IO uint16_t *)0x60000000
#define  HC574_PORT           *(uint32_t *)0x60100000

QQ图片20220102175847.jpg
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2022-1-2 18:10:06 | 显示全部楼层
eric2013 发表于 2022-1-2 07:34
方便的话,发原理图,仅需AD7606部分即可。

然后发想要的配置程序看下。

配置程序的话就直接是用的:
bsp_fmc_ad7606.c
这个文件的程序,我就改了几个端口;
AD7606_ReadNowAd(); 函数里面的 AD7606_SEGGER_RTTOUT(); 我去掉了,看了下注释这个好像是用J-Scope的时候用的;
我自己写的定时器2,10khz中断,中断里面就下面两句程序:
AD7606_ReadNowAdc();
AD7606_StartConvst();
主循环串口打印8个通道数据
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2022-1-2 18:38:17 | 显示全部楼层
CaiNiao传奇 发表于 2022-1-2 18:10
配置程序的话就直接是用的:
bsp_fmc_ad7606.c
这个文件的程序,我就改了几个端口;

我用的杜邦线接线,不知道会不会有问题,我在定时器中断里面加了一个计数,uint32,主循环输出,大概计数到2000左右数据输出就全是零了,前面都是正常的,每次主循环输出一次8个通道的数据,计数增加120多;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2022-1-2 21:10:53 | 显示全部楼层
CaiNiao传奇 发表于 2022-1-2 18:38
我用的杜邦线接线,不知道会不会有问题,我在定时器中断里面加了一个计数,uint32,主循环输出,大概计数 ...

杜邦线有点影响。
另外你的FMC的MPU配置了吗,这个很重要。
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2022-1-2 22:37:25 | 显示全部楼层
eric2013 发表于 2022-1-2 21:10
杜邦线有点影响。
另外你的FMC的MPU配置了吗,这个很重要。

配置了,直接把文件里面的函数抄过来的,不配置MPU一次都读不出来
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2022-1-3 09:17:44 | 显示全部楼层
CaiNiao传奇 发表于 2022-1-2 22:37
配置了,直接把文件里面的函数抄过来的,不配置MPU一次都读不出来

别的问题看不出来了,你再查查
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2022-1-3 10:19:30 | 显示全部楼层
说明你的采样流程有问题。BUSY没接的话,就是在转换期间读数据。所以应该是在CONVST信号后赶紧读数据。你可以在定时器中断里翻转CONVST,然后读8个数据,再置位CONVST。用这种方法对AD7606B和7606C同样有效
回复

使用道具 举报

0

主题

16

回帖

16

积分

新手上路

积分
16
发表于 2022-1-3 10:26:35 | 显示全部楼层
你这个FMC总线是不能配置成32位的。同时,你的流程可能有问题。没有使用BUSY信号的话,应该是采用转换期间读取数据的方式。在复位AD7606前,需要先确保OS[2:0],RANGE是确定的电平。然后复位。你可以试着在定时器中断后,产生CONVST信号,而不是使用PWM,产生有效的CONVST信号后,连续发8个RD信号,读取数据后,置位CONVST信号。这种方法对AD7606B,AD7606C都是有效的。同时,CVA和VCB是连在一起的。
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2022-1-5 00:29:51 | 显示全部楼层
rongzhai 发表于 2022-1-3 10:26
你这个FMC总线是不能配置成32位的。同时,你的流程可能有问题。没有使用BUSY信号的话,应该是采用转换期间 ...

啊啊啊啊啊啊啊啊啊啊,感谢感谢大佬
我正在定位问题,看看到底是哪个位置出了错
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2022-1-7 15:09:45 | 显示全部楼层
eric2013 发表于 2022-1-3 09:17
别的问题看不出来了,你再查查

我现在调是调通了,但只能用安富莱的工程,我用cubeMX创建的工程,就算配置程序全部替换成安富莱的函数,也还是无法正常运行,请问这个是啥情况啊,我都懵了,全复制过来都不行,只能在安富莱工程上改
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107049
QQ
发表于 2022-1-8 09:18:38 | 显示全部楼层
CaiNiao传奇 发表于 2022-1-7 15:09
我现在调是调通了,但只能用安富莱的工程,我用cubeMX创建的工程,就算配置程序全部替换成安富莱的函数, ...

是不是时钟一类的问题。估计只有这点区别了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 01:01 , Processed in 0.199963 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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