tzz1983
发表于 2025-8-14 14:25:35
cyf1029 发表于 2025-8-14 11:25
我按您的方式对齐了,也是不行。
另外就是我传输的数组长度是不变的,只不过是最后一个灯设置为灭而已。 ...
或许是少传了1位数据,比如:串行输出32位,实际只有31位。
但现在不能确认,代码出现BUG有时候是五花八门,不实演很难猜出症结。
另:请问您用的是 I8080模式,还是M6800模式。
建议I8080模式,硬件波形,时序比较契合。
如何找出问题的建议:
1. 首先降低通信速率,以此来排除可能的匹配问题。
2.反复修改代码,比如现在是输出32个位,
修改代码为只输出8个位,同时更改显示数据,便于观察。(有示波或逻辑分析仪更好,没有也没关系,改数据可体现在LED灯上)
因为总的数据量少了,哪怕一位一位的看过去,也不会花很长时间,就能很快找出症结。
修正后改回,代码就正常了。
cyf1029
发表于 2025-8-14 14:31:58
tzz1983 发表于 2025-8-14 14:25
或许是少传了1位数据,比如:串行输出32位,实际只有31位。
但现在不能确认,代码出现BUG有时候是五花八 ...
使用的是I8080并口的,我现在用的是16位驱动,跟这个有关系吗?我改变了传输数据的长度,显示也会不正常。
tzz1983
发表于 2025-8-14 14:57:33
cyf1029 发表于 2025-8-14 14:31
使用的是I8080并口的,我现在用的是16位驱动,跟这个有关系吗?我改变了传输数据的长度,显示也会不正常。 ...
还有个地方要注意,LCM口和普通IO口是共用的,也就是说,当DMA结束(LCM闲置时),
WR就变成了普通的IO口并输出IO电平,这可能会使WR引脚上出现额外的脉冲波形。
实际使用中:
1. I8080模式时,WR的初始化为高电平,并设置成推挽输出,以后就一直不要改变.
2. 一行扫描最好只用一次DMA完成, 不要分割成多次,可避免间隙期间电平的变化。
如果是使用M6800的E脚,则初始电平应该设置成低电平。
cyf1029
发表于 2025-8-14 15:01:32
tzz1983 发表于 2025-8-14 14:57
还有个地方要注意,LCM口和普通IO口是共用的,也就是说,当DMA结束(LCM闲置时),
WR就变成了普通的IO口 ...
每次传输一行数据,使用PWM在更新中断修改行地址和数据首地址,使用LCM_DMA中断进行数据锁存,这样应该也是没问题的,我刚刚用示波器看了,一个OE周期内clk的数量也是对的
tzz1983
发表于 2025-8-14 15:04:56
cyf1029 发表于 2025-8-14 15:01
每次传输一行数据,使用PWM在更新中断修改行地址和数据首地址,使用LCM_DMA中断进行数据锁存,这样应该也 ...
会不会模组的CLK端不支持高电平结束呢?
我这边用过几种模组,HUB75/HUB12都是正常的。
也可以考虑一下,试试改成增加/减少一位看看结果
tzz1983
发表于 2025-8-14 15:08:02
cyf1029 发表于 2025-8-14 15:01
每次传输一行数据,使用PWM在更新中断修改行地址和数据首地址,使用LCM_DMA中断进行数据锁存,这样应该也 ...
理论上,模组是上升沿锁存数据,即使CLK上升沿后不变低电平也可正常锁存数据。但会不会有例外不一定
tzz1983
发表于 2025-8-14 15:12:23
cyf1029 发表于 2025-8-14 15:01
每次传输一行数据,使用PWM在更新中断修改行地址和数据首地址,使用LCM_DMA中断进行数据锁存,这样应该也 ...
实在不行,就花点时间,改成IO驱动吧,调成功后,用示波器记录波形。
再改回DMA, 输出同样的数据,看看波形异同
慢慢测试,祝成功!