发 帖  
原厂入驻New
[资料]

解决STM8L152 LCD液晶驱动段码亮度不一样的经验分享

2019-11-14 09:31:00  2222 STM8 驱动器 LCD
分享
PF2AxxH_Program.rar (81.52 KB, 下载次数: 1)


LCD资料.rar (4.42 MB, 下载次数: 2)


        我对LCD液晶驱动还是朦朦胧胧的时候,遇上了这个刚硬的task。
所以,写下这个帖子,为后面的同学填坑!

说一下遇到问题的时候啊,不应该张口就问(我感觉我有时候就是,自己不动脑):
        首先,你要知道自己的问题在哪儿,把问题罗列清楚,就已经解决一半了。
        其次,查资料,百度,Google,必应等搜索引擎;发烧友,21IC,51黑,CSDN,开源电子网,野火电子论坛等各种论坛。
        最后,运用官方手册,咨询(液晶)厂家官方,配合程序代码的配置,看了又看,翻译之后再翻译,捋一捋清楚;示波器、程序调试仿真,来了又来!我敢保证问题就解决了。

        进入正题:
1、状态描述,LCD段码液晶屏幕驱动,我写这个驱动的时候,还不太清楚原理,就网上找了一下,大楷了解了,就是用方波信号驱动,如下图:
现在配置的波形.png Liquid.png
2、波形分析,3channel和4channel是COM信号,2channel是SEG信号,我是点亮所有段的程序,所以这里呢,SEG信号对应的两个COM也就是2段都会亮,在段码的任意一个高(低)电平,2个COM都
会有与之对应的相反电平且各占一半,这里又要插入一份液晶屏厂家提供的液晶资料,如下图:
液晶引脚图.png 液晶参数.png
这是由2个COM口,25个段码组成的屏,参数的话主要就是看驱动模式和电压,图上的5V电压有误(应该是3.3V),可以看到占空比是1/2,偏压也是1/2,
然后驱动频率>128Hz,从波形中看出来我们的配置没有问题,其他的参数可以自行了解。这里再插入一张STM8的LCD_CR1寄存器的图:
STM8_LCD_CR1.png
初始化如下:
void LCD_init(void)
{
        /*
        系统时钟HSI=16MHz , LSI=38KHz
        1、LSI clock used as RTC clock source
        2、RTC clock source / 2
        */
        CLK_CRTCR     = 0x24;//RTC_CLK = 38KHz/2= 19KHz
        CLK_PCKENR2   = 0x08;//开启LCD时钟
        /*
        19KHz = RTCCLK / 2 to LCD
        19KHz = (Halt) LCDCLK
        */
        LCD_FRQ=0x10;//这里 2PS[3:0]=2^1=2  ;  DIV[3:0]+16=?  1.8ms*4=5.2  192.3Hz  7ms 142.86Hz
        LCD_CR1=0x03;// 1/2duty  1/2bias 0x03
        /*
        高驱动使能
        该位永久启用低电阻分压器。 内阻高的显示器可能
        需要更长的驱动时间才能获得令人满意的对比度,因此如果存在
        没有强大的功率约束。
        */
        LCD_CR2=0x1E;//PON调节对比度 将高性能驱动打开就OK
        LCD_CR3=0x03;//1-phase period dead time
        LCD_CR4=0x00;//
        
        //Configures the LCD Port Mask.
        LCD_PM0=0xFF;
        LCD_PM1=0xFF;
        LCD_PM2=0xFF;
        LCD_PM3=0x01;
        LCD_PM4=0x00;
        LCD_PM5=0x00;
        
        LCD_CR3|=0x40;//LCD enable

        //点亮所有的段
     /*LCD_RAM0=0xff;LCD_RAM1=0xff;LCD_RAM2=0xff;LCD_RAM3=0xff;
        LCD_RAM4=0xff;LCD_RAM5=0xff;LCD_RAM6=0xff;LCD_RAM7=0xff;
        LCD_RAM8=0xff;LCD_RAM9=0xff;LCD_RAM10=0xff;LCD_RAM11=0xff;
        LCD_RAM12=0xff;LCD_RAM13=0xff;LCD_RAM14=0xff;LCD_RAM15=0xff;
        LCD_RAM16=0xff;LCD_RAM17=0xff;LCD_RAM18=0xff;LCD_RAM19=0xff;
        LCD_RAM20=0xff;LCD_RAM21=0xff; */
}


