yaodp001 发表于 2023-11-23 12:02:10

请教一下AD5791的时序图,一直没输出!

本帖最后由 yaodp001 于 2023-11-23 12:03 编辑

看这个SPI时序绿色部分,SYNC拉低后SCK应该只能是高电平吧,那采样应该只能是第一个下降沿,那就是10模式吧

redworlf007 发表于 2023-11-23 12:06:18

逻辑分析仪呢?

yaodp001 发表于 2023-11-23 12:28:10

redworlf007 发表于 2023-11-23 12:06
逻辑分析仪呢?
(引用自2楼)

逻辑分析仪也得和手册对应啊,现在手册都没整明白

redworlf007 发表于 2023-11-23 12:35:30

yaodp001 发表于 2023-11-23 12:28
逻辑分析仪也得和手册对应啊,现在手册都没整明白
(引用自3楼)

找个demo板和程序先试试呗。

yaodp001 发表于 2023-11-23 13:17:57

本帖最后由 yaodp001 于 2023-11-23 13:19 编辑



ADI里面有人回复说是1/3模式,01模式是有可能得,这11模式有些搞笑了

ibmx311 发表于 2023-11-23 15:29:22

几年前玩过,感觉一下就动了。这玩意不便宜别是假的吧

yaodp001 发表于 2023-11-23 15:40:05

ibmx311 发表于 2023-11-23 15:29
几年前玩过,感觉一下就动了。这玩意不便宜别是假的吧
(引用自6楼)

是很贵,570左右!我现在按照手册给的时序图,输出一直是0,应该是寄存器没有写成功,但是我写后回读的数据是对的,真奇怪!

yaodp001 发表于 2023-11-23 17:58:13

本帖最后由 yaodp001 于 2023-11-23 18:08 编辑

ibmx311 发表于 2023-11-23 15:29
几年前玩过,感觉一下就动了。这玩意不便宜别是假的吧
(引用自6楼)

大佬来指导一下吧



SPI现在用的模式2,发0x312后回读i32也对,AD5791_LoadDAC采用异步更新,没有反应,控制寄存器如果配置成功应该会有输出一个负基准电压,现在都是0V

ibmx311 发表于 2023-11-23 18:03:44

yaodp001 发表于 2023-11-23 17:58
大佬来指导一下吧
(引用自8楼)

找个单片机,放几个按钮,按钮可选择是单稳态还是双稳态,然后用手按,我做实验一般都是这么干的。spi都是按钮按出来的。像cs就做成双稳态的,时钟·数据用单稳态的,碰到spi的,几下就按出来了

yaodp001 发表于 2023-11-23 18:09:52

ibmx311 发表于 2023-11-23 18:03
找个单片机,放几个按钮,按钮可选择是单稳态还是双稳态,然后用手按,我做实验一般都是这么干的。spi都 ...
(引用自9楼)

你这方法真是闻所未闻,真是高高手

1a2b3c 发表于 2023-11-23 18:11:20

这玩意弄清楚了spi输入/输出对应clk上升还是下降沿,数据是MSB还是LSB基本上就啥问题没有啦

ibmx311 发表于 2023-11-23 18:11:41

yaodp001 发表于 2023-11-23 18:09
你这方法真是闻所未闻,真是高高手
(引用自10楼)

这样快,确认了时序再写代码不好吗

yaodp001 发表于 2023-11-23 18:12:58

1a2b3c 发表于 2023-11-23 18:11
这玩意弄清楚了spi输入/输出对应clk上升还是下降沿,数据是MSB还是LSB基本上就啥问题没有啦 ...
(引用自11楼)

大佬来看看时序给分析分析SPI是哪个模式

yaodp001 发表于 2023-11-23 18:13:43

ibmx311 发表于 2023-11-23 18:11
这样快,确认了时序再写代码不好吗
(引用自12楼)

我手速度慢啊

1a2b3c 发表于 2023-11-23 18:57:11

yaodp001 发表于 2023-11-23 18:12
大佬来看看时序给分析分析SPI是哪个模式
(引用自13楼)

