SHANWAZI 发表于 2021-11-15 21:58 你好,我也遇到这个问题,不知道能否给一下后面您的进一步探究结果 |
188610329 发表于 2021-11-14 22:07 非常感谢提出建议和思路我再细看一下芯片手册!!!!!!!! |
你试试看极端值,比如最低,或者最高,是不是给你全0,全1,是的话,就说明,通讯肯定是对的,如果不是的话,那么还是分析分析Driver 1 & 2 这里是不是有什么问题。 手册我没仔细看。毕竟这芯片我也没有,研究了也没啥用,但是,比较确定的是,Driver 1 & 2 肯定是有一定用处的。 也许是触控板的控制,也许是ADC控制,细读手册吧, 按IO的标注来看,通信协议有点类似 MicroWire 非常接近SPI 但不是SPI的协议,比如第一个1, 以及等待Busy, 都是MicorWire 协议的特征,所以,如果真是MicroWire协议的话,那么,时序要求是非常严格的,你再仔细对照手册看看吧。不排除,要ADC之前,要额外发个什么指令初始化之类的。 |
188610329 发表于 2021-11-14 16:32 感谢指导!!!!! 似乎明白这时序图了!!!!原来一直是我看错时序图了。 |
当Dout开始输出的时候,转换已经完毕了, 所以,你唯一需要等待的,只是BUSY 变低电平。 代码上来讲,你只需要在发完PD0之后, BUSY == 1 之后, 再给一个时钟 即第9时钟,之后, while(BUSY); 傻等BUSY为0即可 然后,就是接受12位数据。 按时序图上看,收完11位数据后,收最后一位数据时 Driver 2 需要给低电平,然后再给3个空时钟,然后CS拉高。 |
SHANWAZI 发表于 2021-11-14 13:22 真正转换,应该在busy为高,表示在转换。 此时你再给一个时钟,之后,就安静等待Busy为低,等到busy 为低了,DOUT就会输出,可能是1可能是0这个不用管,反正给够12个时钟,收足12个位数据,然后再算到底是多少。 |
188610329 发表于 2021-11-14 12:49 是的是的他的真正在处于转换是不是在BUSY变成高电平后的八个时钟周期或者是12个? |
SHANWAZI 发表于 2021-11-14 00:02 是这个东西吧? ![]() 按时序图上看, CS拉底后,DI 必须置1,然后再给时钟,此时Dout会为低,所以你说的没“输出”如果指为低,那么就对了。 唯一不确定的,就是下面那两条线Dirver1 and 2,是否必须在第五个时钟拉高,是不是必要条件,但是感觉,拉高的时机来看,必须拉高了,后面才会有Busy, Dout才会有回传。你现在横竖不成功,可以试试。 |
rayin 发表于 2021-11-14 09:56 感谢提出建议! |
TTQ001 发表于 2021-11-14 03:48 一起学习 |
用示波器抓下波形相对逻辑分析仪要准确一点, 逻辑分析仪对速度快点的信号可能不准确,给你造成误导. 希望对你有用. |
感谢分享有关 SPI 时序 |
188610329 发表于 2021-11-12 22:27 以按照您建议操作也并未有啥改善 反倒直接没有输出了!尴尬 |
你试试看 调整一下时序, 拉低CS 之后,拉高DI, 给1微秒的延时之后,再拉高时钟线,看你的时序图 时钟和DI几乎同时拉高了,是不是这个原因造成你的DOUT 又拉低了呢?因为没有收到有效信号? |
感谢! |
188610329 发表于 2021-11-12 14:42 有的!根据数据手册所说此脚是AD串行数字量输出供单片机读取 而我单片机IO脚是有对应上拉电阻的10K应该没什么问题吧? 依您所说即使没有信号时 和此脚IO高阻也应该出现高电平状态!但是现在恰恰相反! 而且出现电平跳变的地方也正是在写入控制字节时的CLOCK脉冲下出现的?我现在就是因为这个才感到疑惑。按手册所说DOUT引脚是在BUSY引脚出现下降沿时ADC转换结果的最高位会出现在DOUT引脚。现在恰恰是在写入控制字节时DOUT就已经在输出了?在逻辑分析仪上可以看出。 |
DOUT 一般需要10K上拉,你的MISO 低电平肯定有问题,没有信号的时候,即使IO高阻也应该高电平。 |
rayin 发表于 2021-11-12 08:42 非常感谢分享经验!我现在只是使用此芯片作为ADC模块 且并没有把BUSY管脚到单片机上。 现在的这个时序好奇怪并没有读取DOUT的数据, 写的同时也会有数据返回!!!!!!!一时半会弄不明白!!!!!! |
2046这个电阻触控IC上个月用过, clcok 信号要输入8+1+16个,前面8个是写入控制字节0x90,0xd0, 再给一个clcok用于清除busy信号, 后面16个clock是用来接收12位AD转换xy的坐标。 问题1: 写入0x90,0xd0的时候,2046是不会发送AD信号的。要等busy信号清除之后,才发送。我用的过程中,写入0x90,0xd0的时候,miso上是没有信号跳变的,清除busy信号之后,2046才外发数据。 问题2:busy信号是AD转换过程需要花费时间,完成了2046会清除。 以上是我的一点经验共享。 |