3、问题现象,我之前配置出来的现象是COM2端口的所有SEG段比COM1端口的所有SEG暗,应该是驱动能力不够!
12点视角.jpg 6点视角.jpg
后面打开LCD_CR2的bit4,就感觉好很多了,功能描述如下:
High drive enable
This bit permanently enables the low resistance divider. displays with a high internal resistance may
need longer drive time to achieve a satisfactory contrast, so the software can set the HD bit if there is
no strong power constraint.

高驱动使能
该位永久启用低电阻分压器。 内阻高的显示器可能
需要更长的驱动时间才能获得令人满意的对比度,因此如果存在
没有强大的功率约束。
345.jpg 012.jpg 看起来整体暗了一点,
有点怀疑液晶屏内阻较大,单片机的驱动能力不够,but , it looks much better ,isn't? ~~~
4、段码如何和显存地址对应起来
High_density.png LCD_Controller_block.png
可以从手册中看出来STM8L152是高密度型器件,那么他就有8个COM,44个SEG,但是我这里呢,只用了2个COM,25个SEG,看网上说的用4个COM还是8个COM会有问题(
没有试过,不知道!)
那么液晶厂家给的PIN脚和COM脚对应的单片机引脚怎么和液晶的显示缓存地址对应起来,实现把数据写到缓存对应的SEG段就会亮呢?
我们的COM脚和SEG脚在STM8L152数据手册上已经给出了
Pin.png 我们就是对应这里的LCD_COMx和LCD_SEGx,然后再看一张显存表,一张SEGx段对应的COMx[y]口关系图和一张中高密度器件如果要用8个COM的控制寄存器LCD_CR4:
display.png devices.png LCD_CR4.png
现在就很清晰了,对不对,就是SEG0[Pin]=COM0[Pin] , SEG1[Pin]=COM1[Pin],Pin就是你连接到单片机的引脚对应的LCD_SEGx,COM就是你接到单片机的COM0~COM7;
我这里LCD液晶屏资料的COM1连到单片机的COM0,COM2连到单片机的COM1,Pin脚1~25接到单片机的LCD_SEG0~LCD_SEG24;所以我要点亮P1这个笔段的话
就是S0[SEG0]或者就说S0[0]=1就行了,然后对应单片机内存地址0x0C(LCD_RAM0)这个地址(寄存器)的第0位写1,就能点亮了。

see you next time
2
正面观察.jpg
分享淘帖 显示全部楼层
最近下载过的用户(1)
· 2019-11-14 10:47:01
我来评论一下!哈哈,调节液晶屏的鬼影和字淡的问题,主要是调节驱动电压,方法可以LCD_CR1和LCD_CR2,这两个寄=寄存器是调节偏压和对比度的;再不行去调节死区时间或者延时时间,方法是设置LCD_CR3。
· 2019-11-14 11:07:49
拓展一下小知识,FSTN类型的屏可以看得穿,VA屏看不穿。所以在点亮背光灯的时候,FSTN屏不点亮任何段也可以看到背光颜色,但是VA的不可以,所以选择的时候根据应用场合决定。
· 2020-5-22 09:35:23
好,很不错,好好学习下先,谢谢分享啊!
· 2020-5-26 08:42:14
好,很不错,好好学习下先,谢谢分享啊!
· 2020-6-13 14:52:42
好,很不错,好好学习下先,谢谢分享啊!
· 2020-8-7 11:36:52
好,很不错,好好学习下先,谢谢分享啊!

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发资料
关闭

站长推荐 上一条 /8 下一条

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