我不是大佬,我只是愿意花时间罢了
不知道你把芯片手册挨着看了几遍呢?可不要说你一遍都没有看完就来问问题了。不过我承认我的确是从来没有看过你这个芯片的手册,因为我没需要他的时候。
像这种大厂资料,他恨不得把spi总线来龙去脉给你讲一遍,所以我敢肯定一定会专门有地方描述了数据是上还是下沿这些最基本的且关键的时序信息
如果你不相信,我们就阿莫三年vip++年费来赌一把,哈哈?

ibmx311 发表于 2023-11-23 19:03:49

没坑,当时1分钟就搞出来了,就直接给数就完了。当时我一共是两片,顺着高位在前一路写进去就都动了

modbus 发表于 2023-11-23 19:16:11

模拟SPI输出最容易搞的,先送1位数据,然后再给时钟脚1个完整的脉冲(1个上升沿再1个下降沿或者1个下降沿再1个上升沿),都不用管他工作在哪种模式

1a2b3c 发表于 2023-11-23 19:22:01

modbus 发表于 2023-11-23 19:16
模拟SPI输出最容易搞的,先送1位数据,然后再给时钟脚1个完整的脉冲(1个上升沿再1个下降沿或者1个下降沿再 ...
(引用自17楼)

对,这种方法可以通吃大部分情形,

yaodp001 发表于 2023-11-23 19:59:42

1a2b3c 发表于 2023-11-23 18:57
我不是大佬,我只是愿意花时间罢了
不知道你把芯片手册挨着看了几遍呢?可不要说你一遍都没有看完就来问 ...
(引用自15楼)

大厂未必就说这么明明白白,就这个芯片还没几毛的说的明白,就图上时序给个意见是哪个模式就好了

yaodp001 发表于 2023-11-23 20:10:35

modbus 发表于 2023-11-23 19:16
模拟SPI输出最容易搞的,先送1位数据,然后再给时钟脚1个完整的脉冲(1个上升沿再1个下降沿或者1个下降沿再 ...
(引用自17楼)

你这比上面那位用按钮按的靠谱多了!
其实也就这4种模式,不外乎循环时序前的高低或者时序内的高低,不过咱不能上来不看手册就开始套圈圈吧

1a2b3c 发表于 2023-11-23 20:16:08

yaodp001 发表于 2023-11-23 19:59
大厂未必就说这么明明白白,就这个芯片还没几毛的说的明白,就图上时序给个意见是哪个模式就好了 ...
(引用自19楼)

我就一直问你看手册没有嘛,你说就一个时序图,
我都说了我没有用过这个芯片,也没有看过,不过刚刚1分钟之前我专门看了下,手册F版本第8页上面的管脚定义里面的描述,写得清清楚楚时钟和数据的关系,你现在可以去看一下了,

yaodp001 发表于 2023-11-23 20:30:01

1a2b3c 发表于 2023-11-23 20:16
我就一直问你看手册没有嘛,你说就一个时序图,
我都说了我没有用过这个芯片,也没有看过,不过刚刚1分钟 ...
(引用自21楼)

我就手册时序图问SPI模式

brother_yan 发表于 2023-11-23 20:39:16

我很好奇楼主用这款强悍的DAC做什么

yaodp001 发表于 2023-11-23 20:46:42

brother_yan 发表于 2023-11-23 20:39
我很好奇楼主用这款强悍的DAC做什么
(引用自23楼)

你看一下过程校准仪,一种输出可调标准源,一般用来校准模拟量采集设备!

N_EMBED 发表于 2023-11-23 20:53:23

SYNC引脚相当于传统SPI的CS使能引脚或者NSS引脚,可以提前拉低,在第一个SCLK下降沿启动数据传输,AD5791在SCLK低电平时接收数据,总共需要24个时钟下降沿,最后拉高SYNC,即可锁存数据到AD5791的寄存器,而LDAC引脚用于DAC数据输出的更新



yaodp001 发表于 2023-11-23 21:00:15

N_EMBED 发表于 2023-11-23 20:53
SYNC引脚相当于传统SPI的CS使能引脚或者NSS引脚,可以提前拉低,在第一个SCLK下降沿启动数据传输,AD5791在 ...
(引用自25楼)

是的,这个芯片主要的部分就是一个硬件,一个时序,一个寄存器值!硬件和寄存器都已经清楚,现在就卡在时序图了,我参考SPI时序应该是01模式或者是10模式,而且用2个方式都可以写寄存器,回读返回也是写入值,按说是没有问题,但是同步更新或者异步更新都没有输出!

烧掉可能性很低,用了2个都一样效果。
现在应该只能说是时序没有成功写入寄存器或者寄存器值不对!

N_EMBED 发表于 2023-11-23 21:03:50

一楼图对应的模式就是CPOL=1(时钟空闲idle时候的电平是高电平)和CPHA=0(idle时候为高电平,第一个边沿就是从高变到低),
应该就是你说的10模式

yaodp001 发表于 2023-11-23 21:11:40

N_EMBED 发表于 2023-11-23 21:03
一楼图对应的模式就是CPOL=1(时钟空闲idle时候的电平是高电平)和CPHA=0(idle时候为高电平,第一个边沿就 ...
(引用自27楼)

现在就是不清楚SCLK空闲状态,我看图感觉空闲高低都可以,但是在SYNC下拉时刻看到SCLK是高状态,所以我猜测是10模式,而如果SCLK还可以低电平,那就应该是也支持01模式,所以我用2个模式都试了可写入可正确读出。

但是ADI论坛给的回复是支持01模式和11模式,所以现在用的01测试,没有效果,这个芯片不知道还有啥神奇地方隐藏了!

N_EMBED 发表于 2023-11-23 21:31:07

yaodp001 发表于 2023-11-23 21:00
是的,这个芯片主要的部分就是一个硬件,一个时序,一个寄存器值!硬件和寄存器都已经清楚,现在就卡在时 ...
(引用自26楼)

你看25楼的截图最后一句,写入完成后,SYNC拉高,然后LDAC在拉低就能更新输出,好像没看到你提LDAC的操作。

yaodp001 发表于 2023-11-23 21:39:08

N_EMBED 发表于 2023-11-23 21:31
你看25楼的截图最后一句,写入完成后,SYNC拉高,然后LDAC在拉低就能更新输出,好像没看到你提LDAC的操作 ...
(引用自29楼)

初始化里执行了AD5791_LoadDAC函数,这里有操作了,1楼图里只在写入第二个寄存器执行了它,测试过在第一个控制寄存器后也调用,也没有效果

N_EMBED 发表于 2023-11-23 21:41:08

yaodp001 发表于 2023-11-23 21:11
现在就是不清楚SCLK空闲状态,我看图感觉空闲高低都可以,但是在SYNC下拉时刻看到SCLK是高状态,所以我猜 ...
(引用自28楼)

按照1楼左边的图,在SYNC为高时SCLK的状态可以随意,在SYNC拉低的时候,SCLK要置高,保证SCLK的第一个下降沿到来时,SYNC为低电平。
如果软件SPI的话,SCLK先拉高,SYNC同时拉低,延时固定时间后,SCLK拉低就启动数据写入。
如果是硬件SPI的话,SCLK空闲为高电平,要写入时,SYNC先拉低启动SPI发送,然后在硬件SPI的第一个SCLK下降沿开始写入数据。

N_EMBED 发表于 2023-11-23 21:54:30

yaodp001 发表于 2023-11-23 21:39
初始化里执行了AD5791_LoadDAC函数,这里有操作了,1楼图里只在写入第二个寄存器执行了它,测试过在第一 ...
(引用自30楼)

你看LDAC引脚的说明,有两种操作,一是永久置为低,SYNC拉高就会更新输出,另外一种是就8楼的那样,写入之前LDAC先置高。
可以试一下上电就将LDAC置低,然后就不管了,只操作SPI。
另外最好上传逻辑分析仪采集芯片各引脚的波形,确认实际是否按代码的功能实现了。

yaodp001 发表于 2023-11-23 22:12:04

N_EMBED 发表于 2023-11-23 21:54
你看LDAC引脚的说明,有两种操作,一是永久置为低,SYNC拉高就会更新输出,另外一种是就8楼的那样,写入 ...
(引用自32楼)

谢谢!
LDAC两种更新方式都试了,现在再研究一下时序图,手头没有逻辑分析仪,这个东西看着挺简单,确实有些头大!

yaodp001 发表于 2023-11-23 22:25:32

N_EMBED 发表于 2023-11-23 21:41
按照1楼左边的图,在SYNC为高时SCLK的状态可以随意,在SYNC拉低的时候,SCLK要置高,保证SCLK的第一个下 ...
(引用自31楼)


这些地方时序画的模棱两可,不知道高低该是哪种操作,一个大厂把这个时序搞这真服气了

N_EMBED 发表于 2023-11-23 23:06:55

yaodp001 发表于 2023-11-23 22:25
这些地方时序画的模棱两可,不知道高低该是哪种操作,一个大厂把这个时序搞这真服气了 ...
(引用自34楼)

就拿LDAC来说,为了不用再重新画一张图,时序是一种涵盖了两种意思,第一种是可以在在写入过程中保持高电平,后面写完了再拉低,那就要看t11和t12的时间。
第二种是在SYNC拉低之前(即开始启动写操作之前)先将LDAC拉低,LDAC提前最少提前多久拉低,就由t10决定。

PS:那么贵的DAC芯片都买了,何不在那个TB店再买个30块钱的逻辑分析仪,采一下实际的时序来看看,可能思路瞬间就开朗了。

yaodp001 发表于 2023-11-24 09:29:22

N_EMBED 发表于 2023-11-23 23:06
就拿LDAC来说,为了不用再重新画一张图,时序是一种涵盖了两种意思,第一种是可以在在写入过程中保持高电 ...
(引用自35楼)

谢谢这么晚了还来回复!
这种时序画法会添加进去组合逻辑,让人更难理解,刚才又试了几种时序组合,还是没有效果!

觉得用逻辑分析仪效果不大,毕竟现在SPI时序对寄存器的写入和读取是正确的,应该就差其它信号比如LDAC\SYNC\SCLK时序的控制或者寄存器的正确数据了

yaodp001 发表于 2023-11-24 11:17:27

本帖最后由 yaodp001 于 2023-11-24 11:56 编辑



如果IO初始化后先写入寄存器再读就可以读出来,如果IO初始化后直接读寄存器值读不出来,这SPI真诡异

ibmx311 发表于 2023-11-24 12:43:16

我用按钮,几分钟就动了,现在看靠谱吗,你至少是折腾一天了。

yaodp001 发表于 2023-11-24 14:00:52

ibmx311 发表于 2023-11-24 12:43
我用按钮,几分钟就动了,现在看靠谱吗,你至少是折腾一天了。
(引用自38楼)

你那是神手,应该买彩票啊

ibmx311 发表于 2023-11-24 16:42:47

yaodp001 发表于 2023-11-24 14:00
你那是神手,应该买彩票啊
(引用自39楼)

您80秒钟按一下也早就干完了

yaodp001 发表于 2023-11-25 10:00:21

本帖最后由 yaodp001 于 2023-11-25 10:06 编辑



上面的程序可以正确的写寄存器并输出,SPI用的是10模式,SPI延时是1us,注释的SPI读取不能加

至此算是完成了主要工作,搞了好久,刚才对SPI测试的时候先把读取部分注释掉发现可以了,目前还没找到这个原因,IO没有复用,不知所以然?

在此感谢上面给出意见的网友,谢谢!

按照我一般的处理流程是新器件先写好后读寄存器,然后找一个默认寄存器值判断,用来判断器件初始化是否成功,这个芯片给挖了个大坑,搞了好久!
后续换个STM32或者改OD方式试试读取!

ADI技术也问了,二姨家也问了,网上资料也找了,确实没有建设性的意见,再次吐一下ADI的狗屁时序图,画的是个蛋蛋!

ibmx311 发表于 2023-11-25 15:34:28

实际上,玩20位的ADC也好,dac也罢都需要3458a级别的仪器作为参考,这还不是主要的,最主要的是时间,因为测出来就需要校准,校准就需要时间。当然有关20位dac输出的文案很多,但真正能实现都要付出极大的代价。现在回头看看,除了万用表,很难有人把16位的转换做好。就是是费了千辛万苦搞出了16位的ADC,发现也没多大用,一下就泄气了。我就敢这样说,ad5791就是因为没什么用,卖的少所以贵。
页: [1]
查看完整版本: 请教一下AD5791的时序图,一直没输出!