找回密码
 立即注册
楼主: tzz1983

试用32G12K128系列,感觉不错,很舒服

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:36
  • 最近打卡:2026-04-17 10:38:38

36

主题

1158

回帖

2885

积分

荣誉版主

积分
2885
发表于 2026-4-14 09:31:29 | 显示全部楼层
乘*** 发表于 2026-4-13 14:57
我现在在用这种方法驱动全彩,如果用STC32G144K单片机以48M晶振驱动64张全彩的话,达到104帧的刷新率,效果 ...
不过还有个问题,就是如何调节亮度呢???我把EN脚用PWM来驱动,乱码,感觉只能LCM_DMA发送完一行数据,再改一下EN脚才有用,其它地方改变EN脚的话,都有可能乱码

注意一下时序,大致是这样的,比如是四扫描的,PWM中断启动DMA, 先把其中1次扫描的数据用DMA发出去,但先不要锁存HS(锁存) , 等到下次PWM中断的时候锁存,我一直都是这么做的,很稳定,
锁存很快,就一条语句改变IO即可,这么语句放在PWM中断执行代码的偏前几句,也就是改变扫描地址后立即锁存。即保证时间间隔粒度精确,同时启动下次DMA,如此循环往复。
PWM的亮度由另一路占空比控制(EN),与与数据的控制逻辑无关的,或者说关联不大,如果你不放心,可以限制一下占空比,让EN在PWM中断前期保持不动,但我这边测试时,无论多少占空比者是正常的,亮度从0-100%连续无级。
另外你的代码应该是还有优化空间的,我用22.1184的时钟,12块模组,6144点,做300的的帧率一点压力都没有,你的帧率才100多,数据相差几倍,况且你的时钟比我快一倍多
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2026-04-27 09:59:53

13

主题

79

回帖

367

积分

中级会员

积分
367
发表于 2026-4-14 14:20:37 | 显示全部楼层
tzz1*** 发表于 2026-4-14 09:31
注意一下时序,大致是这样的,比如是四扫描的,PWM中断启动DMA, 先把其中1次扫描的数据用DMA发出去,但 ...
  1. // LCM DMA中断服务程序
  2. void DMA_LCM_ISR(void) interrupt DMA_LCM_VECTOR
  3. {
  4.     if(DMA_LCM_STA & 0x01)    //判断LCM DMA中断
  5.     {
  6.         DMA_LCM_STA &= 0xfe;  //清除LCM DMA中断标志
  7.                 LED_EN=1; //关显示
  8.                
  9.                 P7=(P7&0xF0)|LCM_ROW; //写行号
  10.                 _nop_();
  11.                
  12.                 LED_STB=1;  //锁存
  13.                 _nop_();
  14.                 LED_STB=0;
  15.                
  16.                 LED_EN=0; //开显示
  17.                
  18.                 LCM_ROW = ++LCM_ROW % SCAN_ROWS; //8分之1扫
  19.                
  20.                 if(LCM_ROW>=SCAN_ROWS2){ //后4行内存定在hdata中,这样可以超64K限制
  21.                         DMA_LCM_TXAH = (U8)(((U32)(Led_Buf2+SCAN_SIZE*(LCM_ROW-SCAN_ROWS2)))>>8);
  22.                         DMA_LCM_TXAL = (U8)(Led_Buf2+SCAN_SIZE*(LCM_ROW-SCAN_ROWS2));
  23.                         DMA_ARB_CFG |= 0x20;//hdata内存区间
  24.                 }else{ //前4行的内存定在xdata中
  25.                         DMA_LCM_TXAH = (U8)(((U32)(Led_Buf+SCAN_SIZE*LCM_ROW))>>8);
  26.                         DMA_LCM_TXAL = (U8)(Led_Buf+SCAN_SIZE*LCM_ROW);
  27.                         DMA_ARB_CFG &= 0xdf;//xdata内存区间
  28.                 }
  29.                
  30.                 DMA_LCM_CR |= 0x20;//启动DMA发送数据
  31.     }
  32. }
复制代码


你说我的刷新率不达标,但我的代码已经极简了,刷新率不高我也没办法,现在是不停的发送,我用的是8位数据送出的,P25,P26,P44这3个端口是不用能的。。。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2026-04-27 09:59:53

13

主题

79

回帖

367

积分

中级会员

积分
367
发表于 2026-4-14 14:29:30 | 显示全部楼层
现在的问题就是没法无级调亮度,如果把这里的LED_EN的两行注释掉,另外开个PWM调亮度,则显示出来的数据乱码,给我的感觉就是在发送8位数据的时候,不能开关EN来调亮度,我严重怀疑是我的单元板不支持吗???
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2026-04-27 09:59:53

13

主题

79

回帖

367

积分

中级会员

积分
367
发表于 2026-4-14 14:52:15 | 显示全部楼层
我来计算1下看看这个刷新率是否正常,比如80张模组,像素是32*64*80=163840,占用的内存是163840/2=81920字节

83帧就相当于每秒发送81920*83=6799360字节,48M晶振下,48000000/6799360=7,也就是说每发送1个字节需要占7个时钟周期


回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2026-04-27 09:59:53

13

主题

79

回帖

367

积分

中级会员

积分
367
发表于 2026-4-14 15:24:36 | 显示全部楼层
神*** 发表于 2026-4-13 22:39
如果用STC32G144K单片机以48M晶振

===STC32G144K246 可以跑 100MHz ~ 120MHz

神大,我计算出来,LCM_DMA发送1个字节需要7个时钟周期,对吗?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2026-04-27 09:59:53

13

主题

79

回帖

367

积分

中级会员

积分
367
发表于 2026-4-14 17:33:08 | 显示全部楼层
调亮度的问题搞定了,就是锁存这个端口不能用P45,用别的端口就可以了,看来又要多浪费一个IO口了,不过虽然能调亮度,但现在屏上有很多雪花点。。。如果不用PWM调亮度,则没有雪花点。。。

点评

细节问题需要你自己慢慢去摸索,不过呢,一般情总下,调亮度端(EN) 确实和数据逻辑没有关系,随时可以的。 但也不是绝对,得看规格书,我也遇到和EN和锁存功能混合在一起的芯片,好像是说支持二级绶存更快一点,具  详情 回复 发表于 2026-4-14 21:23
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:36
  • 最近打卡:2026-04-17 10:38:38

36

主题

1158

回帖

2885

积分

荣誉版主

积分
2885
发表于 2026-4-14 21:23:31 | 显示全部楼层
乘*** 发表于 2026-4-14 17:33
调亮度的问题搞定了,就是锁存这个端口不能用P45,用别的端口就可以了,看来又要多浪费一个IO口了,不过虽 ...

细节问题需要你自己慢慢去摸索,不过呢,一般情总下,调亮度端(EN) 确实和数据逻辑没有关系,随时可以的。
但也不是绝对,得看规格书,我也遇到和EN和锁存功能混合在一起的芯片,好像是说支持二级绶存更快一点,具体型号和细节我忘记了。但大多数时候不会遇到。
另外帧率不受总点数限制,而是受串多少块板(即一行数数据的总长度限制)你可以用一个空闲的定时器,用硬件来捕捉DMA所需的时间,这样就可以确定PWM中断最小周期,从而为最大化帧率提供数据依据。
另外DMA本身的速度是可以调,但不要调到最快,太快的话容易花屏,即排线的传输线效应,承接不了太快的速率。自己可以反复尝试,先找到一个临界点,然后以比它慢两三倍的速度以确保安全。

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2026-04-27 09:59:53

13

主题

79

回帖

367

积分

中级会员

积分
367
发表于 2026-4-16 15:34:23 | 显示全部楼层
tzz1*** 发表于 2026-4-14 21:23
细节问题需要你自己慢慢去摸索,不过呢,一般情总下,调亮度端(EN) 确实和数据逻辑没有关系,随时可以的 ...

雪花点的问题我解决了,就是在锁存前,把pwm先关一下,锁存完再开就可以了。。。

这样PWM的频率随便调,且PWM不用中断,只需开一个LCM_DMA中断即可。。。代码简单,驱动力强大!!!
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:29 , Processed in 0.129665 second(s), 86 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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